OCT Architecture Document#
Version: 3.3
Status: Authoritative Reference
Scope: Defines the architecture, structure, and design philosophy of the OCT (Option C Tools) ecosystem v0.25.0, depending on oc_diagnostics v2.0.
Version history:
1.1 — Initial release
1.2 — Updated Diagnostics Package section to reflect
oc_diagnosticsv1.5; added FastAPI middleware, logging handler, full public API surface, and completedebug_config.jsonschema2.0 — Major update: added Formatter (v0.7.1), Health Dashboard (v0.7.2), Core module (
exclusions.py,compat.py),oct cleancommand. Updated directory structure, diagrams, module inventory, and test suite documentation. Marked implemented features; updated future items.2.1 — Added global
--root-dirCLI option for overriding project root detection (v0.7.3).2.2 — Added
safe_parse()shared helper andsyntax_warningslint check; capturesSyntaxWarningfrom AST parsing as structured lint findings (v0.7.4).2.3 — Hardened
oct healthtest reporting: pre-flight pytest detection, actionable error details with--tb=line, test count always shown,=decoration stripped, stderr fallback, status label formatting. Addedpytest>=7.0as core dependency. Addedtests/run_tests.pyandtests/Tests_README.mdto OCT’s own test suite (v0.7.5).2.4 — Added
no_hardcoded_secretslinter rule (§6b Secret Hygiene, DD-05). AddedNEVER_EXPORT_FILE_PATTERNSto exclusions.py for file-level export filtering. Removed.envfrom exporter extension profiles. Addedoct docs --doxygen,--all,--clean,--dry-runflags andoct/docs/oct_docs.pymodule. Updated directory structure, test counts (97 tests across 4 suites), and module inventory.2.5 — Fixed
oct export-sourceconfig resolution: usesget_project_root()instead of rawcwd, three-tier config fallback (project → oct bundled → built-in defaults). Addedoct testmeta-project sub-discovery for monorepo roots. Updated CLI commands table and sequence diagram (v0.9.1).2.6 — Added
oct export-skeletoncommand (AST-based skeleton extraction with--no-diagnostics,--single-dir,--verbose,--clean). Added_skeletontoWILDCARD_EXCLUDE_DIRS. Updatedoct cleanto also remove_skeleton_code-*dirs. Updated test counts (123 tests across 5 suites).3.0 — Added Git integration modules:
oct/core/git.py(git primitives),oct/git/package (quality_gate, policy, audit, conventional, oct_git commands). Addedoct git status,oct git check,oct git init,oct git commit,oct git hookscommands. Updated directory structure, diagrams, CLI table, and test counts (477 tests across 10 suites). Version bump v0.9.1 → v0.12.0.3.1 — Phase 4E: Added
oct git changelogcommand,oct/git/changelog.pymodule, branch naming enforcement, branch-aware auto-profile selection,oct healthgit section,oct export-source --diff,oct test --changed,.octrc.jsongit schema validation. Updated test counts (542 tests, 2 skipped). Version bump v0.12.0 → v0.13.0.3.2 — Phase 6B+: Added
oct/tools/secret_scanner.py(standalone scanner, OI-514),oct/core/waivers.py(shared inline waiver parsing, OI-540). Added entropy-based secret detection (FS-507) with per-context thresholds (code ≥ 4.5, docstring > 5.0, comment > 5.0). Addedentropy_exclusionsin.octrc.jsonsecret_scannersection (field-name exclusions for namedtuple/dataclass fields, path-based exclusions for test directories). Quality gate honours inline waivers universally. Updated directory structure, module table, configuration schema, test counts (1402 tests, 9 skipped).3.3 — Phase F1 / v0.25.0: Workspace mode introduced (
.option_c_workspace.jsonmanifest).oct git status / commit / ignore / initfan out across subprojects when invoked from the workspace root, with per-subproject quality gates and a workspace bucket for files matched byworkspace_files[]. Per-subprojectCHANGELOG.mdandSECURITY.mdintroduced at canonical root locations. Updatedoc_diagnosticsreference to v2.0.0; updated scope line to v0.25.0.
1. Overview#
OCT (Option C Tools) is the official development ecosystem for all Option C-compliant projects. It provides:
a linter — static compliance analysis (AST-based)
a formatter — auto-fix compliance violations
a health dashboard — single-command project compliance report
a file generator — create new compliant files
a project scaffolder — create full project templates
a documentation validator — check required docs
a test runner — pytest wrapper
a source exporter — consolidate source for review
a cleanup tool — remove generated artifacts
integration with the standalone
oc_diagnosticspackage
OCT enforces the Option C coding philosophy and provides a predictable, diagnostics-aware development workflow.
2. High-Level Architecture#
+-------------------------------------------------------------+
| OCT CLI [--root-dir] |
| lint | format | health | new | scaffold | docs | test |
| export-source | export-skeleton | clean | diag | deps |
| git (status | check | init | commit | hooks) |
+-------------------------------------------------------------+
| | |
v v v
+--------------------+ +-----------+ +-----------------------------+
| OCT Modules | | OCT Core | | oc_diagnostics v2.0 |
| - Linter | | - excl. | | - unified_debug |
| - Formatter | | - compat | | - instrumentation |
| - Health | | - root | | - ui_event_logger |
| - Generator | | - git | | - fastapi_middleware |
| - Exporter | +-----------+ | - logging_handler |
| - Git Integration | | - self-test suite |
+--------------------+ +-----------------------------+
|
v
+-----------------------------+
| Option C Project |
| - src/ |
| - tests/ |
| - docs/ |
| - oc_diagnostics/debug_config |
+-----------------------------+
OCT is a development-time tool.
oc_diagnostics is a runtime system.
Projects consume both.
flowchart TD
subgraph CLI["OCT CLI"]
LINT["oct lint"]
FORMAT["oct format"]
HEALTH["oct health"]
NEW["oct new"]
SCAFFOLD["oct scaffold"]
DOCS["oct docs"]
TEST["oct test"]
EXPORT["oct export-source"]
SKELETON["oct export-skeleton"]
CLEAN["oct clean"]
DEPS["oct deps"]
DIAG["oct diag"]
GIT["oct git"]
end
subgraph CORE["OCT Core"]
EXCLUSIONS["exclusions.py\n(shared exclude lists)"]
COMPAT["compat.py\n(oc_diagnostics version check)"]
ROOT["project_root.py\n(root detection)"]
PARSING["parsing.py\n(safe AST parsing)"]
GITCORE["git.py\n(git primitives)"]
WAIVERS["waivers.py\n(inline waiver parsing)"]
end
subgraph OCT["OCT Modules"]
LINTER["Linter\n(oct_lint.py)"]
FORMATTER["Formatter\n(oct_format.py)"]
HEALTHMOD["Health Dashboard\n(oct_health.py)"]
GENERATOR["File Generator\n(new_python_file.py)"]
SCAFFOLDER["Project Scaffolder\n(cli.py)"]
EXPORTER["Source Exporter\n(source_exporter.py)"]
SKELEXP["Skeleton Exporter\n(skeleton_exporter.py)"]
GITMOD["Git Integration\n(oct_git.py, quality_gate.py,\npolicy.py, audit.py, conventional.py)"]
end
subgraph DIAGPKG["oc_diagnostics v2.0\n(Standalone Package)"]
UDEBUG["unified_debug.py\n(_dbg, _adbg, domains, levels,\nruntime API, profiling)"]
INSTR["id_instrumentation.py\n(ID rewriting)"]
MIDDLE["instrumentation_middleware.py\n(callback patching)"]
LOGGER["ui_event_logger.py\n(event capture)"]
FMIDDLE["fastapi_middleware.py\n(ASGI middleware)"]
LHANDLER["logging_handler.py\n(stdlib logging bridge)"]
end
subgraph PROJECT["Option C Project"]
SRC["src/ or ui/ or engine/"]
TESTS["tests/"]
DOCS2["docs/"]
CONFIG["oc_diagnostics/debug_config.json"]
end
CLI --> CORE
CLI --> OCT
OCT --> CORE
OCT --> DIAGPKG
OCT --> PROJECT
DIAGPKG --> PROJECT
mindmap
root((OCT Ecosystem))
CLI
lint
format
health
new
scaffold
docs
test
export-source
export-skeleton
clean
deps
diag
git
status
check
init
commit
hooks
Core
exclusions
compat
project_root
git primitives
Modules
Linter
Formatter
Health Dashboard
File Generator
Project Scaffolder
Source Exporter
Git Integration
oc_diagnostics (v2.0)
_dbg / _adbg
instrumentation
middleware
event logger
FastAPI middleware
logging handler
self-test suite
Option C Project
src/
tests/
docs/
oc_diagnostics/debug_config.json
3. Directory Structure of OCT#
oct/
oct/
__init__.py # Package init, exposes __version__
__main__.py # python -m oct support
cli.py # Click CLI — all commands
core/
project_root.py # Project root detection (docs/ + tests/ + oc_diagnostics/)
exclusions.py # Shared exclusion lists (dirs + NEVER_EXPORT_FILE_PATTERNS)
compat.py # oc_diagnostics version compatibility check
parsing.py # Shared safe AST parsing
terminal.py # Shared terminal color utilities
git.py # Git primitives (run, staged files, branch, diff)
waivers.py # Shared inline waiver parsing (OCT-LINT: disable=...)
linter/
__init__.py
oct_lint.py # AST-based Option C linter (incl. no_hardcoded_secrets)
formatter/
__init__.py
oct_format.py # Auto-fixer for compliance violations
health/
__init__.py
oct_health.py # Project compliance dashboard
deps/
__init__.py
oct_deps.py # Dependency graph generation
diag/
__init__.py
oct_diag.py # Diagnostics config management
docs/
__init__.py
oct_docs.py # Documentation pipelines (Sphinx, Doxygen, clean)
git/
__init__.py
oct_git.py # oct git status/check/init/commit/hooks commands
quality_gate.py # Unified quality gate (lint + format + secrets)
policy.py # Profile resolution, protected branches, scope filtering
audit.py # @audited decorator, AuditRecord, JSONL logging
conventional.py # Conventional Commits parser, validator, diagnostics impact
hooks/
__init__.py
oct_hooks.py # Pre-commit hook integration (legacy)
typecheck/
__init__.py
oct_typecheck.py # Type checking integration
generator/
new_python_file.py # Option C file generator
tools/
source_exporter.py # Source code consolidation exporter
skeleton_exporter.py # Structural skeleton exporter (AST-based)
secret_scanner.py # Standalone hardcoded-secret detection (AST + entropy)
templates/
sphinx/ # Sphinx templates (conf.py.template, CSS, logo)
tests/
run_tests.py # pytest runner script
Tests_README.md # Test suite documentation
tests_linter/
conftest.py # Shared fixtures
fixtures/ # Test fixture files
test_func_pattern.py
test_header_fixing.py
test_headers.py
test_integration.py
test_no_hardcoded_secrets.py # §6b secret hygiene rule tests
test_regression.py
tests_formatter/
conftest.py # Shared fixtures
fixtures/ # Test fixture files
test_docstring_fixing.py
test_func_pattern_fixing.py
test_header_fixing.py
test_import_fixing.py
test_integration.py
tests_health/
conftest.py # Shared fixtures
test_docs_health.py
test_integration.py
test_lint_health.py
tests_core/
test_exclusions.py
test_git.py # Git primitives (run, staged, branch, diff)
test_project_root.py
tests_docs/
test_docs_clean.py # oct docs --clean tests
test_doxygen_cleanup.py
test_find_packages.py
tests_git/
conftest.py # Shared fixtures (temp_git_project, make_compliant_py, etc.)
test_audit.py # Audit record, JSONL writing, @audited decorator
test_conventional.py # CC parser, validator, error formatting, diagnostics impact
test_git_check.py # Quality gate command integration tests
test_git_commit.py # Commit command: exit codes, safety gates, secrets invariant
test_git_hooks.py # Hooks install/status/remove, deprecation shim
test_git_init.py # Init command: .gitignore, .gitattributes, workflow
test_git_status.py # Status command integration tests
test_policy.py # Profile resolution, protected branches, scope filtering
docs/
ARCHITECTURE.md # This file
ROADMAP.md
REFERENCE.md
README.md
linter.md
pyproject.toml
README.md
pytest.ini
3.1 Module Dependency Graph#
classDiagram
class OCTCLI {
+lint()
+format()
+health()
+new()
+scaffold()
+docs()
+test()
+export_source()
+clean()
+git()
}
class Core {
+find_project_root()
+check_oc_diagnostics_compat()
+LINTER_EXCLUDE_DIRS
+WILDCARD_EXCLUDE_DIRS
}
class Linter {
+run_linter()
+validate_header_block()
+check_docstring()
+check_diagnostics_profile()
+check_dbg_usage()
+check_dbg_import()
+check_func_pattern()
+check_no_hardcoded_secrets()
+find_python_files()
+LinterContext
}
class Formatter {
+run_formatter()
+fix_header_block()
+fix_docstring()
+fix_dbg_import()
+fix_func_pattern()
+FormatterContext
}
class HealthDashboard {
+run_health()
+check_lint_health()
+check_fixable_health()
+check_docs_health()
+check_test_health()
+check_compat_health()
}
class Generator {
+create_new_file()
}
class Exporter {
+run_exporter()
+clean_source_dirs()
+clean_pycache_dirs()
}
class GitIntegration {
+git_status_cmd()
+git_check_cmd()
+git_init_cmd()
+git_commit_cmd()
+hooks_install_cmd()
+hooks_status_cmd()
+hooks_remove_cmd()
+run_quality_gate()
+validate_commit_message()
}
OCTCLI --> Core
OCTCLI --> Linter
OCTCLI --> Formatter
OCTCLI --> HealthDashboard
OCTCLI --> Generator
OCTCLI --> Exporter
OCTCLI --> GitIntegration
Linter --> Core
Formatter --> Core
Formatter --> Linter : reuses check functions
HealthDashboard --> Linter : reuses check functions
HealthDashboard --> Formatter : reuses fix functions (dry-run)
HealthDashboard --> Core
Exporter --> Core
GitIntegration --> Core
GitIntegration --> Linter : quality gate
GitIntegration --> Formatter : quality gate
4. OCT CLI#
The OCT CLI is the primary entry point for all Option C tooling. It uses Click for command routing and delegates all logic to the appropriate module.
Available Commands#
Command |
Module |
Description |
|---|---|---|
|
|
Run the Option C linter (AST-based, JSON output, rule profiles) |
|
|
Auto-fix compliance violations (headers, docstrings, imports, func patterns) |
|
|
Display project compliance dashboard (lint, fixable, docs, tests, compat) |
|
|
Create a new Option C-compliant Python file |
|
|
Create a full Option C project template |
|
|
Validate docs, generate Sphinx/Doxygen HTML, or clean generated artifacts |
|
|
Run project tests via pytest (single-project or meta-project sub-discovery) |
|
|
Consolidate source code for review (excludes secret-bearing files) |
|
|
Export structural skeletons (headers, docstrings, signatures) for AI inspection |
|
|
Remove |
|
|
Validate, inspect, and update |
|
|
Dependency graph generation (JSON, Mermaid, DOT) |
|
|
Show git status with Option C compliance annotations |
|
|
Run the unified quality gate (lint + format + secrets) |
|
|
Initialise or enhance a git repo with Option C conventions |
|
|
Commit with quality gate and non-bypassable secrets enforcement |
|
|
Install, verify, or remove Option C git hooks |
Each command is implemented as a Click subcommand registered on the cli group.
CLI Design Patterns#
Argparse passthrough (
lint,format): Uses@click.argument("args", nargs=-1)to forward flags to internal argparse within the module. Allows richer flag handling.Click options (
health,new,scaffold,clean): Uses@click.option()directly for simpler command interfaces.
5. OCT Modules#
5.1 Core (oct/core/)#
Shared utilities used by multiple OCT modules.
File |
Responsibility |
|---|---|
|
Walk upward from cwd to find the project root (directory containing |
|
Shared |
|
Check whether |
|
Shared inline waiver parsing ( |
5.2 Linter (oct/linter/oct_lint.py)#
Responsibilities:
Enforce Option C header rules (3-line header + blank line)
Enforce module docstring structure (Purpose, Responsibilities, Diagnostics, Contracts)
Enforce diagnostics profile block (Domain + L2/L3/L4)
Enforce
_dbgusage for non-trivial modules (AST-verified, > 20 lines)Enforce
from oc_diagnostics import _dbgcanonical import (AST-verified)Enforce
func = "function_name"pattern per function (AST-verified)Detect hardcoded secrets in assignments, dicts, and function defaults (§6b Secret Hygiene, AST-verified) — delegates to
oct.tools.secret_scanner(OI-514)Detect high-entropy string literals via Shannon entropy (FS-507) — per-context thresholds: code strings ≥ 4.5 bits/char, docstrings > 5.0, comments > 5.0 (reserved)
Support
entropy_exclusionsfrom.octrc.json— field-name exclusions for namedtuple/dataclass documentation fields, path-based exclusions for test directoriesSupport inline waivers (
# OCT-LINT: disable=<rule> reason="...") — parsed byoct.core.waivers(OI-540)Check for regression tests (heuristic)
Generate terminal reports with colour, JSON output, and timestamped log files
Support configurable rule profiles via
.octrc.json(strict,compact,proto)
The linter is static-analysis only (AST parsing + text analysis). It never imports project modules.
Key exports: run_linter(), validate_header_block(), check_docstring(),
check_diagnostics_profile(), check_dbg_usage(), check_dbg_import(),
check_func_pattern(), check_no_hardcoded_secrets() (re-exported from oct.tools.secret_scanner),
find_python_files(), LinterContext.
5.3 Formatter (oct/formatter/oct_format.py)#
Added in v0.7.1.
Responsibilities:
Auto-fix malformed header blocks (shebang, encoding, file identity)
Insert or complete module docstrings with required sections
Add canonical
from oc_diagnostics import _dbgimportInsert
func = "function_name"in functions that call_dbg()Archive originals to
.formatter_archive/<filename>.<timestamp>.bakbefore modificationSupport dry-run mode (default), fix mode, JSON output, and verbose output
Design:
Report-then-fix model: Default is dry-run (report only).
--fixapplies changes.Fixer pipeline: header -> docstring -> import -> func_pattern (applied sequentially per file).
Each fixer returns
Tuple[bool, List[str]](changed, messages).Reuses linter’s
find_python_files()and exclusion lists.Uses
FormatterContextdataclass to encapsulate tool state.
5.4 Health Dashboard (oct/health/oct_health.py)#
Added in v0.7.2.
Responsibilities:
Aggregate lint check results across all Python files (per-check pass counts, compliance %)
Count fixable violations by running formatter checks in dry-run mode
Validate presence of required documentation files
Run pytest via subprocess and capture pass/fail status with test count and actionable error details
Detect missing pytest before subprocess invocation
Check
oc_diagnosticsversion compatibilityOutput results as terminal report or JSON
Design:
Composition layer: Reuses existing linter check functions and formatter fix functions directly (no subprocess calls), giving structured data natively.
Five independent check functions:
check_lint_health(),check_fixable_health(),check_docs_health(),check_test_health(),check_compat_health().All checks are independent; failure of one does not prevent others.
Terminal output uses ASCII-safe characters for Windows compatibility.
5.5 File Generator (oct/generator/new_python_file.py)#
Responsibilities:
Create new Python files with correct Option C headers
Insert
from oc_diagnostics import _dbginto generated filesGenerate module docstring templates with all required sections
Ensure correct file identity paths relative to project root
Validate target path is inside project root
Support
--force(overwrite) and--dry-runmodes
5.6 Source Exporter (oct/tools/source_exporter.py)#
Responsibilities:
Consolidate all source files into
_source_code-<timestamp>directoriesGenerate
_full_source.<root>.txtrollupExclude secret-bearing files via
NEVER_EXPORT_FILE_PATTERNS(§6b Secret Hygiene)Support
--verbose,--clean, and--single-dirmodesHandle I/O errors (including Windows MAX_PATH) gracefully: warn and continue
Truncate output filenames exceeding 240 characters, appending an MD5 suffix for uniqueness
Report skipped directories in the summary rather than crashing
Support per-project config via
_oct_exporter_config.jsonwith fallback to default configuration.
5.7 Documentation Pipelines (oct/docs/oct_docs.py)#
Responsibilities:
Sphinx pipeline (
--sphinx): Set up Sphinx config, discover markdown, generate API reference viasphinx-apidoc, generate dependency graphs, writeindex.rst, runsphinx-buildDoxygen pipeline (
--doxygen): Locate existing Doxyfile, patch staleINPUTpath in temp copy, rundoxygenCombined pipeline (
--all): Run both Sphinx and Doxygen sequentiallyClean pipeline (
--clean): Remove generated artifacts (html/,doctrees/,_api/,doxygen_output/,index.rst,dependencies.rst) while preserving user-authored filesExclude
.env*from Sphinx viaconf.py.templateexclude_patterns
Design:
Doxygen runs on a temporary copy of the Doxyfile — the original is never modified.
Sphinx config (
docs/_sphinx/conf.py) is generated once from templates; not overwritten on subsequent builds.Clean preserves
_sphinx/,_static/,_templates/,doxygen_work_dir/, and user-authored.mdfiles.
5.8 Skeleton Exporter (oct/tools/skeleton_exporter.py)#
Responsibilities:
Extract structural skeletons from Python files via AST: headers, module docstrings, class/function signatures with decorators and type hints.
Produce one-line placeholders for non-Python files (filename, line count, size).
Strip named docstring sections (
--no-diagnosticsremoves the Diagnostics block).Reuse source exporter infrastructure (config loading, exclusions, file collection, path safety).
Design:
Uses
safe_parse()fromoct.core.parsingfor robust AST parsing.Walks
tree.body(not flatast.walk) to preserve structural nesting (classes contain methods).Uses
ast.unparse()for faithful signature reconstruction (annotations, defaults, decorators)._strip_docstring_section()is generalised by section name, enabling future--no-contractsor--sections-excludeflags.Output structure mirrors
source_exporter: per-directory_skeleton_code-*dirs with_skeleton.<dotpath>.txtfiles plus_full_skeleton.<root>.txtrollup.
5.9 Git Integration (oct/git/)#
Added in v0.11.0 (Phase 4A/4B), extended in v0.11.1 (4C), v0.12.0 (4D), v0.13.0 (4E).
Responsibilities:
Git primitives: run commands, detect repo, list staged files, current branch, diffs
Quality gate: unified lint + format + secrets check with profile-based policy
Audit trail:
@auditeddecorator for JSONL logging of all git operationsConventional Commits: parser, validator, diagnostics impact analysis
Commit workflow: pre-flight checks, secrets enforcement (non-bypassable), protected-branch guards
Hooks management: install/status/remove
.pre-commit-config.yamlhooks
Architecture:
File |
Responsibility |
|---|---|
|
Low-level git primitives (subprocess wrappers, no OCT policy). |
|
Orchestrates lint, format, secrets checks. Returns |
|
Profile resolution ( |
|
|
|
|
|
Click commands: |
Key design decisions:
Zero external dependencies: Git commands use
subprocess.run(not gitpython).Non-bypassable secrets (G-D4 invariant):
--forceand--no-verifynever skip secrets detection. The quality gate always runs, andresult.secrets_findingsis checked unconditionally.Protected branches:
main/master(configurable via.octrc.json) force strict profile regardless of CLI override. Direct commits are blocked in strict mode.Audit trail: Every
oct gitcommand is decorated with@audited(cmd_name), which writes a JSONL record tologs/oct_git_audit*.jsonlwith timestamp, command, exit code, duration, and command-specific metadata.Commit exit codes differ from quality gate exit codes: Quality gate uses 0–5 (per-check granularity). Commit uses 0–4 (outcome-oriented). The commit command maps quality gate results to its own scheme.
6. Configuration#
6.1 Per-project linter configuration (.octrc.json)#
{
"linter": {
"profile": "default",
"exclude_dirs_add": ["vendor"],
"exclude_dirs_remove": ["data"],
"wildcard_exclude_add": ["_temp"],
"rules": {
"func_pattern": false
}
}
}
Profiles: strict (all rules), compact (public functions), proto (headers only).
Individual rule overrides via rules map.
Available rules: header, docstring, diagnostics_profile, dbg_usage, dbg_import,
func_pattern, no_hardcoded_secrets, tests_exist, type_hints.
6.2 Secret scanner configuration (secret_scanner in .octrc.json)#
{
"secret_scanner": {
"code_entropy_threshold": 4.5,
"docstring_entropy_threshold": 5.0,
"comment_entropy_threshold": 5.0,
"entropy_exclusions": [
{
"field_name_pattern": "correct_pattern",
"context": "namedtuple_field",
"reason": "Documentation code examples in rule definitions"
},
{
"path_pattern": "tests/",
"context": "test_directory",
"reason": "Test fixtures exempt from entropy",
"restrictions": {
"require_waiver_for_secret_patterns": true,
"exempt_entropy_only": true
}
}
]
}
}
code_entropy_threshold— Shannon entropy threshold for code strings (≥ comparison). Set to 0 to disable entropy checking. Default 4.5.docstring_entropy_threshold— threshold for docstrings (strict > comparison). Default 5.0.comment_entropy_threshold— reserved for future AST-level comment scanning. Default 5.0.entropy_exclusions— array of exclusion rules:context: "namedtuple_field"+field_name_pattern— exempt keyword arguments with matching names in Call nodes (e.g.RuleInfo(correct_pattern="...")).context: "test_directory"+path_pattern— exempt files under matching paths.restrictions.exempt_entropy_onlydisables entropy without disabling name-pattern detection.restrictions.require_waiver_for_secret_patternsrequires inline waivers for name-based findings.
Known limitation: Inline waivers (# OCT-LINT: disable=no_hardcoded_secrets reason="...") are matched at file level — a single waiver suppresses all no_hardcoded_secrets findings in the file. Per-line waiver matching is a planned improvement.
6.3 Per-project exporter configuration (_oct_exporter_config.json)#
Supports add/remove/replace semantics for include_extensions, exclude_dirs, and
wildcard_exclude_dirs. When missing, oct export-source uses the default configuration
defined in oct/core/exporter_config.py.
7. oc_diagnostics Integration#
oc_diagnostics is a standalone runtime package providing:
_dbg— synchronous structured debug logging_adbg— async variant for use insideasync deffunctions (FS-16)DEBUG_LEVELS— dict of domain to active levelinit()— activate stream interception and exception hook; acceptswatch_config=Truefor hot-reload (FS-09)set_debug_level(domain, level)— runtime domain level override (FS-03)set_global_setting(key, value)— runtime global setting override (FS-03)dbg_timed(domain, func, label, level)— context manager: logs ENTER + EXIT with elapsed ms (FS-12)dbg_scope(domain, func, label, level)— context manager: logs ENTER + EXIT without timing (FS-12/FS-19)dbg_profile(domain, func, label, level)— decorator: wraps a function withdbg_timed(FS-12)OcDiagnosticsHandler— Pythonlogging.Handlerthat routes records through_dbg(FS-08)apply_instrumentation— Dash ID instrumentation (requirespip install oc_diagnostics[dash])DiagnosticsMiddleware— pure ASGI HTTP middleware (requirespip install oc_diagnostics[fastapi])
flowchart TD
CONFIG["oc_diagnostics/debug_config.json\n(Project-specific)"]
UDEBUG["unified_debug.py\n(_dbg, _adbg, domains, levels,\nruntime API, profiling, hot-reload)"]
LHANDLER["logging_handler.py\n(OcDiagnosticsHandler)"]
INSTR["id_instrumentation.py\n(ID rewriting)"]
MIDDLE["instrumentation_middleware.py\n(callback patching)"]
LOGGER["ui_event_logger.py\n(event capture)"]
FMIDDLE["fastapi_middleware.py\n(ASGI middleware)"]
APP["Dash / FastAPI / Application Code"]
CALLBACKS["Callbacks"]
OUTPUT["Instrumented Output"]
CONFIG --> UDEBUG
UDEBUG --> INSTR
UDEBUG --> MIDDLE
UDEBUG --> LOGGER
UDEBUG --> LHANDLER
UDEBUG --> FMIDDLE
APP --> CALLBACKS
CALLBACKS --> MIDDLE
MIDDLE --> OUTPUT
INSTR --> OUTPUT
LOGGER --> OUTPUT
Project structure#
Projects include only:
oc_diagnostics/debug_config.json
Everything else is imported from oc_diagnostics.
Installation#
Core (always required):
pip install oc_diagnostics
With Dash instrumentation:
pip install oc_diagnostics[dash]
With FastAPI / ASGI middleware:
pip install oc_diagnostics[fastapi]
With JSON Schema config validation (FS-18):
pip install oc_diagnostics[validation]
Import surface#
Top-level imports (always available):
from oc_diagnostics import _dbg # synchronous structured logging
from oc_diagnostics import _adbg # async variant (FS-16)
from oc_diagnostics import DEBUG_LEVELS
from oc_diagnostics import init
from oc_diagnostics import set_debug_level # runtime domain level override (FS-03)
from oc_diagnostics import set_global_setting # runtime global setting override (FS-03)
from oc_diagnostics import dbg_timed # timing context manager (FS-12)
from oc_diagnostics import dbg_scope # lifecycle context manager (FS-12/FS-19)
from oc_diagnostics import dbg_profile # timing decorator (FS-12)
from oc_diagnostics import OcDiagnosticsHandler # Python logging integration (FS-08)
from oc_diagnostics import apply_instrumentation # requires: pip install oc_diagnostics[dash]
from oc_diagnostics import DiagnosticsMiddleware # requires: pip install oc_diagnostics[fastapi]
Sub-module imports for advanced usage:
from oc_diagnostics.id_instrumentation import instrument_ids, MAX_INSTRUMENT_DEPTH
from oc_diagnostics.ui_event_logger import register_callbacks, REQUIRED_STORE_ID
from oc_diagnostics.unified_debug import ADDITIONAL_STRUCTURAL_PREFIXES, ADDITIONAL_STRUCTURAL_EXACT
from oc_diagnostics.unified_debug import HTTP_REDACT_HEADERS, UI_EVENT_PROPERTIES
debug_config.json — full schema#
All keys available in global_settings:
{
"domains": {
"GENERAL": { "level": 2, "color": "default" },
"UI": { "level": 3, "color": "cyan" },
"DATA": { "level": 3, "color": "green" },
"HTTP": { "level": 2, "color": "blue" },
"STDOUT": { "level": 2, "color": "gray" },
"STDERR": { "level": 2, "color": "red" },
"PYERR": { "level": 1, "color": "red" }
},
"global_settings": {
"silent_mode": false,
"enable_timestamps": true,
"enable_colors": true,
"include_filename": true,
"output_mode": "both",
"instrumentation_enabled": false,
"max_log_files": 10,
"max_log_size_mb": 5.0,
"ui_event_properties": ["n_clicks", "value", "data", "figure", "selectedData"],
"instrumentation_allow_all": false,
"mode": "dev",
"http_redact_headers": ["authorization", "cookie", "set-cookie", "x-api-key"],
"structural_id_prefixes": [],
"structural_id_exact": []
}
}
output_mode options: "terminal", "file", "both", "json" (JSONL structured log, FS-07).
mode options: "dev" (default), "prod" / "production" / "safe" (suppresses stream interception and exception hook, FS-15). Can also be set via OC_DIAGNOSTICS_MODE environment variable.
Environment variables that override config:
OC_DIAGNOSTICS_CONFIG— absolute path todebug_config.jsonOC_DIAGNOSTICS_LOG_DIR— absolute path for log directoryOC_DIAGNOSTICS_MODE— set toprodto activate production modeUNIFIED_DEBUG_DISABLE_EXCEPTION_HOOK=1— disable custom exception hookUNIFIED_DEBUG_DISABLE_STDIO_INTERCEPT=1— disable stdout/stderr interception
OCT Integration#
oct scaffoldcreatesoc_diagnostics/debug_config.jsonwith a validoc_diagnosticstemplateoct newgenerates files withfrom oc_diagnostics import _dbgoct lintchecks_dbgimport source, usage, and diagnostics profile blocksoct formatadds missing_dbgimports andfunc = "..."patternsoct healthchecksoc_diagnosticsversion compatibilityoct docsvalidates diagnostics blocksFuture:
oct diagwill expose diagnostics tools directly
8. Option C Coding Rules (Summary)#
8.1 File headers#
shebang (
#!/usr/bin/env python3)encoding (
# -*- coding: utf-8 -*-)file identity (
# project/path.py)blank line
8.2 Module docstrings#
Purpose
Responsibilities
Diagnostics (Domain + L2/L3/L4)
Contracts
8.3 Diagnostics#
from oc_diagnostics import _dbg(canonical import)func = "function_name"in every function that calls_dbg()_dbg(domain, func, message, level)calls at L2/L3/L4Domain must exist in
debug_config.json
8.4 Trivial file exemption#
Files under 20 lines are exempt from _dbg usage, _dbg import, and func = "..."
checks. This prevents over-enforcement on scaffolding files like __init__.py.
8.5 Testing#
Regression tests required for every feature
All tests in
<project root>/tests/Tests must be deterministic
Documented in
Tests_README.mdrun_tests.pyscript must exist
8.6 Architecture#
docs/ARCHITECTURE.mdrequiredVersioned
Updated with significant changes
9. Test Suite#
OCT has 1402 tests across its test suites (9 skipped):
Suite |
Directory |
Tests |
Coverage |
|---|---|---|---|
Core |
|
58+ |
Project root detection, exclusions, git primitives, octrc loading, path utilities |
Linter |
|
78+ |
Header validation, func pattern (AST), header fixing, no_hardcoded_secrets (§6b), type hints, config validation, lint –changed, integration, regression |
Formatter |
|
42+ |
Header fixing, docstring fixing, import fixing, func pattern fixing, archive rotation, format –changed, integration |
Health |
|
22+ |
Lint aggregation, docs validation, JSON/terminal output, compat check, integration |
Docs |
|
24+ |
docs –clean, doxygen cleanup, package discovery, Sphinx write safety |
Tools |
|
81 |
Skeleton extraction (AST, headers, signatures, classes, decorators), source exporter, secret scanner (Shannon entropy, per-context thresholds, field-name exclusions, validation) |
Git — Audit |
|
25+ |
Audit record creation, JSONL writing, @audited decorator |
Git — Conventional |
|
35+ |
Conventional Commits parser, validator, error formatting, diagnostics impact |
Git — Commands |
|
118+ |
Status, check, init, commit, hooks — exit codes, safety gates, integration |
Git — Policy |
|
54+ |
Profile resolution, protected branches, scope filtering |
(9 tests skipped: platform-specific or optional-dependency tests.)
All test suites use pytest with shared conftest.py fixtures providing temporary
Option C project directories with the required structure.
10. OCT Project Lifecycle#
oct scaffold myproject
cd myproject
oct git init # .gitignore, .gitattributes, CI workflow
oct git hooks install # Install pre-commit hooks
oct new src/module.py
oct docs
oct lint
oct format --fix
oct health
oct test
oct git commit -m "feat: initial implementation"
oct export-source
oct export-skeleton --no-diagnostics
OCT enforces correctness at every step.
sequenceDiagram
participant Dev as Developer
participant OCT as OCT CLI
participant Project as Option C Project
participant Diag as oc_diagnostics
Dev->>OCT: oct scaffold myproject
OCT->>Project: Create project structure
OCT->>Project: Add oc_diagnostics/debug_config.json
Dev->>OCT: oct git init
OCT->>Project: Create .gitignore, .gitattributes, CI workflow
Dev->>OCT: oct git hooks install
OCT->>Project: Generate .pre-commit-config.yaml
Dev->>OCT: oct new src/module.py
OCT->>Project: Generate Option C file with headers, import & docstring
Dev->>OCT: oct lint
OCT->>Project: Run Option C linter (AST-based)
Dev->>OCT: oct format --fix
OCT->>Project: Auto-fix compliance violations
Dev->>OCT: oct health
OCT->>Project: Aggregate lint, fixable, docs, tests, compat
Dev->>OCT: oct test
OCT->>Project: Run test suite (or discover and run sub-project suites)
Dev->>OCT: oct git commit -m "feat: initial"
OCT->>Project: Quality gate + secrets check + commit
Dev->>OCT: oct export-source
OCT->>Project: Generate source export
Dev->>OCT: oct export-skeleton
OCT->>Project: Generate structural skeletons (headers, signatures, docstrings)
Project->>Diag: Import _dbg, instrumentation, middleware
11. Future Enhancements#
Implemented:
✅
oct new --test— auto-generate companion test file alongside module (FS-203) — v0.8.0✅
oct diag— diagnostics tools: validate-config, list-domains, set-level (FS-204) — v0.8.0✅
oct lint --changed— lint only git-modified files (FS-209) — v0.8.0✅
oct docs --sphinx— full Sphinx documentation pipeline — v0.8.1✅
oct docs --doxygen— Doxygen integration with INPUT path patching✅
oct docs --all— combined Sphinx + Doxygen generation✅
oct docs --clean— remove generated documentation artifacts✅
no_hardcoded_secrets— AST-based secret detection linter rule (§6b)✅
NEVER_EXPORT_FILE_PATTERNS— file-level export exclusion (Layer 2, DD-05)✅
oct export-skeleton— AST-based skeleton export (headers, docstrings, signatures) with--no-diagnostics— v0.9.1✅
oct git status— Git status with OCT compliance annotations — v0.11.0✅
oct git check— Unified quality gate (lint + format + secrets) — v0.11.0✅
oct git init— Repository initialisation with Option C conventions — v0.11.1✅
oct format --changed— Format only git-modified files — v0.11.1✅
oct git commit— Conventional Commits with non-bypassable secrets — v0.12.0✅
oct git hooks— Hook management (install/status/remove) — v0.12.0✅ Pre-commit hook integration (FS-206) — v0.12.0
✅
oct git changelog— Keep a Changelog from Conventional Commits — v0.13.0✅ Branch naming enforcement — advisory/blocking by profile — v0.13.0
✅ Branch-aware auto-profile (
pre_commit_profile: "auto") — v0.13.0✅
oct healthgit section — 7 git health checks — v0.13.0✅
oct export-source --diff REF— export changed files only — v0.13.0✅
oct test --changed— run tests for changed files — v0.13.0✅
.octrc.jsongit schema validation — v0.13.0✅
oct lint --explain <rule>— inline rule documentation with registry (FS-509) — v0.20.0✅ Shannon entropy-based secret detection (FS-507) — v0.21.0
✅ Incremental lint cache + lint baseline (FS-510, FS-508) — v0.22.0
✅ Standalone secret scanner extraction (OI-514) —
oct/tools/secret_scanner.py✅ Per-context entropy thresholds — code ≥ 4.5, docstring > 5.0, comment > 5.0 (reserved)
✅
entropy_exclusionsin.octrc.json— field-name + path-based exclusions (OI-540)✅ Shared inline waiver module —
oct/core/waivers.py(OI-540)✅ Quality gate honours inline waivers universally (OI-540)
Planned:
Per-line waiver matching — waivers matched to specific finding line numbers instead of file-level suppression
Defence-in-depth censorship module for exports/docs (
--unsafeopt-out) — DD-05 Layer 3Linter plugin system for custom rules (FS-205)
oct depsenhancements (FS-208)
Deferred:
Export diff mode (FS-207)
Debug session recorder
12. Appendix: Example OCT-Generated File#
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# myproject/src/example.py
"""
Example Module
Purpose
-------
Demonstrate Option C file structure.
Responsibilities
----------------
- Provide example function
- Demonstrate diagnostics usage
Diagnostics
-----------
Domain: EXAMPLE
Levels:
L2 -- lifecycle
L3 -- semantic details
L4 -- deep tracing
Contracts
---------
- Must not mutate inputs
"""
from oc_diagnostics import _dbg
def example(x):
func = "example"
_dbg("EXAMPLE", func, f"START x={x}", 2)
return x * 2