@ahmed-g-gad/apothem 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +60 -0
- package/LICENSE +21 -0
- package/LICENSES/MIT.txt +18 -0
- package/LICENSES/PSF-2.0.txt +47 -0
- package/README.md +549 -0
- package/bin/README.md +37 -0
- package/bin/apothem.mjs +78 -0
- package/package.json +75 -0
- package/pyproject.toml +347 -0
- package/src/apothem/README.md +52 -0
- package/src/apothem/__init__.py +66 -0
- package/src/apothem/__main__.py +28 -0
- package/src/apothem/_vendor/.keep +0 -0
- package/src/apothem/_vendor/__init__.py +25 -0
- package/src/apothem/_vendor/attr/__init__.py +104 -0
- package/src/apothem/_vendor/attr/__init__.pyi +389 -0
- package/src/apothem/_vendor/attr/_cmp.py +160 -0
- package/src/apothem/_vendor/attr/_cmp.pyi +13 -0
- package/src/apothem/_vendor/attr/_compat.py +99 -0
- package/src/apothem/_vendor/attr/_config.py +31 -0
- package/src/apothem/_vendor/attr/_funcs.py +497 -0
- package/src/apothem/_vendor/attr/_make.py +3406 -0
- package/src/apothem/_vendor/attr/_next_gen.py +674 -0
- package/src/apothem/_vendor/attr/_typing_compat.pyi +15 -0
- package/src/apothem/_vendor/attr/_version_info.py +89 -0
- package/src/apothem/_vendor/attr/_version_info.pyi +9 -0
- package/src/apothem/_vendor/attr/converters.py +162 -0
- package/src/apothem/_vendor/attr/converters.pyi +19 -0
- package/src/apothem/_vendor/attr/exceptions.py +95 -0
- package/src/apothem/_vendor/attr/exceptions.pyi +17 -0
- package/src/apothem/_vendor/attr/filters.py +72 -0
- package/src/apothem/_vendor/attr/filters.pyi +6 -0
- package/src/apothem/_vendor/attr/py.typed +0 -0
- package/src/apothem/_vendor/attr/setters.py +79 -0
- package/src/apothem/_vendor/attr/setters.pyi +20 -0
- package/src/apothem/_vendor/attr/validators.py +750 -0
- package/src/apothem/_vendor/attr/validators.pyi +140 -0
- package/src/apothem/_vendor/attr.LICENSE +21 -0
- package/src/apothem/_vendor/attrs/__init__.py +72 -0
- package/src/apothem/_vendor/attrs/__init__.pyi +314 -0
- package/src/apothem/_vendor/attrs/converters.py +3 -0
- package/src/apothem/_vendor/attrs/exceptions.py +3 -0
- package/src/apothem/_vendor/attrs/filters.py +3 -0
- package/src/apothem/_vendor/attrs/py.typed +0 -0
- package/src/apothem/_vendor/attrs/setters.py +3 -0
- package/src/apothem/_vendor/attrs/validators.py +3 -0
- package/src/apothem/_vendor/attrs.LICENSE +21 -0
- package/src/apothem/_vendor/jsonschema/__init__.py +120 -0
- package/src/apothem/_vendor/jsonschema/__main__.py +6 -0
- package/src/apothem/_vendor/jsonschema/_format.py +546 -0
- package/src/apothem/_vendor/jsonschema/_keywords.py +449 -0
- package/src/apothem/_vendor/jsonschema/_legacy_keywords.py +449 -0
- package/src/apothem/_vendor/jsonschema/_types.py +204 -0
- package/src/apothem/_vendor/jsonschema/_typing.py +29 -0
- package/src/apothem/_vendor/jsonschema/_utils.py +355 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/__init__.py +5 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/const_vs_enum.py +30 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/contains.py +28 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/import_benchmark.py +31 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/issue232/issue.json +2653 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/issue232.py +25 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/json_schema_test_suite.py +12 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/nested_schemas.py +56 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/subcomponents.py +42 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/unused_registry.py +35 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/useless_applicator_schemas.py +106 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/useless_keywords.py +32 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/validator_creation.py +14 -0
- package/src/apothem/_vendor/jsonschema/cli.py +292 -0
- package/src/apothem/_vendor/jsonschema/exceptions.py +490 -0
- package/src/apothem/_vendor/jsonschema/protocols.py +230 -0
- package/src/apothem/_vendor/jsonschema/validators.py +1410 -0
- package/src/apothem/_vendor/jsonschema.LICENSE +19 -0
- package/src/apothem/_vendor/jsonschema_specifications/__init__.py +12 -0
- package/src/apothem/_vendor/jsonschema_specifications/_core.py +38 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/metaschema.json +42 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/applicator +56 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/content +17 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/core +57 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/format +14 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/meta-data +37 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/validation +98 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/metaschema.json +58 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/applicator +48 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/content +17 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/core +51 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/format-annotation +14 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/format-assertion +14 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/meta-data +37 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/unevaluated +15 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/validation +98 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft3/metaschema.json +172 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft4/metaschema.json +149 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft6/metaschema.json +153 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft7/metaschema.json +166 -0
- package/src/apothem/_vendor/jsonschema_specifications.LICENSE +19 -0
- package/src/apothem/_vendor/referencing/__init__.py +7 -0
- package/src/apothem/_vendor/referencing/_attrs.py +31 -0
- package/src/apothem/_vendor/referencing/_attrs.pyi +21 -0
- package/src/apothem/_vendor/referencing/_core.py +739 -0
- package/src/apothem/_vendor/referencing/exceptions.py +165 -0
- package/src/apothem/_vendor/referencing/jsonschema.py +642 -0
- package/src/apothem/_vendor/referencing/py.typed +0 -0
- package/src/apothem/_vendor/referencing/retrieval.py +94 -0
- package/src/apothem/_vendor/referencing/typing.py +61 -0
- package/src/apothem/_vendor/referencing.LICENSE +19 -0
- package/src/apothem/_vendor/rpds/__init__.py +251 -0
- package/src/apothem/_vendor/typing_extensions.LICENSE +279 -0
- package/src/apothem/_vendor/typing_extensions.py +4317 -0
- package/src/apothem/_vendor/vendor.txt +22 -0
- package/src/apothem/_vendor/yaml/__init__.py +389 -0
- package/src/apothem/_vendor/yaml/composer.py +138 -0
- package/src/apothem/_vendor/yaml/constructor.py +748 -0
- package/src/apothem/_vendor/yaml/cyaml.py +100 -0
- package/src/apothem/_vendor/yaml/dumper.py +61 -0
- package/src/apothem/_vendor/yaml/emitter.py +1137 -0
- package/src/apothem/_vendor/yaml/error.py +74 -0
- package/src/apothem/_vendor/yaml/events.py +85 -0
- package/src/apothem/_vendor/yaml/loader.py +63 -0
- package/src/apothem/_vendor/yaml/nodes.py +48 -0
- package/src/apothem/_vendor/yaml/parser.py +588 -0
- package/src/apothem/_vendor/yaml/reader.py +185 -0
- package/src/apothem/_vendor/yaml/representer.py +388 -0
- package/src/apothem/_vendor/yaml/resolver.py +226 -0
- package/src/apothem/_vendor/yaml/scanner.py +1435 -0
- package/src/apothem/_vendor/yaml/serializer.py +110 -0
- package/src/apothem/_vendor/yaml/tokens.py +103 -0
- package/src/apothem/_vendor/yaml.LICENSE +20 -0
- package/src/apothem/agents/README.md +60 -0
- package/src/apothem/agents/codebase-explorer.md +91 -0
- package/src/apothem/agents/convention-auditor.md +93 -0
- package/src/apothem/agents/dependency-auditor.md +97 -0
- package/src/apothem/agents/fact-checker.md +84 -0
- package/src/apothem/agents/mcp-builder.md +86 -0
- package/src/apothem/agents/memory-auditor.md +93 -0
- package/src/apothem/agents/prompt-evaluator.md +87 -0
- package/src/apothem/agents/quality-gate.md +103 -0
- package/src/apothem/agents/refactor-surgeon.md +74 -0
- package/src/apothem/agents/research-scout.md +73 -0
- package/src/apothem/agents/security-scanner.md +83 -0
- package/src/apothem/agents/test-runner.md +84 -0
- package/src/apothem/audit/README.md +73 -0
- package/src/apothem/audit/_scan_lib.py +182 -0
- package/src/apothem/audit/analyze_graph.py +260 -0
- package/src/apothem/audit/build_capability_graph.py +607 -0
- package/src/apothem/audit/build_inventory.py +657 -0
- package/src/apothem/audit/build_plans_provenance.py +997 -0
- package/src/apothem/audit/check_links.py +389 -0
- package/src/apothem/audit/classify_artifacts.py +381 -0
- package/src/apothem/audit/deprecated-tokens.txt +10 -0
- package/src/apothem/audit/execute_plans_migration.py +491 -0
- package/src/apothem/audit/known-projects.txt +15 -0
- package/src/apothem/audit/render_capability_index.py +467 -0
- package/src/apothem/audit/render_inventory.py +405 -0
- package/src/apothem/audit/scan_ai_surfaces.py +1125 -0
- package/src/apothem/audit/scan_ai_surfaces_coarse.py +261 -0
- package/src/apothem/audit/scan_drift_features.py +143 -0
- package/src/apothem/audit/scan_frontmatter.py +293 -0
- package/src/apothem/audit/scan_header_coverage.py +1134 -0
- package/src/apothem/audit/scan_plan_leakage.py +540 -0
- package/src/apothem/audit/scan_plans_discipline.py +188 -0
- package/src/apothem/audit/scan_secrets_pii.py +245 -0
- package/src/apothem/audit/scan_stale_tokens.py +296 -0
- package/src/apothem/audit/synthesize_drift.py +205 -0
- package/src/apothem/benchmarks/README.md +33 -0
- package/src/apothem/benchmarks/__init__.py +3 -0
- package/src/apothem/benchmarks/bench_agents.py +63 -0
- package/src/apothem/benchmarks/bench_hooks.py +93 -0
- package/src/apothem/benchmarks/bench_install.py +58 -0
- package/src/apothem/benchmarks/bench_tests.py +93 -0
- package/src/apothem/benchmarks/bench_validate_ecosystem.py +84 -0
- package/src/apothem/cli/README.md +33 -0
- package/src/apothem/cli/__init__.py +229 -0
- package/src/apothem/cli/_cmd_completion.py +88 -0
- package/src/apothem/cli/_cmd_diff.py +181 -0
- package/src/apothem/cli/_cmd_doctor.py +143 -0
- package/src/apothem/cli/_cmd_harnesses.py +167 -0
- package/src/apothem/cli/_cmd_install.py +327 -0
- package/src/apothem/cli/_cmd_migrate_workspace.py +143 -0
- package/src/apothem/cli/_cmd_profile.py +341 -0
- package/src/apothem/cli/_cmd_status.py +180 -0
- package/src/apothem/cli/_cmd_uninstall.py +215 -0
- package/src/apothem/cli/_cmd_update.py +397 -0
- package/src/apothem/cli/_cmd_verify.py +194 -0
- package/src/apothem/cli/_common_flags.py +90 -0
- package/src/apothem/cli/_epilogs.py +296 -0
- package/src/apothem/cli/_helpers.py +857 -0
- package/src/apothem/cli/_json_formatter.py +21 -0
- package/src/apothem/cli/_materialize.py +376 -0
- package/src/apothem/cli/completions/apothem.bash +30 -0
- package/src/apothem/cli/completions/apothem.fish +19 -0
- package/src/apothem/cli/completions/apothem.ps1 +27 -0
- package/src/apothem/cli/completions/apothem.zsh +42 -0
- package/src/apothem/cli/reference_export.py +126 -0
- package/src/apothem/commands/README.md +125 -0
- package/src/apothem/commands/a11y-audit.md +203 -0
- package/src/apothem/commands/architecture-review.md +194 -0
- package/src/apothem/commands/audit.md +165 -0
- package/src/apothem/commands/code-audit.md +218 -0
- package/src/apothem/commands/code-review.md +193 -0
- package/src/apothem/commands/dependency-audit.md +209 -0
- package/src/apothem/commands/docs-review.md +199 -0
- package/src/apothem/commands/elevate.md +285 -0
- package/src/apothem/commands/eval.md +149 -0
- package/src/apothem/commands/fortress.md +172 -0
- package/src/apothem/commands/freshify.md +168 -0
- package/src/apothem/commands/github-deploy-fresh.md +178 -0
- package/src/apothem/commands/github-deploy-next.md +167 -0
- package/src/apothem/commands/perf-audit.md +198 -0
- package/src/apothem/commands/plan-amend.md +104 -0
- package/src/apothem/commands/plan-audit.md +127 -0
- package/src/apothem/commands/plan-design.md +257 -0
- package/src/apothem/commands/plan-execute.md +495 -0
- package/src/apothem/commands/plan-generate.md +351 -0
- package/src/apothem/commands/plan-review.md +555 -0
- package/src/apothem/commands/plan-spec.md +359 -0
- package/src/apothem/commands/plan-status.md +222 -0
- package/src/apothem/commands/plan.md +173 -0
- package/src/apothem/commands/projectify.md +142 -0
- package/src/apothem/commands/release-readiness.md +142 -0
- package/src/apothem/commands/research-analysis.md +241 -0
- package/src/apothem/commands/research-design.md +231 -0
- package/src/apothem/commands/research-disseminate.md +225 -0
- package/src/apothem/commands/research-experiment.md +232 -0
- package/src/apothem/commands/research-ideate.md +213 -0
- package/src/apothem/commands/research-paper.md +252 -0
- package/src/apothem/commands/research-proposal.md +220 -0
- package/src/apothem/commands/research-publish.md +255 -0
- package/src/apothem/commands/research-review.md +251 -0
- package/src/apothem/commands/research-sources.md +266 -0
- package/src/apothem/commands/research-spec.md +255 -0
- package/src/apothem/commands/research-synthesis.md +233 -0
- package/src/apothem/commands/research-theory.md +218 -0
- package/src/apothem/commands/research.md +181 -0
- package/src/apothem/commands/security-audit.md +196 -0
- package/src/apothem/commands/supply-chain-audit.md +192 -0
- package/src/apothem/commands/test-suite.md +146 -0
- package/src/apothem/commands/threat-model-audit.md +199 -0
- package/src/apothem/commands/ux-review.md +202 -0
- package/src/apothem/commands/workflow.md +162 -0
- package/src/apothem/conformity/README.md +173 -0
- package/src/apothem/conformity/__init__.py +1 -0
- package/src/apothem/conformity/_grep_base.py +93 -0
- package/src/apothem/conformity/agent_capability_grep.py +306 -0
- package/src/apothem/conformity/agents_md_coverage_grep.py +382 -0
- package/src/apothem/conformity/agnosticism_grep.py +311 -0
- package/src/apothem/conformity/always_on_budget_grep.py +318 -0
- package/src/apothem/conformity/bare_except_grep.py +115 -0
- package/src/apothem/conformity/binding_reciprocity_grep.py +151 -0
- package/src/apothem/conformity/brand_mark_grep.py +272 -0
- package/src/apothem/conformity/commented_out_code_grep.py +176 -0
- package/src/apothem/conformity/completion_claim_grep.py +169 -0
- package/src/apothem/conformity/conventional_commit_grep.py +319 -0
- package/src/apothem/conformity/copilot_instructions_presence_grep.py +324 -0
- package/src/apothem/conformity/cross_platform_matrix_grep.py +297 -0
- package/src/apothem/conformity/determinism_grep.py +306 -0
- package/src/apothem/conformity/diagram_staleness_grep.py +154 -0
- package/src/apothem/conformity/dynamism_grep.py +284 -0
- package/src/apothem/conformity/editorconfig_presence_grep.py +281 -0
- package/src/apothem/conformity/file_header_grep.py +502 -0
- package/src/apothem/conformity/freshness_token_grep.py +233 -0
- package/src/apothem/conformity/frontmatter_grep.py +274 -0
- package/src/apothem/conformity/frontmatter_value_grep.py +386 -0
- package/src/apothem/conformity/gate.py +1386 -0
- package/src/apothem/conformity/gitattributes_presence_grep.py +238 -0
- package/src/apothem/conformity/harden_runner_grep.py +320 -0
- package/src/apothem/conformity/hedging_grep.py +129 -0
- package/src/apothem/conformity/license_author_consistency_grep.py +204 -0
- package/src/apothem/conformity/link_check.py +327 -0
- package/src/apothem/conformity/magic_number_grep.py +182 -0
- package/src/apothem/conformity/multi_surface_coherence_grep.py +620 -0
- package/src/apothem/conformity/naming_grep.py +224 -0
- package/src/apothem/conformity/no_global_plans_grep.py +339 -0
- package/src/apothem/conformity/no_toplevel_docs_grep.py +120 -0
- package/src/apothem/conformity/oidc_trusted_publishing_grep.py +291 -0
- package/src/apothem/conformity/option_annotation_grep.py +352 -0
- package/src/apothem/conformity/orphan_output_grep.py +206 -0
- package/src/apothem/conformity/permissions_minimum_scope_grep.py +299 -0
- package/src/apothem/conformity/plain_language_grep.py +559 -0
- package/src/apothem/conformity/plan_next_step_consistency_grep.py +450 -0
- package/src/apothem/conformity/plan_suite_structure_grep.py +534 -0
- package/src/apothem/conformity/plans_discipline_language_grep.py +245 -0
- package/src/apothem/conformity/production_ready_pr_grep.py +200 -0
- package/src/apothem/conformity/recommend_next_step_grep.py +250 -0
- package/src/apothem/conformity/redundancy_grep.py +401 -0
- package/src/apothem/conformity/reference_token_grep.py +230 -0
- package/src/apothem/conformity/registry_capability_consistency_grep.py +368 -0
- package/src/apothem/conformity/secret_leak_grep.py +193 -0
- package/src/apothem/conformity/semver_stability_grep.py +358 -0
- package/src/apothem/conformity/smoke_install_grep.py +194 -0
- package/src/apothem/conformity/static_version_grep.py +284 -0
- package/src/apothem/conformity/token_efficiency_grep.py +185 -0
- package/src/apothem/conformity/unpinned_action_grep.py +115 -0
- package/src/apothem/conformity/user_confirm_grep.py +74 -0
- package/src/apothem/conformity/workflow_concurrency_grep.py +283 -0
- package/src/apothem/harnesses/README.md +63 -0
- package/src/apothem/harnesses/__init__.py +16 -0
- package/src/apothem/harnesses/_shared/README.md +36 -0
- package/src/apothem/harnesses/_shared/__init__.py +12 -0
- package/src/apothem/harnesses/_shared/install_driver.py +281 -0
- package/src/apothem/harnesses/_shared/install_driver_apply.py +612 -0
- package/src/apothem/harnesses/_shared/install_driver_backup.py +535 -0
- package/src/apothem/harnesses/_shared/install_driver_converters.py +310 -0
- package/src/apothem/harnesses/_shared/install_driver_lifecycle.py +495 -0
- package/src/apothem/harnesses/_shared/install_driver_materialize.py +675 -0
- package/src/apothem/harnesses/_shared/install_driver_merge.py +656 -0
- package/src/apothem/harnesses/_shared/install_driver_pathsafety.py +137 -0
- package/src/apothem/harnesses/_shared/install_driver_planvalidation.py +240 -0
- package/src/apothem/harnesses/_shared/install_driver_removal.py +366 -0
- package/src/apothem/harnesses/_shared/install_driver_treeops.py +248 -0
- package/src/apothem/harnesses/_shared/install_driver_types.py +330 -0
- package/src/apothem/harnesses/_shared/wrapper_factories.py +448 -0
- package/src/apothem/harnesses/antigravity/STANDARD-CONVENTION-PIN.md +91 -0
- package/src/apothem/harnesses/antigravity/__init__.py +70 -0
- package/src/apothem/harnesses/antigravity/capabilities.yml +40 -0
- package/src/apothem/harnesses/antigravity/install.py +63 -0
- package/src/apothem/harnesses/antigravity/templates/GEMINI.md +40 -0
- package/src/apothem/harnesses/antigravity/templates/plugin.json +5 -0
- package/src/apothem/harnesses/antigravity/uninstall.py +22 -0
- package/src/apothem/harnesses/antigravity/update.py +10 -0
- package/src/apothem/harnesses/antigravity/verify.py +11 -0
- package/src/apothem/harnesses/claude_code/STANDARD-CONVENTION-PIN.md +65 -0
- package/src/apothem/harnesses/claude_code/__init__.py +107 -0
- package/src/apothem/harnesses/claude_code/capabilities.yml +42 -0
- package/src/apothem/harnesses/claude_code/install.py +147 -0
- package/src/apothem/harnesses/claude_code/templates/settings.json +351 -0
- package/src/apothem/harnesses/claude_code/uninstall.py +23 -0
- package/src/apothem/harnesses/claude_code/update.py +10 -0
- package/src/apothem/harnesses/claude_code/verify.py +11 -0
- package/src/apothem/harnesses/codebuddy/STANDARD-CONVENTION-PIN.md +74 -0
- package/src/apothem/harnesses/codebuddy/__init__.py +49 -0
- package/src/apothem/harnesses/codebuddy/capabilities.yml +34 -0
- package/src/apothem/harnesses/codebuddy/install.py +40 -0
- package/src/apothem/harnesses/codebuddy/templates/apothem-rules.md +37 -0
- package/src/apothem/harnesses/codebuddy/uninstall.py +25 -0
- package/src/apothem/harnesses/codebuddy/update.py +10 -0
- package/src/apothem/harnesses/codebuddy/verify.py +11 -0
- package/src/apothem/harnesses/codex/STANDARD-CONVENTION-PIN.md +79 -0
- package/src/apothem/harnesses/codex/__init__.py +72 -0
- package/src/apothem/harnesses/codex/capabilities.yml +40 -0
- package/src/apothem/harnesses/codex/install.py +69 -0
- package/src/apothem/harnesses/codex/templates/AGENTS.md +40 -0
- package/src/apothem/harnesses/codex/templates/hooks.json +127 -0
- package/src/apothem/harnesses/codex/uninstall.py +23 -0
- package/src/apothem/harnesses/codex/update.py +10 -0
- package/src/apothem/harnesses/codex/verify.py +11 -0
- package/src/apothem/harnesses/cursor/STANDARD-CONVENTION-PIN.md +79 -0
- package/src/apothem/harnesses/cursor/__init__.py +48 -0
- package/src/apothem/harnesses/cursor/capabilities.yml +42 -0
- package/src/apothem/harnesses/cursor/install.py +38 -0
- package/src/apothem/harnesses/cursor/templates/apothem-rules.mdc +40 -0
- package/src/apothem/harnesses/cursor/uninstall.py +25 -0
- package/src/apothem/harnesses/cursor/update.py +10 -0
- package/src/apothem/harnesses/cursor/verify.py +11 -0
- package/src/apothem/harnesses/gemini_cli/STANDARD-CONVENTION-PIN.md +102 -0
- package/src/apothem/harnesses/gemini_cli/__init__.py +52 -0
- package/src/apothem/harnesses/gemini_cli/capabilities.yml +43 -0
- package/src/apothem/harnesses/gemini_cli/install.py +43 -0
- package/src/apothem/harnesses/gemini_cli/templates/GEMINI.md +38 -0
- package/src/apothem/harnesses/gemini_cli/uninstall.py +25 -0
- package/src/apothem/harnesses/gemini_cli/update.py +10 -0
- package/src/apothem/harnesses/gemini_cli/verify.py +11 -0
- package/src/apothem/harnesses/github_copilot/STANDARD-CONVENTION-PIN.md +84 -0
- package/src/apothem/harnesses/github_copilot/__init__.py +47 -0
- package/src/apothem/harnesses/github_copilot/capabilities.yml +42 -0
- package/src/apothem/harnesses/github_copilot/install.py +40 -0
- package/src/apothem/harnesses/github_copilot/templates/copilot-instructions.md +33 -0
- package/src/apothem/harnesses/github_copilot/uninstall.py +25 -0
- package/src/apothem/harnesses/github_copilot/update.py +10 -0
- package/src/apothem/harnesses/github_copilot/verify.py +11 -0
- package/src/apothem/harnesses/glm/STANDARD-CONVENTION-PIN.md +77 -0
- package/src/apothem/harnesses/glm/__init__.py +56 -0
- package/src/apothem/harnesses/glm/capabilities.yml +33 -0
- package/src/apothem/harnesses/glm/install.py +45 -0
- package/src/apothem/harnesses/glm/templates/glm.toml +58 -0
- package/src/apothem/harnesses/glm/uninstall.py +25 -0
- package/src/apothem/harnesses/glm/update.py +10 -0
- package/src/apothem/harnesses/glm/verify.py +11 -0
- package/src/apothem/harnesses/hermes/STANDARD-CONVENTION-PIN.md +57 -0
- package/src/apothem/harnesses/hermes/__init__.py +33 -0
- package/src/apothem/harnesses/hermes/capabilities.yml +36 -0
- package/src/apothem/harnesses/hermes/install.py +17 -0
- package/src/apothem/harnesses/hermes/materializer.py +35 -0
- package/src/apothem/harnesses/hermes/uninstall.py +33 -0
- package/src/apothem/harnesses/hermes/update.py +10 -0
- package/src/apothem/harnesses/hermes/verify.py +11 -0
- package/src/apothem/harnesses/kimi_code/STANDARD-CONVENTION-PIN.md +128 -0
- package/src/apothem/harnesses/kimi_code/__init__.py +59 -0
- package/src/apothem/harnesses/kimi_code/capabilities.yml +40 -0
- package/src/apothem/harnesses/kimi_code/install.py +42 -0
- package/src/apothem/harnesses/kimi_code/templates/AGENTS.md +43 -0
- package/src/apothem/harnesses/kimi_code/uninstall.py +27 -0
- package/src/apothem/harnesses/kimi_code/update.py +10 -0
- package/src/apothem/harnesses/kimi_code/verify.py +11 -0
- package/src/apothem/harnesses/kiro/STANDARD-CONVENTION-PIN.md +77 -0
- package/src/apothem/harnesses/kiro/__init__.py +49 -0
- package/src/apothem/harnesses/kiro/capabilities.yml +36 -0
- package/src/apothem/harnesses/kiro/install.py +39 -0
- package/src/apothem/harnesses/kiro/templates/apothem-rules.md +36 -0
- package/src/apothem/harnesses/kiro/uninstall.py +25 -0
- package/src/apothem/harnesses/kiro/update.py +10 -0
- package/src/apothem/harnesses/kiro/verify.py +11 -0
- package/src/apothem/harnesses/open_claw/STANDARD-CONVENTION-PIN.md +62 -0
- package/src/apothem/harnesses/open_claw/__init__.py +35 -0
- package/src/apothem/harnesses/open_claw/capabilities.yml +35 -0
- package/src/apothem/harnesses/open_claw/install.py +17 -0
- package/src/apothem/harnesses/open_claw/materializer.py +36 -0
- package/src/apothem/harnesses/open_claw/uninstall.py +32 -0
- package/src/apothem/harnesses/open_claw/update.py +10 -0
- package/src/apothem/harnesses/open_claw/verify.py +11 -0
- package/src/apothem/harnesses/opencode/STANDARD-CONVENTION-PIN.md +76 -0
- package/src/apothem/harnesses/opencode/__init__.py +35 -0
- package/src/apothem/harnesses/opencode/capabilities.yml +43 -0
- package/src/apothem/harnesses/opencode/install.py +17 -0
- package/src/apothem/harnesses/opencode/materializer.py +31 -0
- package/src/apothem/harnesses/opencode/uninstall.py +34 -0
- package/src/apothem/harnesses/opencode/update.py +10 -0
- package/src/apothem/harnesses/opencode/verify.py +11 -0
- package/src/apothem/harnesses/qwen_code/STANDARD-CONVENTION-PIN.md +87 -0
- package/src/apothem/harnesses/qwen_code/__init__.py +37 -0
- package/src/apothem/harnesses/qwen_code/capabilities.yml +43 -0
- package/src/apothem/harnesses/qwen_code/install.py +19 -0
- package/src/apothem/harnesses/qwen_code/materializer.py +174 -0
- package/src/apothem/harnesses/qwen_code/templates/QWEN.md +30 -0
- package/src/apothem/harnesses/qwen_code/uninstall.py +34 -0
- package/src/apothem/harnesses/qwen_code/update.py +10 -0
- package/src/apothem/harnesses/qwen_code/verify.py +11 -0
- package/src/apothem/harnesses/trae/STANDARD-CONVENTION-PIN.md +70 -0
- package/src/apothem/harnesses/trae/__init__.py +49 -0
- package/src/apothem/harnesses/trae/capabilities.yml +34 -0
- package/src/apothem/harnesses/trae/install.py +38 -0
- package/src/apothem/harnesses/trae/templates/apothem-rules.md +37 -0
- package/src/apothem/harnesses/trae/uninstall.py +25 -0
- package/src/apothem/harnesses/trae/update.py +10 -0
- package/src/apothem/harnesses/trae/verify.py +11 -0
- package/src/apothem/harnesses/windsurf/STANDARD-CONVENTION-PIN.md +91 -0
- package/src/apothem/harnesses/windsurf/__init__.py +52 -0
- package/src/apothem/harnesses/windsurf/capabilities.yml +40 -0
- package/src/apothem/harnesses/windsurf/install.py +41 -0
- package/src/apothem/harnesses/windsurf/templates/apothem-rules.md +37 -0
- package/src/apothem/harnesses/windsurf/uninstall.py +25 -0
- package/src/apothem/harnesses/windsurf/update.py +10 -0
- package/src/apothem/harnesses/windsurf/verify.py +11 -0
- package/src/apothem/harnesses/zed/STANDARD-CONVENTION-PIN.md +92 -0
- package/src/apothem/harnesses/zed/__init__.py +57 -0
- package/src/apothem/harnesses/zed/capabilities.yml +38 -0
- package/src/apothem/harnesses/zed/install.py +41 -0
- package/src/apothem/harnesses/zed/templates/apothem-rules.md +32 -0
- package/src/apothem/harnesses/zed/uninstall.py +28 -0
- package/src/apothem/harnesses/zed/update.py +10 -0
- package/src/apothem/harnesses/zed/verify.py +11 -0
- package/src/apothem/hooks/README.md +81 -0
- package/src/apothem/hooks/__init__.py +24 -0
- package/src/apothem/hooks/askuserquestion_validator.py +380 -0
- package/src/apothem/hooks/dispatch.py +296 -0
- package/src/apothem/hooks/emit_hook_context.py +444 -0
- package/src/apothem/hooks/hooks.json +318 -0
- package/src/apothem/hooks/lib/README.md +39 -0
- package/src/apothem/hooks/lib/__init__.py +18 -0
- package/src/apothem/hooks/lib/bootstrap.ps1 +129 -0
- package/src/apothem/hooks/lib/bootstrap.sh +103 -0
- package/src/apothem/hooks/lib/events.py +51 -0
- package/src/apothem/hooks/lib/find-pwsh.ps1 +78 -0
- package/src/apothem/hooks/lib/find-pwsh.sh +76 -0
- package/src/apothem/hooks/lib/find-python.ps1 +63 -0
- package/src/apothem/hooks/lib/find-python.sh +97 -0
- package/src/apothem/hooks/lib/log.py +43 -0
- package/src/apothem/hooks/lib/resolve_root.py +264 -0
- package/src/apothem/hooks/messages/postcompact.md +14 -0
- package/src/apothem/hooks/messages/posttooluse-proactive-compaction.md +46 -0
- package/src/apothem/hooks/messages/precompact.md +14 -0
- package/src/apothem/hooks/messages/pretooluse-askuserquestion-recommended.md +65 -0
- package/src/apothem/hooks/messages/pretooluse-bash-plan-guard.md +97 -0
- package/src/apothem/hooks/messages/pretooluse-bash.md +39 -0
- package/src/apothem/hooks/messages/pretooluse-conformity.md +70 -0
- package/src/apothem/hooks/messages/pretooluse-dependency-guard.md +21 -0
- package/src/apothem/hooks/messages/pretooluse-edit-header-guard.md +61 -0
- package/src/apothem/hooks/messages/pretooluse-edit.md +21 -0
- package/src/apothem/hooks/messages/pretooluse-eval-guard.md +39 -0
- package/src/apothem/hooks/messages/pretooluse-notebookedit.md +11 -0
- package/src/apothem/hooks/messages/pretooluse-write-header-guard.md +45 -0
- package/src/apothem/hooks/messages/pretooluse-write-plan-guard.md +72 -0
- package/src/apothem/hooks/messages/pretooluse-write.md +21 -0
- package/src/apothem/hooks/messages/sessionstart.md +15 -0
- package/src/apothem/hooks/messages/stop.md +27 -0
- package/src/apothem/hooks/proactive_compaction_tracker.py +327 -0
- package/src/apothem/hooks/session_start_bootstrap.py +472 -0
- package/src/apothem/lib/README.md +42 -0
- package/src/apothem/lib/__init__.py +13 -0
- package/src/apothem/lib/atomic_io.py +189 -0
- package/src/apothem/lib/auditor.py +687 -0
- package/src/apothem/lib/clean_slate.py +396 -0
- package/src/apothem/lib/contexts.py +352 -0
- package/src/apothem/lib/data_home.py +255 -0
- package/src/apothem/lib/frontmatter.py +101 -0
- package/src/apothem/lib/harness_materializer.py +213 -0
- package/src/apothem/lib/harness_protocol.py +59 -0
- package/src/apothem/lib/harness_registry.py +282 -0
- package/src/apothem/lib/harness_registry_data.py +843 -0
- package/src/apothem/lib/install_ledger.py +347 -0
- package/src/apothem/lib/learning.py +540 -0
- package/src/apothem/lib/memory.py +347 -0
- package/src/apothem/lib/parallel_sweep.py +234 -0
- package/src/apothem/lib/plan_tiers.py +200 -0
- package/src/apothem/lib/plugin_bootstrap.py +132 -0
- package/src/apothem/lib/plugin_tree.py +599 -0
- package/src/apothem/lib/profile.py +755 -0
- package/src/apothem/lib/profile_projection.py +198 -0
- package/src/apothem/lib/propagation-manifest.yaml +878 -0
- package/src/apothem/lib/propagation.py +220 -0
- package/src/apothem/lib/python_resolver.py +189 -0
- package/src/apothem/lib/reporter.py +62 -0
- package/src/apothem/lib/workspace_migration.py +323 -0
- package/src/apothem/output-styles/README.md +41 -0
- package/src/apothem/output-styles/concise-engineer.md +49 -0
- package/src/apothem/output-styles/default-architect.md +52 -0
- package/src/apothem/output-styles/default.md +113 -0
- package/src/apothem/output-styles/forensic-auditor.md +63 -0
- package/src/apothem/py.typed +0 -0
- package/src/apothem/rules/README.md +121 -0
- package/src/apothem/rules/agent-capability-discipline-matrix.md +89 -0
- package/src/apothem/rules/agent-capability-discipline.md +78 -0
- package/src/apothem/rules/agent-orchestration-patterns.md +144 -0
- package/src/apothem/rules/agent-orchestration.md +65 -0
- package/src/apothem/rules/agents-md-convention.md +86 -0
- package/src/apothem/rules/agile-sprints-elements.md +135 -0
- package/src/apothem/rules/agile-sprints.md +64 -0
- package/src/apothem/rules/agnostic-posture-checklist.md +47 -0
- package/src/apothem/rules/agnostic-posture.md +48 -0
- package/src/apothem/rules/authoritative-referencing-quotation.md +50 -0
- package/src/apothem/rules/authoritative-referencing.md +66 -0
- package/src/apothem/rules/authority-inquiry-categories.md +58 -0
- package/src/apothem/rules/authority-inquiry.md +54 -0
- package/src/apothem/rules/auto-memory-topic-files.md +86 -0
- package/src/apothem/rules/auto-memory.md +67 -0
- package/src/apothem/rules/bidirectional-binding.md +123 -0
- package/src/apothem/rules/canonical-layout-reporting-tiers.md +212 -0
- package/src/apothem/rules/canonical-layout.md +60 -0
- package/src/apothem/rules/clean-architecture-layers.md +186 -0
- package/src/apothem/rules/clean-room-generation-protocols.md +124 -0
- package/src/apothem/rules/clean-room-generation.md +59 -0
- package/src/apothem/rules/code-craft-conventions.md +101 -0
- package/src/apothem/rules/code-craft-markdown.md +138 -0
- package/src/apothem/rules/code-craft-python.md +154 -0
- package/src/apothem/rules/code-craft-shell.md +192 -0
- package/src/apothem/rules/cognitive-identity-techniques.md +180 -0
- package/src/apothem/rules/cognitive-identity.md +81 -0
- package/src/apothem/rules/context-management-budget.md +46 -0
- package/src/apothem/rules/context-management-protocol.md +161 -0
- package/src/apothem/rules/context-management-scratch.md +128 -0
- package/src/apothem/rules/context-management.md +85 -0
- package/src/apothem/rules/definitiveness-virtues.md +67 -0
- package/src/apothem/rules/definitiveness.md +58 -0
- package/src/apothem/rules/determinism.md +81 -0
- package/src/apothem/rules/disclosure-ledger-markers.md +58 -0
- package/src/apothem/rules/disclosure-ledger.md +52 -0
- package/src/apothem/rules/dynamism.md +38 -0
- package/src/apothem/rules/etc-extension.md +57 -0
- package/src/apothem/rules/expertise-posture-elements.md +68 -0
- package/src/apothem/rules/expertise-posture.md +54 -0
- package/src/apothem/rules/freshness-facade.md +64 -0
- package/src/apothem/rules/harness-adapter-shape-schemas.md +162 -0
- package/src/apothem/rules/harness-adapter-shape.md +42 -0
- package/src/apothem/rules/host-discovery-manifests.md +50 -0
- package/src/apothem/rules/host-discovery.md +56 -0
- package/src/apothem/rules/i18n-discipline-locale-cohorts.md +120 -0
- package/src/apothem/rules/i18n-discipline.md +70 -0
- package/src/apothem/rules/interactive-questions-canonical-shapes.md +590 -0
- package/src/apothem/rules/interactive-questions-detail.md +41 -0
- package/src/apothem/rules/interactive-questions-sweep-matchers.md +184 -0
- package/src/apothem/rules/interactive-questions.md +89 -0
- package/src/apothem/rules/large-file-generation.md +112 -0
- package/src/apothem/rules/large-file-reading.md +59 -0
- package/src/apothem/rules/living-docs.md +85 -0
- package/src/apothem/rules/multi-agent-workflow.md +57 -0
- package/src/apothem/rules/operational-mandates-expanded.md +78 -0
- package/src/apothem/rules/operational-mandates.md +88 -0
- package/src/apothem/rules/option-annotation-form.md +60 -0
- package/src/apothem/rules/option-annotation.md +45 -0
- package/src/apothem/rules/own-voice-reimplementation.md +86 -0
- package/src/apothem/rules/performance-discipline.md +91 -0
- package/src/apothem/rules/persistent-conventions-vigilance-checklist.md +54 -0
- package/src/apothem/rules/persistent-conventions-vigilance.md +61 -0
- package/src/apothem/rules/plain-language.md +56 -0
- package/src/apothem/rules/planning-techniques.md +130 -0
- package/src/apothem/rules/pre-emission-gate-bars.md +86 -0
- package/src/apothem/rules/pre-emission-gate.md +54 -0
- package/src/apothem/rules/production-ready-prs-surfaces.md +162 -0
- package/src/apothem/rules/production-ready-prs.md +83 -0
- package/src/apothem/rules/propagation.md +63 -0
- package/src/apothem/rules/recommend-next-step.md +106 -0
- package/src/apothem/rules/refactoring-discipline.md +76 -0
- package/src/apothem/rules/session-closure.md +44 -0
- package/src/apothem/rules/sota-elevation-exemplars.md +76 -0
- package/src/apothem/rules/sota-elevation.md +52 -0
- package/src/apothem/rules/source-accessibility.md +58 -0
- package/src/apothem/rules/surgical-manipulation.md +48 -0
- package/src/apothem/rules/systemic-participation-relations.md +108 -0
- package/src/apothem/rules/systemic-participation.md +70 -0
- package/src/apothem/rules/ten-dimension-check-dimensions.md +52 -0
- package/src/apothem/rules/ten-dimension-check.md +59 -0
- package/src/apothem/rules/token-budget-discipline.md +81 -0
- package/src/apothem/rules/token-efficiency-rewrite-protocol.md +79 -0
- package/src/apothem/rules/token-efficiency-rewrite.md +77 -0
- package/src/apothem/rules/tool-use-discipline.md +48 -0
- package/src/apothem/rules/visual-leverage.md +102 -0
- package/src/apothem/schemas/NOTICE.md +9 -0
- package/src/apothem/schemas/README.md +104 -0
- package/src/apothem/schemas/__init__.py +176 -0
- package/src/apothem/schemas/advisory-finding.schema.json +111 -0
- package/src/apothem/schemas/agent.schema.json +106 -0
- package/src/apothem/schemas/authorship-header.txt +1 -0
- package/src/apothem/schemas/cohort-manifest.yaml +248 -0
- package/src/apothem/schemas/cohort-metadata-vocabulary.yaml +168 -0
- package/src/apothem/schemas/cohort.schema.json +113 -0
- package/src/apothem/schemas/command.schema.json +68 -0
- package/src/apothem/schemas/compatibility-matrix.yaml +432 -0
- package/src/apothem/schemas/context-fragment.schema.json +64 -0
- package/src/apothem/schemas/freshness-token-denylist.txt +51 -0
- package/src/apothem/schemas/handoff-manifest.yaml +353 -0
- package/src/apothem/schemas/header-exceptions.txt +141 -0
- package/src/apothem/schemas/header-visibility.yaml +39 -0
- package/src/apothem/schemas/learning-signal.schema.json +46 -0
- package/src/apothem/schemas/memory-record.schema.json +61 -0
- package/src/apothem/schemas/output-style.schema.json +40 -0
- package/src/apothem/schemas/plan.schema.json +51 -0
- package/src/apothem/schemas/plugin.schema.json +83 -0
- package/src/apothem/schemas/profile.example.yaml +70 -0
- package/src/apothem/schemas/profile.minimal.yaml +6 -0
- package/src/apothem/schemas/profile.schema.json +396 -0
- package/src/apothem/schemas/reference-token-denylist.txt +25 -0
- package/src/apothem/schemas/skill.schema.json +75 -0
- package/src/apothem/skills/README.md +93 -0
- package/src/apothem/skills/dependency-upgrade/SKILL.md +105 -0
- package/src/apothem/skills/dev-toolkit/SKILL.md +120 -0
- package/src/apothem/skills/diagram-authoring/SKILL.md +113 -0
- package/src/apothem/skills/document-authoring/SKILL.md +118 -0
- package/src/apothem/skills/ecosystem-audit/SKILL.md +108 -0
- package/src/apothem/skills/ecosystem-audit/references/audit-fortress.md +85 -0
- package/src/apothem/skills/ecosystem-audit/references/procedure.md +162 -0
- package/src/apothem/skills/eval-harness/SKILL.md +88 -0
- package/src/apothem/skills/incident-runbook/SKILL.md +92 -0
- package/src/apothem/skills/multi-source-research/SKILL.md +90 -0
- package/src/apothem/skills/plan-suite/SKILL.md +118 -0
- package/src/apothem/skills/plan-suite/master_template.md +1324 -0
- package/src/apothem/skills/projectify/SKILL.md +117 -0
- package/src/apothem/skills/prompt-engineering/SKILL.md +122 -0
- package/src/apothem/skills/refactor-extract/SKILL.md +85 -0
- package/src/apothem/skills/research-suite/SKILL.md +170 -0
- package/src/apothem/skills/research-suite/references/directory-structure.md +47 -0
- package/src/apothem/skills/research-suite/references/lifecycle.md +67 -0
- package/src/apothem/skills/research-suite/references/principal-investigator-framework.md +37 -0
- package/src/apothem/skills/research-suite/references/rigor-mandates.md +30 -0
- package/src/apothem/skills/research-suite/research_template.md +476 -0
- package/src/apothem/skills/secret-rotation/SKILL.md +87 -0
- package/src/apothem/skills/source-synthesis/SKILL.md +92 -0
- package/src/apothem/skills/surgical-guard/SKILL.md +118 -0
- package/src/apothem/skills/test-authoring/SKILL.md +85 -0
- package/src/apothem/skills/vuln-triage/SKILL.md +91 -0
- package/src/apothem/skills/workflow/SKILL.md +139 -0
- package/src/apothem/statuslines/README.md +26 -0
- package/src/apothem/statuslines/__init__.py +20 -0
- package/src/apothem/statuslines/conformity.json +5 -0
- package/src/apothem/statuslines/render.py +334 -0
- package/src/apothem/statuslines/statusline.md +50 -0
- package/src/apothem/templates/README.md +43 -0
- package/src/apothem/templates/agents-md-template.md +80 -0
- package/src/apothem/templates/consideration-log.md +39 -0
- package/src/apothem/templates/expertise-gap-log.md +56 -0
- package/src/apothem/templates/master-index-template.md +93 -0
- package/src/apothem/templates/potency-map.md +53 -0
- package/src/apothem/templates/preservation-audit.md +60 -0
- package/src/apothem/templates/question-resolution-audit.md +52 -0
- package/src/apothem/templates/trace-matrix-template.md +77 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "canonical-layout"
|
|
3
|
+
description: "Non-trivial multi-step work emits two-tier reporting (per-sub-phase report + phase-level rollup that aggregates rather than concatenates) and lays generated outputs at the host's discovered canonical layout with reciprocal producer / consumer cross-references and provenance. Orphan outputs (generated artifacts with no consumer / no index entry / no producer attribution) are structural failures."
|
|
4
|
+
pathFilter: ""
|
|
5
|
+
alwaysApply: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
9
|
+
|
|
10
|
+
# Rule: Phase / Sub-Phase Reporting & Canonical Layout of Generated Outputs
|
|
11
|
+
|
|
12
|
+
## What this rule enforces
|
|
13
|
+
|
|
14
|
+
Binds **M12 — Phase / Sub-Phase Reporting & Canonical Layout of Generated Outputs**. Non-trivial multi-step work MUST emit two-tier reporting (working + reviewing tiers) and MUST lay every generated output at a host-discovered canonical location with reciprocal producer / consumer cross-references and provenance. An orphan output — no consumer, OR no index entry, OR no producer attribution — is a structural failure, not a deferral candidate.
|
|
15
|
+
|
|
16
|
+
## Pre-conditions
|
|
17
|
+
|
|
18
|
+
Applies whenever the agent undertakes non-trivial multi-step work per the trivial-vs-non-trivial threshold. Trivial-scope work skips two-tier reporting. Single-sub-phase work collapses the tier (the sub-phase report IS the rollup) but still honors the canonical-layout discipline.
|
|
19
|
+
|
|
20
|
+
## Required behavior
|
|
21
|
+
|
|
22
|
+
Operational bodies live at the (Companion Sub-Rule Anchor) sibling rule, demand-loaded on plan-suite / phase / REPORT.md / PHASE.md / MASTER-PLAN.md / PROGRESS.md / migrations touches.
|
|
23
|
+
|
|
24
|
+
(Companion Sub-Rule Anchor) §1 — two-tier reporting) Working tier (per-sub-phase REPORT.md with Summary / Tasks / Outputs / Verification / Disclosure ledger / gate attestation / Bindings) plus reviewing tier (rollup REPORT.md aggregating rather than concatenating — uniform template, aggregated metrics, pattern surfacing, phase self-check, outward declarations); single-sub-phase phases collapse the tier. See `rules/canonical-layout-reporting-tiers.md` §1.
|
|
25
|
+
|
|
26
|
+
(Companion Sub-Rule Anchor) §2 — canonical layout) Outputs sit at predictable host-discovered locations per `rules/host-discovery.md`; every output carries canonical directory + sibling-convention filename + provenance record + index entry. Cross-phase artifacts sit at the host's cross-phase deliverable location with reciprocal back-references. See `rules/canonical-layout-reporting-tiers.md` §2.
|
|
27
|
+
|
|
28
|
+
(Companion Sub-Rule Anchor) §2.1 — numeric-prefix discipline) Numeric prefixes (`NN-`, `NNL-`) convey ordering and apply only where sequence is intrinsic — phase folders, sub-phase folders, host-ratified migration scripts. Forbidden on root-level singletons and any class without a sibling sequence; decorative prefixes are structural failures. See `rules/canonical-layout-reporting-tiers.md` §2.1.
|
|
29
|
+
|
|
30
|
+
(Companion Sub-Rule Anchor) §2.2 — plan-suite `_outputs/` surface) Durable generated emissions from plan workflows sit under each suite's `_outputs/` sibling, not in inflated PROGRESS.md / PLAN-NOTES.md narrative and not in ad-hoc root files. See `rules/canonical-layout-reporting-tiers.md` §2.2.
|
|
31
|
+
|
|
32
|
+
(Companion Sub-Rule Anchor) §2.3 — anti-inflation reporting discipline) PROGRESS.md and PLAN-NOTES.md remain bounded, index-first state ledgers; detailed reports, audit traces, metrics, and bulky evidence move to REPORT.md or `_outputs/` with backlinks. See `rules/canonical-layout-reporting-tiers.md` §2.3.
|
|
33
|
+
|
|
34
|
+
(Companion Sub-Rule Anchor) §2.4 — `*-maintenance` suite pattern) Deferred or out-of-scope plan work is routed to a sibling maintenance suite with source-suite anchors and rationale; it is not buried in the originating suite's progress narrative. See `rules/canonical-layout-reporting-tiers.md` §2.4.
|
|
35
|
+
|
|
36
|
+
(Companion Sub-Rule Anchor) §3 — orphan-output prevention) Orphan = no consumer OR no index entry OR no producer attribution; HIGH-severity at pre-emission gate row 12; mechanical matcher at `conformity/orphan_output_grep.py`; recovery via add-consumer / add-index / add-attribution / retire — all in the same change-set. See `rules/canonical-layout-reporting-tiers.md` §3.
|
|
37
|
+
|
|
38
|
+
(Companion Sub-Rule Anchor) §4 — reciprocal producer / consumer cross-references) Producer-side declares artifact + consumer(s) + binding direction in `Outputs emitted`; consumer-side references the output explicitly per `rules/bidirectional-binding.md`; stale producer reports are findings. See `rules/canonical-layout-reporting-tiers.md` §4.
|
|
39
|
+
|
|
40
|
+
(Companion Sub-Rule Anchor) §5 — surface imposition) Discipline lands across CLAUDE.md, skills, agents, commands, .apothem/plans/, and tools/conformity. See `rules/canonical-layout-reporting-tiers.md` §5 for the per-surface obligation table.
|
|
41
|
+
|
|
42
|
+
(Companion Sub-Rule Anchor) §6 — M11 ↔ M12 correspondence) Sprint apparatus per `rules/agile-sprints.md` and layout / reporting discipline are mutually reinforcing — Goal / Backlog / DoR / DoD / Review / Retrospective / Velocity each ↔ a layout-tier surface. See `rules/canonical-layout-reporting-tiers.md` §6 for the full table.
|
|
43
|
+
|
|
44
|
+
(Companion Sub-Rule Anchor) §7 — three-tier scalability (D7)) `small` (<50 phases / <100 specs) — full-suite validation each pass, in-line refs, monolithic single suite. `medium` (50–500 / 100–1000) — incremental + sampled-rollup validation, suite-root `MASTER-INDEX.md`, phase-grouped decomposition (groups of 5–20). `large` (≥500 / ≥1000) — index-driven + on-demand drilldown validation, queryable index, sub-suite federation. Drift-prevention mechanisms (trace matrix all-tier; stable IDs / MASTER-INDEX.md / phase-rollup verification at medium+; sub-suite federation / suite-rollup at large) per the templates at `src/apothem/templates/master-index-template.md` and `src/apothem/templates/trace-matrix-template.md`. Borderline-tier (±10% of a boundary) routes through the structured-inquiry channel per `rules/authority-inquiry.md` rather than silent-pick. See `rules/canonical-layout-reporting-tiers.md` §7 for tier table, drift-prevention table, and small-tier worked example.
|
|
45
|
+
|
|
46
|
+
## Disclosure surface
|
|
47
|
+
|
|
48
|
+
Every layout / reporting emission lands in the disclosure ledger per `rules/disclosure-ledger.md` — `[Output — emitted: …]`, `[Report — sub-phase: …]`, `[Report — rollup: …]`, `[Output — orphan-resolved: …]`. Full marker schemas live at the (Companion Sub-Rule Anchor) sibling rule's Disclosure surface.
|
|
49
|
+
|
|
50
|
+
## Failure tells
|
|
51
|
+
|
|
52
|
+
Flat `report1.md` / `report2.md` at ad-hoc paths. A rollup that merely concatenates sub-phase report links instead of aggregating. Cross-phase synthesis buried inside one phase folder. Missing producer attribution. Tests at the project root; docs inlined into README; a CI workflow with no CONTRIBUTING entry. Heterogeneous rollups. A stale producer report claiming a vanished consumer. An emission with no `orphan-output-grep` clearance recorded.
|
|
53
|
+
|
|
54
|
+
## Bindings (§0.j five-direction)
|
|
55
|
+
|
|
56
|
+
- **Drives →** ● Every non-trivial multi-step work surface in every host project (the two-tier reporting discipline + canonical-layout discipline are the output-shape floor). ● The `orphan-output-grep` mechanical matcher at `conformity/orphan_output_grep.py` — operationalizes the §3 orphan-prevention invariant. ● Every multi-phase plan's `phases/NN-topic/{REPORT.md, NNL-subtopic/}` shape. ● Every multi-artifact agent return format. ● The pre-emission gate's row 12 enforcement per `rules/pre-emission-gate.md`.
|
|
57
|
+
- **Satisfies →** ● the fifteen-mandate registry row **M12 — Phase Reporting & Canonical Layout**. ● the Pre-Emission Gate row 12 (M12 phase-layout check).
|
|
58
|
+
- **Established by ↑** ● the fifteen-mandate registry (ratifies M12). ● the Pre-Emission Gate row 12. ● The plan-suite's existing two-tier convention at `<project-root>/.apothem/plans/*/phases/NN-topic/{PHASE.md, REPORT.md}` — this rule canonicalizes the existing practice and extends it to host-project work.
|
|
59
|
+
- **Gated by ←** ● The trivial-threshold (trivial-scope work bypasses the two-tier requirement). ● `CLAUDE.md` always-loaded preamble. ● `rules/host-discovery.md` (the layout's "canonical" is host-discovered; this rule's §2 delegates the exact form to M1 discovery).
|
|
60
|
+
- **Cross-bound with ↔** ↔ `rules/canonical-layout-reporting-tiers.md` (path-filtered companion sub-rule carrying the operational depth for §1 two-tier reporting, §2.1 numeric-prefix discipline, §3 orphan-output prevention, §4 reciprocal cross-references, §5 surface imposition, and §6 M11 ↔ M12 correspondence). ↔ `rules/agile-sprints.md` (M11 — the §6 M11 ↔ M12 correspondence is the operational form binding the two rules; sprint apparatus and layout surface are mutually reinforcing). ↔ `rules/bidirectional-binding.md` (M10 — reciprocal producer / consumer cross-references at §4 operationalize M10 reciprocity at the artifact layer). ↔ `rules/host-discovery.md` (M1 — canonical layout's exact form is host-discovered). ↔ `rules/visual-leverage.md` (M9 — diagrams of phase / sub-phase structure live at the canonical layout per §2). ↔ `rules/pre-emission-gate.md` (M4 — bar 12 of the gate enforces this rule's two-tier + canonical-layout + orphan-prevention invariants). ↔ `rules/disclosure-ledger.md` (M2 — output / report / orphan-resolution emissions are recorded in the ledger). ↔ `rules/recommend-next-step.md` (M12 — the Recommended Next Step block is the reporting tier's forward-move surface). ↔ `rules/harness-adapter-shape.md` (M12 — adapter sub-packages and STANDARD-CONVENTION-PIN.md sit at the canonical layout per the §1 directory shape). ↔ `rules/propagation.md` (orphan prevention is one tier of the same-change-set reference-graph sync).
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "clean-architecture-layers"
|
|
3
|
+
description: "Clean architecture layer discipline — Domain / Application / Infrastructure / Presentation separation under the inward-only dependency rule (Domain depends on nothing; outer layers implement inner-layer interfaces injected at the composition root; no inner layer imports a concrete outer class). Mandatory at 3+ modules or SHARED+; relaxed for throwaway scripts and trivial scopes. Path-filtered to src / lib / app / packages source trees."
|
|
4
|
+
pathFilter: "**/src/**, **/lib/**, **/app/**, **/packages/**"
|
|
5
|
+
alwaysApply: false
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
9
|
+
|
|
10
|
+
# Rule: Clean Architecture Layer Discipline
|
|
11
|
+
|
|
12
|
+
## Purpose
|
|
13
|
+
|
|
14
|
+
Enforce strict separation between the Domain, Application, Infrastructure, and Presentation layers — protecting the domain core from external concerns to guarantee testability, scalability, and maintainability.
|
|
15
|
+
|
|
16
|
+
## Obligations
|
|
17
|
+
|
|
18
|
+
### 1. The Four Canonical Layers
|
|
19
|
+
|
|
20
|
+
Every non-trivial project MUST be organized into four distinct layers under strict dependency rules:
|
|
21
|
+
|
|
22
|
+
| Layer | Contains | Depends On | Never Depends On |
|
|
23
|
+
| ----- | -------- | ---------- | ---------------- |
|
|
24
|
+
| **Domain** | Entities, value objects, domain events, repository interfaces, domain services, business rules, validation logic | Nothing (pure, self-contained) | Application, Infrastructure, Presentation |
|
|
25
|
+
| **Application** | Use cases, application services, DTOs, command/query handlers, orchestration logic, ports (interfaces) | Domain only | Infrastructure, Presentation |
|
|
26
|
+
| **Infrastructure** | Database adapters, API clients, file system, message queues, cache implementations, ORM configurations, external service integrations | Domain, Application (implements their interfaces) | Presentation |
|
|
27
|
+
| **Presentation** | Controllers, views, API endpoints, CLI handlers, serializers, middleware, request/response mapping | Application (via ports/interfaces) | Domain directly, Infrastructure directly |
|
|
28
|
+
|
|
29
|
+
**The Dependency Rule.** Dependencies point inward only. Domain is innermost; Presentation outermost. Infrastructure sits beside Presentation — neither depends on the other.
|
|
30
|
+
|
|
31
|
+
### 2. Layer Boundary Enforcement
|
|
32
|
+
|
|
33
|
+
**2.1 — Import Discipline:**
|
|
34
|
+
|
|
35
|
+
- Domain files MUST NOT import from Application, Infrastructure, or Presentation.
|
|
36
|
+
- Application files MUST NOT import from Infrastructure or Presentation.
|
|
37
|
+
- Cross-layer communication flows through interfaces (ports) defined in inner layers and implemented by outer layers.
|
|
38
|
+
|
|
39
|
+
**2.2 — Interface Segregation at Boundaries:**
|
|
40
|
+
|
|
41
|
+
- Every cross-layer dependency MUST be mediated by an interface / protocol / abstract class defined in the consuming (inner) layer.
|
|
42
|
+
- Infrastructure implements Domain repository interfaces and Application port interfaces.
|
|
43
|
+
- Presentation consumes Application services through defined ports — never reaching into Domain or Infrastructure directly. **Exception:** Domain value objects (e.g., `Money`, `UserId`) received through Application DTOs MAY be referenced in Presentation for display / serialization — but Presentation MUST NOT invoke Domain services or business logic.
|
|
44
|
+
|
|
45
|
+
**2.3 — Dependency Injection:**
|
|
46
|
+
|
|
47
|
+
- Outer-layer implementations are injected into inner-layer interfaces at the composition root (application startup).
|
|
48
|
+
- No inner layer constructs or references a concrete outer-layer implementation.
|
|
49
|
+
- Injection configuration is the composition root's responsibility, not the individual layers'.
|
|
50
|
+
- For the Python materialization (`Protocol`, `ABC`, composition-root patterns), see `rules/code-craft-python.md` §1 DIP.
|
|
51
|
+
|
|
52
|
+
### 3. Directory Structure Patterns
|
|
53
|
+
|
|
54
|
+
Recommended directory layouts (adapt to language/framework conventions):
|
|
55
|
+
|
|
56
|
+
**Flat Module Pattern (small-medium projects):**
|
|
57
|
+
|
|
58
|
+
```mermaid
|
|
59
|
+
%%{ init: { "theme": "neutral" } }%%
|
|
60
|
+
%% verified: 2026-04-27 %%
|
|
61
|
+
%% provenance: rules/clean-architecture-layers.md §1 (four canonical layers) %%
|
|
62
|
+
%% cross-reference: rules/clean-architecture-layers.md §2 (layer boundary enforcement) %%
|
|
63
|
+
graph TD
|
|
64
|
+
SRC["src/"]
|
|
65
|
+
SRC --> DOM["domain/<br/>(entities · value objects · interfaces)"]
|
|
66
|
+
SRC --> APP["application/<br/>(use cases · services · DTOs)"]
|
|
67
|
+
SRC --> INF["infrastructure/<br/>(database · APIs · external services)"]
|
|
68
|
+
SRC --> PRES["presentation/<br/>(controllers · CLI · API endpoints)"]
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Domain-Driven Module Pattern (large projects):**
|
|
72
|
+
|
|
73
|
+
```mermaid
|
|
74
|
+
%%{ init: { "theme": "neutral" } }%%
|
|
75
|
+
%% verified: 2026-04-27 %%
|
|
76
|
+
%% provenance: rules/clean-architecture-layers.md §1 (four canonical layers) + §6.1 (mandatory full layer separation) %%
|
|
77
|
+
%% cross-reference: rules/clean-architecture-layers.md §2.1 (import discipline) %%
|
|
78
|
+
graph TD
|
|
79
|
+
SRC["src/"]
|
|
80
|
+
SRC --> MODS["modules/"]
|
|
81
|
+
MODS --> USERS["users/"]
|
|
82
|
+
USERS --> U_DOM["domain/"]
|
|
83
|
+
USERS --> U_APP["application/"]
|
|
84
|
+
USERS --> U_INF["infrastructure/"]
|
|
85
|
+
USERS --> U_PRES["presentation/"]
|
|
86
|
+
MODS --> ORDERS["orders/"]
|
|
87
|
+
ORDERS --> O_DOM["domain/"]
|
|
88
|
+
ORDERS --> O_APP["application/"]
|
|
89
|
+
ORDERS --> O_INF["infrastructure/"]
|
|
90
|
+
ORDERS --> O_PRES["presentation/"]
|
|
91
|
+
SRC --> SHARED["shared/"]
|
|
92
|
+
SHARED --> S_DOM["domain/<br/>(shared value objects · cross-cutting domain logic)"]
|
|
93
|
+
SHARED --> S_INF["infrastructure/<br/>(shared infrastructure · logging · config)"]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 4. Language-Specific Layer Materializations
|
|
97
|
+
|
|
98
|
+
The universal layer patterns materialize through language-native idioms. Use the appropriate abstraction mechanism for your language (Python: `Protocol`; TypeScript/Java/Go: `interface`; Rust: `trait`; Swift: `protocol`) and data modeling tools (Python: `dataclasses`/Pydantic; TypeScript: Zod/classes; Java: records/Jackson; Go: structs/tags; Rust: `serde`/structs; Swift: Codable/structs).
|
|
99
|
+
|
|
100
|
+
**4.1 — Dependency Inversion:**
|
|
101
|
+
|
|
102
|
+
Domain and Application layers define interfaces using the language's abstraction mechanism. Infrastructure provides concrete implementations. The composition root wires implementations to interface-typed parameters. No inner layer ever imports a concrete outer class.
|
|
103
|
+
|
|
104
|
+
**4.2 — Domain Purity:**
|
|
105
|
+
|
|
106
|
+
- Zero external dependencies in Domain — no ORM imports, no framework imports, no I/O. Pure data structures, value objects, and business logic.
|
|
107
|
+
- Domain entities MUST NOT use persistence-layer models directly.
|
|
108
|
+
- Domain exceptions inherit from a domain-level base, never from a framework exception.
|
|
109
|
+
|
|
110
|
+
**4.3 — Application as Orchestrator:**
|
|
111
|
+
|
|
112
|
+
- Application services accept and return DTOs, never persistence entities.
|
|
113
|
+
- Use cases call domain logic plus repository interfaces — no direct database or HTTP calls.
|
|
114
|
+
- Application defines the ports (interfaces) Infrastructure implements.
|
|
115
|
+
|
|
116
|
+
**4.4 — Infrastructure Adapters:**
|
|
117
|
+
|
|
118
|
+
- Every external dependency (database, API, message queue, cache) is wrapped in an adapter implementing a Domain or Application interface.
|
|
119
|
+
- Adapters are the sole location for library-specific code, and are independently testable via integration tests.
|
|
120
|
+
|
|
121
|
+
**4.5 — Thin Presentation:**
|
|
122
|
+
|
|
123
|
+
- Controllers / handlers translate transport requests into Application DTOs and responses back to transport format — zero business logic.
|
|
124
|
+
- Validation and serialization happen at the boundary.
|
|
125
|
+
|
|
126
|
+
### 5. Testing Implications
|
|
127
|
+
|
|
128
|
+
Layer separation directly enables testability:
|
|
129
|
+
|
|
130
|
+
- **Domain tests:** Pure unit tests — no mocking needed, no I/O, no framework dependencies.
|
|
131
|
+
- **Application tests:** Unit tests with mocked interfaces. Test use case orchestration, not infrastructure details.
|
|
132
|
+
- **Infrastructure tests:** Integration tests against real external systems. Test adapter correctness.
|
|
133
|
+
- **Presentation tests:** Transport-layer tests (HTTP, CLI, gRPC). Test request-response mapping, not business logic.
|
|
134
|
+
- **End-to-End tests:** Full stack through Presentation to Infrastructure. Verify integration.
|
|
135
|
+
|
|
136
|
+
### 6. When to Apply
|
|
137
|
+
|
|
138
|
+
**6.1 — Full Layer Separation (Mandatory):**
|
|
139
|
+
|
|
140
|
+
- Projects with 3+ modules or bounded contexts.
|
|
141
|
+
- Projects at SHARED+ seriousness level.
|
|
142
|
+
- Projects involving database access, external APIs, or multiple presentation channels.
|
|
143
|
+
- Projects expected to grow beyond initial scope.
|
|
144
|
+
|
|
145
|
+
**6.2 — Simplified Separation (Acceptable):**
|
|
146
|
+
|
|
147
|
+
- Small, single-purpose scripts or utilities (EXPLORING seriousness).
|
|
148
|
+
- Domain + Infrastructure two-layer split when Application layer would be trivially pass-through.
|
|
149
|
+
- Microservices where the bounded context is small enough that a flat structure suffices.
|
|
150
|
+
|
|
151
|
+
**6.3 — When NOT to Force Layers:**
|
|
152
|
+
|
|
153
|
+
- Throwaway scripts, one-off data transformations, proof-of-concept prototypes.
|
|
154
|
+
- Projects where the overhead of layer separation exceeds the project's expected lifetime.
|
|
155
|
+
- When the user explicitly requests a simpler structure — document the trade-off and proceed.
|
|
156
|
+
|
|
157
|
+
## Seriousness Scaling
|
|
158
|
+
|
|
159
|
+
| Level | Layer Discipline |
|
|
160
|
+
| ----- | ---------------- |
|
|
161
|
+
| EXPLORING | Awareness only — suggest separation when beneficial, do not enforce |
|
|
162
|
+
| PERSONAL_USE | Recommend separation for non-trivial projects. Verify dependency direction on code review |
|
|
163
|
+
| SHARED | Mandatory for projects with 3+ modules. Layer violations are findings in `/plan-review`. Import discipline enforced |
|
|
164
|
+
| PUBLIC_LAUNCH | Full enforcement. Layer violations block execution. Architecture verification in quality gates. Lint rules for import boundaries recommended |
|
|
165
|
+
|
|
166
|
+
## Anti-Patterns
|
|
167
|
+
|
|
168
|
+
- **DON'T** let Domain depend on Infrastructure — **BECAUSE** the domain becomes untestable without spinning up databases, APIs, and external services.
|
|
169
|
+
- **DON'T** put business logic in controllers/handlers — **BECAUSE** it couples domain rules to the presentation channel and makes them unreusable across CLI, API, and event-driven interfaces.
|
|
170
|
+
- **DON'T** use ORM entities as domain entities — **BECAUSE** ORM concerns (lazy loading, column mapping, migration) leak into the domain and corrupt its purity.
|
|
171
|
+
- **DON'T** skip the Application layer and call Infrastructure from Presentation — **BECAUSE** it scatters orchestration logic and makes use cases invisible.
|
|
172
|
+
- **DON'T** create god services that span multiple layers — **BECAUSE** they violate the dependency rule and create tight coupling that resists change.
|
|
173
|
+
- **DON'T** enforce layers on trivial projects — **BECAUSE** premature architecture adds complexity without proportional benefit.
|
|
174
|
+
- **DON'T** import concrete Infrastructure classes inside Domain or Application layers — **BECAUSE** it inverts the dependency rule. Use interfaces/protocols and inject at the composition root.
|
|
175
|
+
|
|
176
|
+
## Enforcement
|
|
177
|
+
|
|
178
|
+
Path-filtered (`**/src/**`, `**/lib/**`, `**/app/**`, `**/packages/**`), scaling per the table above. Implements CM-27. Canonical specification for clean architecture layer discipline.
|
|
179
|
+
|
|
180
|
+
## Bindings (§0.j five-direction)
|
|
181
|
+
|
|
182
|
+
- **Drives →** ● Every non-trivial multi-module project's directory layout (§3 Directory Structure Patterns — flat-module vs. domain-driven-module). ● Every cross-layer dependency check (§2.1 Import Discipline; §2.2 Interface Segregation at Boundaries). ● Every composition-root pattern in dependency injection (§2.3). ◐ The Senior Software Architect role's language-agnostic layer discipline declared at `rules/cognitive-identity.md` §1 (Python-language materialization routes through `rules/code-craft-python.md`).
|
|
183
|
+
- **Satisfies →** ● CM-27 (Clean Architecture Layers — rule-delegated mandate). ● the rules registry row "Clean Architecture".
|
|
184
|
+
- **Established by ↑** ● CM-27. ● `rules/cognitive-identity.md` (the Senior Software Architect role declares clean-architecture as structural law, not guideline).
|
|
185
|
+
- **Gated by ←** ● The path-filter (`**/src/**`, `**/lib/**`, `**/app/**`, `**/packages/**`) — this rule activates only on matching artifact touches. ● `rules/cognitive-identity.md` Senior Software Architect role declaration.
|
|
186
|
+
- **Cross-bound with ↔** ↔ `rules/code-craft-python.md` (Python-language materialization of the layer discipline; §1 DIP cross-references this rule's §2.3 dependency-injection discussion). ↔ `rules/cognitive-identity.md` (the cognitive-identity rule declares the Senior Software Architect role this rule operationalizes). ↔ `rules/clean-room-generation.md` (clean-room generation produces layer-correct artifacts; §2 Writing Protocol respects layer boundaries).
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "clean-room-generation-protocols"
|
|
3
|
+
description: "Path-filtered companion rule carrying the full Writing Protocol (§2), Re-Writing Protocol (§3), Code Generation (§4), Prose and Documentation (§5), Plan and Artifact Generation (§6), Decision Tree, and Anti-Patterns specifications anchored at the parent `rules/clean-room-generation.md` rule's pointer sections; demand-loaded when the assistant edits any code, prose, plan, or artifact surface."
|
|
4
|
+
pathFilter: "**/src/**, **/lib/**, **/tools/**, **/scripts/**, **/tests/**, **/docs/**, **/*.py, **/*.md, **/CLAUDE.md, **/rules/**, **/commands/**, **/skills/**, **/agents/**"
|
|
5
|
+
alwaysApply: false
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
9
|
+
|
|
10
|
+
# Rule: Clean-Room Generation Protocols (Companion Sub-Rule)
|
|
11
|
+
|
|
12
|
+
## Purpose
|
|
13
|
+
|
|
14
|
+
Carry the full executable protocols for clean-room generation that `rules/clean-room-generation.md` pointer sections declare. Path-filtered: loads on any code, prose, plan, or artifact surface. The parent owns the Clean-Room Invariant (§1) and the CM-4 four-outcome routing (§1.1); this companion owns the Writing Protocol (§2), Re-Writing Protocol (§3), Code Generation (§4), Prose and Documentation (§5), Plan and Artifact Generation (§6), the CM-4 Decision Tree, and the Anti-Patterns.
|
|
15
|
+
|
|
16
|
+
## Obligations
|
|
17
|
+
|
|
18
|
+
### 2. Writing Protocol (New Content)
|
|
19
|
+
|
|
20
|
+
**2.1 — Specification Extraction:** Before generating, extract: (a) purpose — what the output must accomplish, (b) audience — who consumes it, (c) constraints — format, length, style, technical requirements, (d) quality bar — seriousness level and domain standards.
|
|
21
|
+
|
|
22
|
+
**2.2 — Intent-First Derivation:** Generate from understood intent, never from pattern matching. The question is never "what does content like this usually look like?" but always "what does THIS specific content need to be?"
|
|
23
|
+
|
|
24
|
+
**2.3 — Structural Originality:** Choose structure from the content's inherent needs. A function's shape comes from its behavioral requirements. A document's shape comes from its communication goals. Import structure from convention only when the content genuinely demands it — and state why.
|
|
25
|
+
|
|
26
|
+
**2.4 — Contextual Precision:** Every element calibrated to context. Variable names reflect the domain. Prose vocabulary matches the audience. Abstraction levels match the problem's complexity. Nothing generic when specific is possible.
|
|
27
|
+
|
|
28
|
+
**2.5 — Completeness Gate:** Before delivering: every specification requirement addressed, no extraneous elements the specification did not require, every element earns its presence through traceability to inputs.
|
|
29
|
+
|
|
30
|
+
### 3. Re-Writing Protocol (Transforming Existing Content)
|
|
31
|
+
|
|
32
|
+
**3.1 — Behavioral Extraction:** Understand what the original DOES — observable behavior, contracts, invariants, side effects, edge cases. This extracted behavior IS the specification for the re-write.
|
|
33
|
+
|
|
34
|
+
**3.2 — Intent Archaeology:** Identify WHY the original was written as it was. Surface implicit requirements, historical constraints, and embedded design decisions. Distinguish deliberate choices from accidental complexity.
|
|
35
|
+
|
|
36
|
+
**3.3 — The Clean-Room Barrier:** After extraction, treat the extracted specification as the sole input for re-derivation — do not transform or edit the original's implementation in place. Re-derive from the extracted specification. The re-write is a fresh creation that happens to preserve behavior — not an edited copy. The re-write scope matches the change scope: if modifying a single function, extract and re-derive that function; if restructuring a module, extract and re-derive the module. Unchanged code in the same artifact is not subject to the clean-room barrier.
|
|
37
|
+
|
|
38
|
+
**3.4 — Quality Elevation Mandate:** Every re-write that targets refactoring or improvement must demonstrably improve on the original in at least one dimension: clarity, correctness, performance, maintainability, testability, security, or expressiveness. Demonstration requires naming the specific deficiency in the original and how the re-write addresses it. Re-writes that merely rephrase violate the clean-room principle. Exception: faithful ports, migrations, and format conversions where the original is sound — the quality dimension is "fidelity to specification in the target format."
|
|
39
|
+
|
|
40
|
+
**3.5 — Regression Gate:** After re-writing, verify all behavioral contracts from 3.1 are preserved. New defects introduced during re-writing are the primary risk — explicit verification is mandatory, not assumed.
|
|
41
|
+
|
|
42
|
+
### 4. Code Generation
|
|
43
|
+
|
|
44
|
+
**4.1 — Contract-Driven:** Generate from interfaces, protocols, type signatures, and behavioral contracts. The contract is the specification; the implementation is derived, not remembered.
|
|
45
|
+
|
|
46
|
+
**4.2 — Test-Behavioral Derivation:** When tests exist, they define the behavioral specification. When absent, write behavioral assertions (input→output contracts) before generating the implementation.
|
|
47
|
+
|
|
48
|
+
**4.3 — Pattern Adaptation:** Design patterns are structural principles, not code templates. Adapt the principle to the specific problem. A Strategy pattern for payment processing shares the principle with a Strategy for rendering — never the code.
|
|
49
|
+
|
|
50
|
+
**4.4 — Domain-Native Expression:** Code speaks the domain's language. Financial code uses financial terms. Network code uses network terms. Generic names (`data`, `handler`, `process`, `manager`) indicate domain understanding failure.
|
|
51
|
+
|
|
52
|
+
**4.5 — Minimal Sufficiency:** Generate exactly what the specification requires — no speculative features, no defensive code against impossible states, no premature abstractions. The output reads as written by someone who understood the requirements perfectly and nothing else. Aesthetic demand (cognitive-identity Filter 5) governs *form*, not *scope*: elegance expresses the specification with conceptual clarity, it does not add features. Filters 2-4 operate at the design phase — producing structurally novel ways to satisfy the spec — not at generation. A novel approach to the same requirement is scope-compliant; an unrequested capability the approach suggests is scope-violating. Example: a novel internal data structure that self-documents the code is form; an unrequested caching layer is scope.
|
|
53
|
+
|
|
54
|
+
### 5. Prose and Documentation
|
|
55
|
+
|
|
56
|
+
**5.1 — Purpose-Driven Structure:** Every document has a communication purpose. Structure follows purpose: tutorials guide sequentially, references enable random access, explanations build understanding progressively. Never impose sections because "documents like this usually have them."
|
|
57
|
+
|
|
58
|
+
**5.2 — Sentence-Level Justification:** Every sentence advances the purpose. Removable sentences should not exist. Filler ("In this section, we will discuss..."), throat-clearing ("It is important to note that..."), and meta-commentary about the document itself are structural failures.
|
|
59
|
+
|
|
60
|
+
**5.3 — Precision Over Politeness:** Exact words. "The function returns null when the key is missing" — not "The function may return null in certain cases." Hedge words weaken precision. Content-free qualifiers ("very", "quite", "somewhat") are noise.
|
|
61
|
+
|
|
62
|
+
**5.4 — Active Construction:** Active voice, concrete subjects, specific verbs. "The scheduler assigns tasks to workers" — not "Tasks are assigned to workers by the scheduler." Passive voice removes the actor from the sentence; when the actor is removed, ambiguity about who performs the action cannot be diagnosed by the reader.
|
|
63
|
+
|
|
64
|
+
**5.5 — Re-Writing Prose:** Extract information content (facts, relationships, procedures). Discard original expression entirely. Re-express from extracted content, optimized for target audience. The re-written version preserves 100% information content with zero stylistic inheritance.
|
|
65
|
+
|
|
66
|
+
### 6. Plan and Artifact Generation
|
|
67
|
+
|
|
68
|
+
**6.1 — Fresh Derivation Per Artifact:** Each artifact freshly derived from its inputs. No copy-paste between artifacts. Shared content in two artifacts means both independently justify its presence.
|
|
69
|
+
|
|
70
|
+
**6.2 — Specification Traceability:** Every element in a generated artifact traces to a specific input requirement. Untraceable elements indicate drift or unnecessary additions — remove them.
|
|
71
|
+
|
|
72
|
+
**6.3 — Re-Planning as Clean-Room:** Plan revisions treat the trigger (new info, failed assumption, changed requirement) as a new input. Re-derive affected sections from the updated specification rather than patching existing text.
|
|
73
|
+
|
|
74
|
+
## Decision Tree
|
|
75
|
+
|
|
76
|
+
```mermaid
|
|
77
|
+
%%{ init: { "theme": "neutral" } }%%
|
|
78
|
+
%% verified: 2026-04-27 %%
|
|
79
|
+
%% provenance: rules/clean-room-generation.md §1.1 (interaction with CM-4 search) %%
|
|
80
|
+
%% cross-reference: rules/operational-mandates.md (CM-4 Search Before Implement) %%
|
|
81
|
+
flowchart TD
|
|
82
|
+
Start[Generation request received] --> Search[CM-4 search the codebase first]
|
|
83
|
+
Search --> Q{Existing code coverage?}
|
|
84
|
+
Q -->|fully covers| Reuse[Reuse as-is · no generation]
|
|
85
|
+
Q -->|partially covers| Mixed[Reuse covered portion · treat uncovered as fresh-write spec]
|
|
86
|
+
Q -->|needs integration changes| ReWrite[Re-Writing Protocol §3]
|
|
87
|
+
Q -->|fundamentally unsuitable| Fresh[Writing Protocol §2 · document why reuse rejected]
|
|
88
|
+
Mixed --> WriteUncovered[Apply §2 to uncovered portion]
|
|
89
|
+
ReWrite --> Extract[§3.1 Behavioral extraction]
|
|
90
|
+
Extract --> Archeology[§3.2 Intent archaeology]
|
|
91
|
+
Archeology --> Barrier[§3.3 Clean-room barrier · re-derive from spec]
|
|
92
|
+
Barrier --> Quality[§3.4 Quality elevation · name the deficiency]
|
|
93
|
+
Quality --> Regression[§3.5 Regression gate · verify behavioral preservation]
|
|
94
|
+
Fresh --> SpecExtract[§2.1 Specification extraction]
|
|
95
|
+
SpecExtract --> Derive[§2.2 Intent-first derivation]
|
|
96
|
+
Derive --> Original[§2.3 Structural originality]
|
|
97
|
+
Original --> Precise[§2.4 Contextual precision]
|
|
98
|
+
Precise --> Complete[§2.5 Completeness gate]
|
|
99
|
+
WriteUncovered --> Complete
|
|
100
|
+
Regression --> Done[Output ratified]
|
|
101
|
+
Reuse --> Done
|
|
102
|
+
Complete --> Done
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Anti-Patterns
|
|
106
|
+
|
|
107
|
+
- **DON'T** import structure from templates without contextual justification — **BECAUSE** template-driven generation produces generic output that fails the specific problem.
|
|
108
|
+
- **DON'T** re-write by cosmetic editing (synonym substitution, sentence reordering) — **BECAUSE** paraphrasing preserves structural weaknesses and violates the clean-room barrier.
|
|
109
|
+
- **DON'T** generate from memorized examples — **BECAUSE** example-driven generation inherits context assumptions that rarely match the current problem.
|
|
110
|
+
- **DON'T** include elements "because they are usually there" — **BECAUSE** convention-driven additions bloat output and dilute precision.
|
|
111
|
+
- **DON'T** use generic names when domain-specific alternatives exist — **BECAUSE** generic names expose domain understanding failure.
|
|
112
|
+
- **DON'T** hedge with qualifiers carrying no information — **BECAUSE** imprecision in output reveals imprecision in understanding.
|
|
113
|
+
|
|
114
|
+
## Enforcement
|
|
115
|
+
|
|
116
|
+
Path-filtered (the glob patterns in this rule's `pathFilter` field), always-on at every seriousness level when in scope. Demand-loaded companion to `rules/clean-room-generation.md`: the parent owns the Clean-Room Invariant (§1) and CM-4 four-outcome routing (§1.1) at the always-on tier; this companion owns §2 Writing, §3 Re-Writing, §4 Code Generation, §5 Prose and Documentation, §6 Plan and Artifact Generation, the Decision Tree, and the Anti-Patterns.
|
|
117
|
+
|
|
118
|
+
## Bindings (§0.j five-direction)
|
|
119
|
+
|
|
120
|
+
- **Drives →** ● Every code, prose, plan, and artifact emission across the path-filter scope (the §2 Writing Protocol + §3 Re-Writing Protocol are the generation-method floor when in scope). ● Every refactor-class touch (§3 quality-elevation mandate gates the re-write). ● Every plan-suite emission (§6 fresh-derivation discipline). ◐ The Decision Tree's CM-4 four-outcome materialization.
|
|
121
|
+
- **Satisfies →** ● CM-5 / CM-7 / CM-21 (rule-delegated mandates; this companion is the path-filtered protocol subset). ● the rules registry row "Clean-Room Generation" (companion sub-rule). ● `rules/clean-room-generation.md` pointer sections (the parent rule's anchors to this companion's full specification).
|
|
122
|
+
- **Established by ↑** ● `rules/clean-room-generation.md` (parent-rule anchors). ● CM-5 + CM-7 + CM-21 inline definitions. ● `rules/cognitive-identity.md`.
|
|
123
|
+
- **Gated by ←** ● The path-filter — this rule demand-loads only on code, prose, plan, or artifact-surface touches. ● `rules/clean-room-generation.md` always-on baseline (parent rule's Clean-Room Invariant and CM-4 routing must be live for the companion to demand-load coherently).
|
|
124
|
+
- **Cross-bound with ↔** ↔ `rules/clean-room-generation.md` (parent rule; pointer sections bind this companion). ↔ `rules/cognitive-identity.md` (Filter 5 aesthetic-demand ↔ §3.4 quality elevation; both implement CM-21's facets). ↔ `rules/operational-mandates.md` (CM-4 search-before-implement gates the Decision Tree's entry; CM-5/CM-7 inline definitions). ↔ `rules/planning-techniques.md` (third co-implementer of CM-21; planning-technique facet there, generation-methodology facet here).
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "clean-room-generation"
|
|
3
|
+
description: "Clean-room generation methodology for every output — code, prose, plans, artifacts: each is a fresh derivation from an understood specification (independently re-derivable from its inputs), never a memorized template nor a cosmetic edit of existing content. Routes CM-4 search outcomes into the Writing vs. Re-Writing protocols and gates every re-write on quality elevation against a named deficiency. Implements CM-5 / CM-7 / CM-21."
|
|
4
|
+
pathFilter: ""
|
|
5
|
+
alwaysApply: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
9
|
+
|
|
10
|
+
# Rule: Clean-Room Generation
|
|
11
|
+
|
|
12
|
+
## Purpose
|
|
13
|
+
|
|
14
|
+
Govern the generation methodology for every output — code, prose, documentation, plans, artifacts. Each output MUST be a fresh derivation from an understood specification, never a reproduction of memorized patterns nor a cosmetic transformation of existing content.
|
|
15
|
+
|
|
16
|
+
## Obligations
|
|
17
|
+
|
|
18
|
+
### 1. The Clean-Room Invariant
|
|
19
|
+
|
|
20
|
+
**Every output MUST be independently derivable from its inputs.** Given the specification, context, and constraints, a competent professional with zero access to prior implementations produces substantially the same output.
|
|
21
|
+
|
|
22
|
+
Corollaries:
|
|
23
|
+
|
|
24
|
+
- No output relies on memorized templates or boilerplate for its structure.
|
|
25
|
+
- Every structural choice is justifiable from the current context.
|
|
26
|
+
- Re-generating from the same specification MAY differ in expression while solving the same problem.
|
|
27
|
+
- Convention is a starting point for evaluation, never an autopilot for structure.
|
|
28
|
+
|
|
29
|
+
**1.1 — Interaction with CM-4 (Search Before Implement).** CM-4 search determines *what* to build; clean-room governs *how*. After CM-4 search, route by coverage:
|
|
30
|
+
|
|
31
|
+
- **(a) Existing code fully satisfies** — reuse as-is; no generation or re-writing.
|
|
32
|
+
- **(b) Existing code partially satisfies** — reuse the covered portion as-is; treat the uncovered portion as the Writing-Protocol (§2) specification.
|
|
33
|
+
- **(c) Existing code needs integration changes** — Re-Writing Protocol (§3) on the modified portion only, scoped to the changed behavioral contracts.
|
|
34
|
+
- **(d) Existing code fundamentally unsuitable** — Writing Protocol (§2) for the full requirement; document why reuse was rejected.
|
|
35
|
+
|
|
36
|
+
### 2-6. Protocols (Companion Sub-Rule Anchor)
|
|
37
|
+
|
|
38
|
+
Full protocols — §2 Writing, §3 Re-Writing, §4 Code Generation, §5 Prose and Documentation, §6 Plan and Artifact Generation — plus the CM-4 Decision Tree and six Anti-Patterns live at `rules/clean-room-generation-protocols.md`. The companion demand-loads on code, prose, plan, or artifact-surface touches.
|
|
39
|
+
|
|
40
|
+
## Seriousness Scaling
|
|
41
|
+
|
|
42
|
+
| Level | Clean-Room Discipline |
|
|
43
|
+
| ----- | --------------------- |
|
|
44
|
+
| EXPLORING | Intent-first derivation (2.2) and contextual precision (2.4). Quality elevation on explicit re-write requests |
|
|
45
|
+
| PERSONAL_USE | Full Writing Protocol (Section 2) + Code Generation (Section 4). Re-Writing Protocol on re-write/refactor requests |
|
|
46
|
+
| SHARED | Full Sections 2–6. Quality elevation mandatory on all re-writes. Sentence-level justification on documentation |
|
|
47
|
+
| PUBLIC_LAUNCH | Full enforcement. Re-writing requires documented behavioral extraction (written to scratch/notes, not just mental). Structural choices annotated with rationale on all non-trivial artifacts. Completeness Gate (2.5) verified with explicit checklist |
|
|
48
|
+
|
|
49
|
+
## Enforcement
|
|
50
|
+
|
|
51
|
+
Always-on at every seriousness level, scaling per the table above. Implements CM-5 (Best Solution), CM-7 (Coherent Product), CM-21 (Creative Quality). Canonical specification for generation methodology, re-writing discipline, and output originality.
|
|
52
|
+
|
|
53
|
+
## Bindings (§0.j five-direction)
|
|
54
|
+
|
|
55
|
+
- **Drives →** ● Every code, prose, plan, and artifact emission across the ecosystem (the Writing Protocol §2 + Re-Writing Protocol §3 are the generation-method floor). ● Every `/plan` stage's artifact production (plan-suite emissions adopt the §6 fresh-derivation discipline). ● Every refactor-class agent task (Re-Writing Protocol §3 quality-elevation mandate gates the re-write). ◐ The CM-7 plan-internal isolation invariant on every codebase artifact (the §1 clean-room invariant operationalizes CM-7's natural-domain-language requirement). ◐ The CM-4 search-before-implement four-outcome routing (§1.1 mirrors CM-4's outcomes).
|
|
56
|
+
- **Satisfies →** ● CM-5 / CM-7 / CM-21 (rule-delegated mandates). ● the rules registry row "Clean-Room Generation".
|
|
57
|
+
- **Established by ↑** ● `rules/cognitive-identity.md` (clean-room generation is the methodology arm of the cognitive-identity declaration). ● CM-5 + CM-7 + CM-21 inline definitions. ● `rules/cognitive-identity.md` §1 seven-axs-of-breadth taxonomy (re-writing protocol's quality-elevation mandate cites that taxonomy).
|
|
58
|
+
- **Gated by ←** ● `rules/operational-mandates.md` (CM-4 search-before-implement gate fires before §1.1 routes to a Writing/Re-Writing path). ● `rules/cognitive-identity.md` Filter 1 + Filter 5 always-on baseline.
|
|
59
|
+
- **Cross-bound with ↔** ↔ `rules/clean-room-generation-protocols.md` (path-filtered companion sub-rule carrying the §2-§6 protocols, Decision Tree, and Anti-Patterns specifications). ↔ `rules/cognitive-identity.md` (Filter 5 aesthetic-demand ↔ §3.4 quality elevation; both implement CM-21's facets). ↔ `rules/operational-mandates.md` (CM-4/CM-5/CM-7 are inline-defined there; this rule is the methodology specification). ↔ `rules/planning-techniques.md` (third co-implementer of CM-21; planning-technique facet over there, generation-methodology facet here). ↔ `rules/persistent-conventions-vigilance.md` (clean-room generation produces ecosystem-coherent artifacts; convention vigilance maintains ecosystem coherence). ↔ `rules/plain-language.md` (Writing Protocol §2 produces narrative honoring plain-language; plain-language is the post-emission scan). ↔ `rules/token-efficiency-rewrite.md` (token-efficiency specialisation of §3 re-writing protocol with L2/L3 tiers made explicit). ↔ `rules/large-file-reading.md` (CM-4 Search Before Implement uses Grep/Glob first; large-file-reading canonicalizes locate-before-read). ↔ `rules/refactoring-discipline.md` (gates when and how the §3 re-writing protocol runs for a behaviour-preserving refactor).
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "code-craft-conventions"
|
|
3
|
+
description: "Universal code-craft delegation stub for languages without a dedicated per-language rule. Discovers the host's ratified formatter / linter / type-checker / test framework / per-language idioms and honors them per M1; surfaces silence as inquiry per M5; defers to a per-language sibling rule (code-craft-python, code-craft-shell, code-craft-markdown) when one matches the artifact's path."
|
|
4
|
+
pathFilter: "**"
|
|
5
|
+
alwaysApply: false
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
9
|
+
|
|
10
|
+
# Rule: Universal Code-Craft Delegation — Discover, Honor, Defer
|
|
11
|
+
|
|
12
|
+
## What this rule enforces
|
|
13
|
+
|
|
14
|
+
This rule binds **M13 — Code Craft Conventions** at the **universal-delegation** tier: it applies where a code artifact's language has no dedicated `rules/code-craft-<language>.md`. The discipline is **delegation**. The host's ratified code-craft conventions — formatter, linter, type-checker, test framework, build configuration, per-language idioms — MUST be **discovered** from the host's source-of-truth (manifest files, config files, sibling source files of the same language) per `rules/host-discovery.md` and **honored uniformly**. Where the host is silent on a convention the agent must adopt to act, the silence surfaces as an inquiry per `rules/authority-inquiry.md` with a recommended option per `rules/option-annotation.md`.
|
|
15
|
+
|
|
16
|
+
This stub does not duplicate the canonical M13 sub-element list (M13.1 why-not-what commenting · M13.2 naming · M13.3 error handling · M13.4 function & module design · M13.5 logging · M13.6 testing · M13.7 formatter / linter / type-checker · M13.8 security-conscious code · M13.9 concurrency · M13.10 magic number discipline · M13.11 documentation surface). Per-language siblings carry the language-specific materialization; this stub carries the **delegation contract** routing every code-craft decision through host discovery and per-language sibling-rule precedence.
|
|
17
|
+
|
|
18
|
+
## Pre-conditions
|
|
19
|
+
|
|
20
|
+
Applies whenever a code artifact is authored, modified, or reviewed AND its language matches no per-language sibling rule's `pathFilter`. The current per-language siblings at `rules/`:
|
|
21
|
+
|
|
22
|
+
| Sibling rule | Path-filter scope | When this stub yields |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| `code-craft-python.md` | `**/*.py`, `**/pyproject.toml`, `**/setup.cfg`, `**/requirements*.txt`, `**/Pipfile`, `**/tox.ini`, `**/pytest.ini`, `**/conftest.py`, `**/*.python-version`, `**/mypy.ini`, `**/ruff.toml`, `**/.ruff.toml`, `**/uv.toml`, `**/uv.lock`, `**/pyrightconfig.json` | Python artifacts |
|
|
25
|
+
| `code-craft-shell.md` | `**/*.sh`, `**/*.bash`, `**/*.ps1` | Shell artifacts (POSIX bash + PowerShell) |
|
|
26
|
+
| `code-craft-markdown.md` | `**/*.md`, `**/*.markdown` | Markdown / prose artifacts |
|
|
27
|
+
|
|
28
|
+
When a sibling's `pathFilter` matches the artifact path, the sibling applies and this stub yields. When no sibling matches (e.g., TypeScript, Go, Rust, Java, C++, Ruby), this stub is the active code-craft authority.
|
|
29
|
+
|
|
30
|
+
## Required behavior
|
|
31
|
+
|
|
32
|
+
### 1. Host Discovery — The Per-Language Walk
|
|
33
|
+
|
|
34
|
+
Before authoring code in any language without a dedicated sibling rule, the agent MUST walk the host's ratified source-of-truth files for that language:
|
|
35
|
+
|
|
36
|
+
| Language | Discovery surfaces |
|
|
37
|
+
|---|---|
|
|
38
|
+
| **TypeScript / JavaScript** | `package.json`, `tsconfig.json`, `.eslintrc*`, `.prettierrc*`, `pnpm-lock.yaml` / `yarn.lock` / `package-lock.json`, sibling `*.ts` / `*.js` files |
|
|
39
|
+
| **Rust** | `Cargo.toml`, `Cargo.lock`, `rustfmt.toml`, `clippy.toml`, sibling `*.rs` files |
|
|
40
|
+
| **Go** | `go.mod`, `go.sum`, `.golangci.yml`, sibling `*.go` files |
|
|
41
|
+
| **Java / Kotlin** | `pom.xml`, `build.gradle{,.kts}`, `checkstyle.xml`, `spotbugs-exclude.xml`, sibling `*.java` / `*.kt` files |
|
|
42
|
+
| **C / C++** | `CMakeLists.txt`, `.clang-format`, `.clang-tidy`, sibling `*.c` / `*.cpp` / `*.h` files |
|
|
43
|
+
| **Ruby** | `Gemfile`, `Gemfile.lock`, `.rubocop.yml`, sibling `*.rb` files |
|
|
44
|
+
| **Other languages** | Walk the language's package manager manifest, the language's lint / format configuration, and at least three sibling source files |
|
|
45
|
+
|
|
46
|
+
The agent MUST record every discovered convention with provenance (source file path, value, discovery date) per `rules/host-discovery.md` §4. The discovery output is the per-language ratified convention set the artifact MUST honor.
|
|
47
|
+
|
|
48
|
+
### 2. Honor Discoveries — The Sibling Convergence
|
|
49
|
+
|
|
50
|
+
The artifact MUST be **indistinguishable from one a long-tenured contributor would have written in that language**. When editing existing files, the agent MUST preserve the surrounding idioms even where it would idiomatically choose otherwise. The host's own `lint` / `format` / `test` / `type-check` commands MUST pass the artifact unmodified.
|
|
51
|
+
|
|
52
|
+
Sibling-source convergence: when the host has no explicit lint / format config but does have sibling source files of the same language, those files' observable idioms (indentation, quote style, naming, import ordering, error-handling pattern) are the ratified convention by majority observation. A new file diverging from the sibling convention is non-conformant per M14 systemic participation (`rules/systemic-participation.md`).
|
|
53
|
+
|
|
54
|
+
### 3. Surface Silence — Inquiry-Routed Choices
|
|
55
|
+
|
|
56
|
+
Where the host is silent on a code-craft convention the agent must adopt to proceed (a brand-new project with no formatter; a new language entering a polyglot host with no precedent), the agent MUST surface the choice as an inquiry per `rules/authority-inquiry.md` with the recommended option annotated per `rules/option-annotation.md`. The recommended option's rationale cites at least one concrete-driver class — community-default tooling, vendor-recommended idioms, or a host-discovered analog from a related language already in the project.
|
|
57
|
+
|
|
58
|
+
### 4. Per-Language Sibling Precedence
|
|
59
|
+
|
|
60
|
+
When the artifact path matches a per-language sibling's `pathFilter`, that sibling's specific guardrails take precedence over this stub's general delegation. The sibling carries the language-specific materialization of M13.1–M13.11; this stub neither duplicates nor contradicts it.
|
|
61
|
+
|
|
62
|
+
When a host carries a language with no per-language sibling AND that language recurs across multiple work sessions, the recurrence signals that a new sibling may be warranted per `rules/persistent-conventions-vigilance.md` §4 Ecosystem Gap Detection. The trigger is recurrence count plus convention-citation density; the gap-closure action is authoring a new `code-craft-<language>.md` sibling.
|
|
63
|
+
|
|
64
|
+
### 5. Code-Craft Sub-Element Coverage — Universal Floor
|
|
65
|
+
|
|
66
|
+
Even at the universal-delegation tier, the M13 sub-element catalog is the floor every emitted artifact MUST meet. Host-discovered conventions populate the per-language specifics; the universal floor remains:
|
|
67
|
+
|
|
68
|
+
- **M13.1 Why-not-what commenting.** Comments state intent / rationale / reference / invariant — never paraphrase what the code lexically does. No commented-out code; source control is the canonical archive.
|
|
69
|
+
- **M13.2 Naming.** Identifiers reveal intent. Booleans read as predicates. Single-letter names only in conventional roles.
|
|
70
|
+
- **M13.3 Error handling.** Caught exceptions are typed and handled or re-raised with context. No silent failure.
|
|
71
|
+
- **M13.4 Function & module design.** Pure-function bias where reasonable; explicit dependency injection over implicit state; one responsibility per function.
|
|
72
|
+
- **M13.5 Logging.** Levels are deliberate (DEBUG / INFO / WARNING / ERROR / CRITICAL); no secrets ever logged.
|
|
73
|
+
- **M13.6 Testing.** Behavior-descriptive test names; AAA shape (Arrange / Act / Assert); no test depends on test ordering.
|
|
74
|
+
- **M13.7 Formatter / linter / type-checker.** The host's ratified tools are honored; the artifact passes them clean.
|
|
75
|
+
- **M13.8 Security-conscious code.** No hardcoded secrets; no shell execution on unvalidated input; no SQL injection; no eval / exec on untrusted input.
|
|
76
|
+
- **M13.9 Concurrency.** Where applicable: no shared mutable state without documented synchronization; race conditions named when they exist.
|
|
77
|
+
- **M13.10 Magic number discipline.** Numeric literals appearing in logic become named constants with intent.
|
|
78
|
+
- **M13.11 Documentation surface.** Public functions / classes / modules carry docstrings stating preconditions, postconditions, invariants, exceptions raised.
|
|
79
|
+
|
|
80
|
+
The per-language sibling refines each sub-element with language-specific idioms; this stub enforces the floor when no sibling applies.
|
|
81
|
+
|
|
82
|
+
## Disclosure surface
|
|
83
|
+
|
|
84
|
+
Every host-discovery outcome and every silence-routed inquiry is recorded in the disclosure ledger per `rules/disclosure-ledger.md`:
|
|
85
|
+
|
|
86
|
+
- `[Discovery — source: <manifest-path>; language: <name>; convention: <formatter | linter | type-checker | test-framework | idiom>; value: <discovered-value>; honored]` for every honored discovery.
|
|
87
|
+
- `[Inquiry — id: <inquiry-id>; category: preference; outcome: <user-choice | fallback-to-recommended>]` for every silence-routed convention choice.
|
|
88
|
+
- `[Default — applied: <auto-decision>; class: pure-formatting-normalization]` for the carve-out cases (host has ratified style, artifact diverges, normalization applied per `rules/authority-inquiry.md` §10.1).
|
|
89
|
+
- `[Refinement — improvement: maintainability; per-language gap detected: <language>; recurrence: <count>; tracking: <gap-closure inquiry-or-task>]` when the recurrence count surfaces a new per-language-sibling-rule candidate.
|
|
90
|
+
|
|
91
|
+
## Failure tells
|
|
92
|
+
|
|
93
|
+
A TypeScript file in a project standardized on `prettier` + `eslint` that uses a different formatter or quote style than every sibling file (sibling-convergence violation). A Rust file with `unsafe` blocks lacking a `// SAFETY: <invariant>` comment in a project where every other `unsafe` block carries one (idiom drift). A Go file using `panic` as control flow in a project where every other Go file uses error returns (M13.3 error-handling drift). A Ruby file silently introducing a new RuboCop violation in a project with `.rubocop.yml` ratified (M13.7 formatter / linter drift). A new language introduced into a polyglot project without a code-craft sibling rule and without the recurrence-tracking surface (the rule's gap-detection signal is suppressed). A new language file authored without the host-discovery walk (the agent invented conventions where the host has them). A change-set that touches a per-language sibling-rule-covered path AND a stub-covered path, where the stub-covered language drifts while the sibling-covered language remains conformant (asymmetric attention to the per-language sibling vs. the stub's general delegation).
|
|
94
|
+
|
|
95
|
+
## Bindings (§0.j five-direction)
|
|
96
|
+
|
|
97
|
+
- **Drives →** ● Every code artifact authoring session in a language without a dedicated per-language sibling rule (every TypeScript, Go, Rust, Java, C++, Ruby, Kotlin, Swift, etc. artifact). ● Per-language host-discovery walks for every code-touched language. ● The recurrence-tracking surface that signals new per-language-sibling-rule candidates. ◐ The sibling-convergence enforcement at `rules/systemic-participation.md` (M14).
|
|
98
|
+
- **Satisfies →** ● the fifteen-mandate registry row **M13 — Code Craft** (universal-delegation tier; per-language tier is the per-language sibling rules).
|
|
99
|
+
- **Established by ↑** ● the fifteen-mandate registry (ratifies M13). ● The user-scope ecosystem's mandate to carry a universal code-craft floor for every language regardless of per-language sibling presence.
|
|
100
|
+
- **Gated by ←** ● the trivial-vs-non-trivial threshold (trivial-scope code edits run an abbreviated check covering M13.1 why-not-what + M13.7 formatter / linter only). ● `CLAUDE.md` always-loaded preamble. ● Per-language sibling rule pathFilter precedence (this stub yields when a sibling matches).
|
|
101
|
+
- **Cross-bound with ↔** ↔ `rules/code-craft-python.md` (Python sibling — takes precedence on Python paths). ↔ `rules/code-craft-shell.md` (Shell sibling — takes precedence on shell paths). ↔ `rules/code-craft-markdown.md` (Markdown sibling — takes precedence on Markdown paths). ↔ `rules/host-discovery.md` (M1 — per-language discovery is the M1 walk for code-craft conventions). ↔ `rules/authority-inquiry.md` (M5 — silence-routed choices). ↔ `rules/option-annotation.md` (M7 — recommended-option annotation on inquired conventions). ↔ `rules/systemic-participation.md` (M14 — sibling convergence is the M14 silo-prevention surface for code). ↔ `rules/persistent-conventions-vigilance.md` (CM-22 §4 — recurrence-driven gap detection signals new per-language-sibling-rule candidates).
|