devrites 3.0.7 → 3.2.0
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 +18 -0
- package/README.md +82 -50
- package/SECURITY.md +31 -29
- package/docs/adr/0001-go-engine-as-control-plane.md +1 -1
- package/docs/adr/0002-dual-host-harness.md +1 -1
- package/docs/adr/0004-state-schema-phases-sections.md +1 -2
- package/docs/adr/0006-clock-seam-and-engine-ci-gates.md +3 -4
- package/docs/adr/0009-prebuild-decision-coverage-and-readiness.md +67 -0
- package/docs/adr/0010-agent-first-fresh-context-orchestration.md +71 -0
- package/docs/adr/0011-define-plan-transition-rights.md +28 -0
- package/docs/adr/0012-semantic-workspace-upgrades.md +77 -0
- package/docs/adr/README.md +4 -0
- package/docs/agents/triage-labels.md +7 -7
- package/docs/architecture.md +179 -141
- package/docs/cli.md +47 -12
- package/docs/command-map.md +61 -38
- package/docs/engine/agent-contract.md +92 -15
- package/docs/engine/commands.md +248 -72
- package/docs/engine/state-schema.md +52 -23
- package/docs/engine/workspace-schema.md +103 -15
- package/docs/extensions.md +1 -1
- package/docs/flow.md +86 -51
- package/docs/harness-compliance.md +29 -5
- package/docs/orchestration.md +107 -79
- package/docs/quick-reference.md +11 -3
- package/docs/release.md +4 -3
- package/docs/skills.md +67 -38
- package/docs/usage.md +84 -39
- package/engine/cmd/releasepack/main.go +219 -0
- package/engine/cmd/releasepack/main_test.go +170 -0
- package/engine/commands.go +170 -23
- package/engine/git_guard.go +187 -0
- package/engine/git_guard_test.go +283 -0
- package/engine/hookpolicy.go +53 -55
- package/engine/hookpolicy_test.go +91 -1
- package/engine/hooks.go +296 -75
- package/engine/hooks_events_test.go +276 -6
- package/engine/hooks_workspace.go +640 -159
- package/engine/internal/devritespaths/paths.go +65 -10
- package/engine/internal/devritespaths/paths_test.go +110 -0
- package/engine/internal/doctor/doctor.go +153 -23
- package/engine/internal/doctor/doctor_test.go +74 -0
- package/engine/internal/forge/forge.go +940 -0
- package/engine/internal/forge/forge_test.go +576 -0
- package/engine/internal/forge/git.go +245 -0
- package/engine/internal/forge/liveness_unix.go +48 -0
- package/engine/internal/forge/liveness_windows.go +67 -0
- package/engine/internal/forge/manifest.go +402 -0
- package/engine/internal/gate/gate.go +90 -71
- package/engine/internal/gate/gate_test.go +71 -2
- package/engine/internal/harness/compliance.go +18 -24
- package/engine/internal/harness/harness.go +37 -44
- package/engine/internal/harness/harness_test.go +21 -5
- package/engine/internal/install/install.go +486 -38
- package/engine/internal/install/install_test.go +383 -10
- package/engine/internal/iohooks/iohooks.go +350 -59
- package/engine/internal/iohooks/iohooks_test.go +421 -1
- package/engine/internal/lib/buildreadiness.go +43 -18
- package/engine/internal/lib/clarifyreturn.go +91 -0
- package/engine/internal/lib/clarifyreturn_test.go +123 -0
- package/engine/internal/lib/context.go +54 -15
- package/engine/internal/lib/cursor_compat_test.go +8 -0
- package/engine/internal/lib/extensions.go +2 -3
- package/engine/internal/lib/gitauthority.go +601 -0
- package/engine/internal/lib/gitauthority_test.go +346 -0
- package/engine/internal/lib/jsonout.go +25 -11
- package/engine/internal/lib/jsonout_test.go +16 -0
- package/engine/internal/lib/lanes.go +14 -8
- package/engine/internal/lib/observability_test.go +358 -0
- package/engine/internal/lib/packageexistence.go +151 -35
- package/engine/internal/lib/packageexistence_test.go +163 -0
- package/engine/internal/lib/progress.go +11 -9
- package/engine/internal/lib/provenance.go +462 -0
- package/engine/internal/lib/provenance_test.go +154 -0
- package/engine/internal/lib/readiness_contract.json +118 -0
- package/engine/internal/lib/readinessartifact.go +533 -0
- package/engine/internal/lib/readinessartifact_test.go +422 -0
- package/engine/internal/lib/reconcile.go +712 -88
- package/engine/internal/lib/reconcile_test.go +335 -16
- package/engine/internal/lib/recoveryattempts.go +298 -0
- package/engine/internal/lib/recoveryattempts_test.go +215 -0
- package/engine/internal/lib/resolve.go +23 -19
- package/engine/internal/lib/runbook_context_test.go +20 -0
- package/engine/internal/lib/session.go +701 -9
- package/engine/internal/lib/session_test.go +80 -13
- package/engine/internal/lib/testintegrity.go +33 -37
- package/engine/internal/lib/testintegrity_test.go +63 -1
- package/engine/internal/migrate/migrate.go +81 -1
- package/engine/internal/migrate/migrate_test.go +22 -1
- package/engine/internal/reason/reason.go +180 -0
- package/engine/internal/reason/reason_test.go +35 -0
- package/engine/internal/rootfacts/facts.go +466 -0
- package/engine/internal/rootfacts/facts_test.go +306 -0
- package/engine/internal/safepath/safepath.go +55 -0
- package/engine/internal/safepath/safepath_test.go +69 -0
- package/engine/internal/safepath/safepath_windows_test.go +26 -0
- package/engine/internal/state/clarify_transition.go +165 -0
- package/engine/internal/state/clarify_transition_test.go +130 -0
- package/engine/internal/state/cmd/workflowmanifest/main.go +12 -8
- package/engine/internal/state/cursor.go +58 -0
- package/engine/internal/state/cursor_test.go +42 -1
- package/engine/internal/state/feature.go +35 -48
- package/engine/internal/state/schema.go +90 -37
- package/engine/internal/state/snapshot.go +18 -2
- package/engine/internal/state/state_test.go +187 -7
- package/engine/internal/state/status.go +48 -11
- package/engine/internal/state/workflow_manifest.json +231 -50
- package/engine/internal/toolpolicy/classifier.go +533 -0
- package/engine/internal/toolpolicy/classifier_test.go +424 -0
- package/engine/internal/toolpolicy/git.go +616 -0
- package/engine/internal/toolpolicy/scanner.go +382 -0
- package/engine/main.go +160 -77
- package/engine/observability_cli_test.go +52 -0
- package/engine/root_routing_test.go +277 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=approved.golden +1 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=emptystatus.golden +1 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=legacycontract.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=noclarify.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=novet.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=stalevet.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=trailhash.golden +1 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=trailpipe.golden +1 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=vetnotready.golden +1 -0
- package/engine/testdata/golden/TestParityProgress/arg=allbuilt.golden +1 -1
- package/engine/testdata/golden/TestParityProgress/arg=done.golden +1 -1
- package/engine/testdata/golden/TestParityProgress/arg=mid.golden +1 -1
- package/engine/testdata/golden/TestParityProgress/arg=nophase.golden +1 -1
- package/engine/testdata/golden/TestParityProgress/arg=noslice.golden +1 -1
- package/engine/testdata/golden/TestParityProgress/arg=plan.golden +1 -1
- package/engine/testdata/golden/TestParityProgress/arg=seal.golden +1 -1
- package/engine/testdata/golden/TestParityReconcile/check-clean.golden +1 -1
- package/engine/testdata/golden/TestParityReconcile/inline-fallback.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/snapshot-no-allowlist.golden +1 -0
- package/engine/testdata/golden/TestParityWrightScope/devrites-edit-denied.golden +2 -0
- package/engine/testdata/golden/TestParityWrightScope/out-of-scope-enforce-denies.golden +1 -1
- package/engine/tests/adr_0011_define_plan_test.go +30 -0
- package/engine/tests/budget_test.go +19 -8
- package/engine/tests/concurrency_cli_test.go +7 -1
- package/engine/tests/doctor_cli_test.go +148 -2
- package/engine/tests/forge_cli_test.go +463 -0
- package/engine/tests/gate_test.go +63 -8
- package/engine/tests/hook_test.go +260 -8
- package/engine/tests/hooks_io_test.go +94 -3
- package/engine/tests/json_contract_test.go +127 -2
- package/engine/tests/migrate_cli_test.go +2 -2
- package/engine/tests/parity_buildreadiness_test.go +167 -10
- package/engine/tests/parity_learnings_test.go +16 -17
- package/engine/tests/parity_reconcile_test.go +20 -17
- package/engine/tests/parity_resolve_test.go +12 -11
- package/engine/tests/parity_test.go +21 -17
- package/pack/.claude/agents/devrites-code-reviewer.md +62 -48
- package/pack/.claude/agents/devrites-devex-reviewer.md +69 -53
- package/pack/.claude/agents/devrites-doubt-reviewer.md +29 -22
- package/pack/.claude/agents/devrites-evidence-scout.md +69 -0
- package/pack/.claude/agents/devrites-forge-judge.md +74 -61
- package/pack/.claude/agents/devrites-frontend-reviewer.md +48 -39
- package/pack/.claude/agents/devrites-performance-reviewer.md +49 -40
- package/pack/.claude/agents/devrites-plan-drafter.md +73 -0
- package/pack/.claude/agents/devrites-plan-reviewer.md +80 -47
- package/pack/.claude/agents/devrites-proof-runner.md +74 -0
- package/pack/.claude/agents/devrites-retrospector.md +48 -45
- package/pack/.claude/agents/devrites-security-auditor.md +46 -36
- package/pack/.claude/agents/devrites-simplifier-reviewer.md +50 -46
- package/pack/.claude/agents/devrites-slice-wright.md +153 -165
- package/pack/.claude/agents/devrites-spec-reviewer.md +34 -32
- package/pack/.claude/agents/devrites-strategy-reviewer.md +63 -34
- package/pack/.claude/agents/devrites-test-analyst.md +40 -30
- package/pack/.claude/agents/devrites-upgrade-planner.md +100 -0
- package/pack/.claude/settings.json +2 -1
- package/pack/.claude/skills/devrites-audit/SKILL.md +40 -61
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +24 -13
- package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
- package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
- package/pack/.claude/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
- package/pack/.claude/skills/devrites-doubt/SKILL.md +25 -17
- package/pack/.claude/skills/devrites-interview/SKILL.md +53 -52
- package/pack/.claude/skills/devrites-lib/SKILL.md +12 -9
- package/pack/.claude/skills/devrites-lib/reference/intent-map.md +4 -2
- package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
- package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +8 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/README.md +38 -55
- package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
- package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +200 -190
- package/pack/.claude/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
- package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
- package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +16 -52
- package/pack/.claude/skills/devrites-lib/reference/standards/coding-style.md +2 -10
- package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
- package/pack/.claude/skills/devrites-lib/reference/standards/core.md +23 -18
- package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +17 -57
- package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
- package/pack/.claude/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
- package/pack/.claude/skills/devrites-lib/reference/standards/hooks.md +3 -14
- package/pack/.claude/skills/devrites-lib/reference/standards/patterns.md +9 -25
- package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +0 -9
- package/pack/.claude/skills/devrites-lib/reference/standards/principles.md +1 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/security.md +17 -7
- package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +1 -27
- package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +46 -50
- package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +40 -10
- package/pack/.claude/skills/devrites-source-driven/SKILL.md +23 -22
- package/pack/.claude/skills/rite/SKILL.md +10 -6
- package/pack/.claude/skills/rite/reference/menu.md +13 -7
- package/pack/.claude/skills/rite-adopt/SKILL.md +33 -37
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +33 -28
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +21 -21
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
- package/pack/.claude/skills/rite-build/SKILL.md +35 -30
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +41 -39
- package/pack/.claude/skills/rite-build/reference/evidence-standard.md +10 -0
- package/pack/.claude/skills/rite-build/reference/forge.md +186 -156
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +4 -3
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +96 -175
- package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +10 -4
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +129 -134
- package/pack/.claude/skills/rite-clarify/SKILL.md +90 -0
- package/pack/.claude/skills/rite-clarify/reference/decision-coverage.md +61 -0
- package/pack/.claude/skills/rite-converge/SKILL.md +35 -25
- package/pack/.claude/skills/rite-define/SKILL.md +58 -32
- package/pack/.claude/skills/rite-define/reference/gates.md +16 -15
- package/pack/.claude/skills/rite-define/reference/plan-template.md +18 -8
- package/pack/.claude/skills/rite-frame/reference/failure-modes.md +22 -24
- package/pack/.claude/skills/rite-plan/SKILL.md +47 -16
- package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +4 -0
- package/pack/.claude/skills/rite-polish/SKILL.md +27 -23
- package/pack/.claude/skills/rite-prototype/SKILL.md +25 -26
- package/pack/.claude/skills/rite-prove/SKILL.md +27 -17
- package/pack/.claude/skills/rite-resolve/SKILL.md +12 -11
- package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +3 -0
- package/pack/.claude/skills/rite-review/SKILL.md +37 -28
- package/pack/.claude/skills/rite-seal/reference/phase-contract.md +27 -92
- package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +13 -0
- package/pack/.claude/skills/rite-ship/reference/design-memory.md +31 -36
- package/pack/.claude/skills/rite-spec/SKILL.md +84 -135
- package/pack/.claude/skills/rite-spec/reference/investigation.md +37 -33
- package/pack/.claude/skills/rite-spec/reference/question-protocol.md +6 -2
- package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +25 -24
- package/pack/.claude/skills/rite-spec/reference/spec-template.md +9 -2
- package/pack/.claude/skills/rite-spec/reference/state-workspace.md +13 -3
- package/pack/.claude/skills/rite-temper/SKILL.md +62 -47
- package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +24 -22
- package/pack/.claude/skills/rite-upgrade/SKILL.md +125 -0
- package/pack/.claude/skills/rite-vet/SKILL.md +114 -113
- package/pack/.claude/skills/rite-vet/reference/artifacts.md +50 -9
- package/pack/.claude/skills/rite-vet/reference/review-axes.md +39 -37
- package/pack/generated/claude/agents/devrites-code-reviewer.md +62 -48
- package/pack/generated/claude/agents/devrites-devex-reviewer.md +69 -53
- package/pack/generated/claude/agents/devrites-doubt-reviewer.md +29 -22
- package/pack/generated/claude/agents/devrites-evidence-scout.md +69 -0
- package/pack/generated/claude/agents/devrites-forge-judge.md +74 -61
- package/pack/generated/claude/agents/devrites-frontend-reviewer.md +48 -39
- package/pack/generated/claude/agents/devrites-performance-reviewer.md +49 -40
- package/pack/generated/claude/agents/devrites-plan-drafter.md +73 -0
- package/pack/generated/claude/agents/devrites-plan-reviewer.md +80 -47
- package/pack/generated/claude/agents/devrites-proof-runner.md +74 -0
- package/pack/generated/claude/agents/devrites-retrospector.md +48 -45
- package/pack/generated/claude/agents/devrites-security-auditor.md +46 -36
- package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +50 -46
- package/pack/generated/claude/agents/devrites-slice-wright.md +153 -165
- package/pack/generated/claude/agents/devrites-spec-reviewer.md +34 -32
- package/pack/generated/claude/agents/devrites-strategy-reviewer.md +63 -34
- package/pack/generated/claude/agents/devrites-test-analyst.md +40 -30
- package/pack/generated/claude/agents/devrites-upgrade-planner.md +100 -0
- package/pack/generated/claude/settings.json +2 -1
- package/pack/generated/claude/skills/devrites-audit/SKILL.md +40 -61
- package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +24 -13
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
- package/pack/generated/claude/skills/devrites-doubt/SKILL.md +25 -17
- package/pack/generated/claude/skills/devrites-interview/SKILL.md +53 -52
- package/pack/generated/claude/skills/devrites-lib/SKILL.md +12 -9
- package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +4 -2
- package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
- package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +8 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +38 -55
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
- package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +200 -190
- package/pack/generated/claude/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
- package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +16 -52
- package/pack/generated/claude/skills/devrites-lib/reference/standards/coding-style.md +2 -10
- package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
- package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +23 -18
- package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +17 -57
- package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
- package/pack/generated/claude/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
- package/pack/generated/claude/skills/devrites-lib/reference/standards/hooks.md +3 -14
- package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +9 -25
- package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +0 -9
- package/pack/generated/claude/skills/devrites-lib/reference/standards/principles.md +1 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +17 -7
- package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +1 -27
- package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +46 -50
- package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +40 -10
- package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +23 -22
- package/pack/generated/claude/skills/rite/SKILL.md +10 -6
- package/pack/generated/claude/skills/rite/reference/menu.md +13 -7
- package/pack/generated/claude/skills/rite-adopt/SKILL.md +33 -37
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +33 -28
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +21 -21
- package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
- package/pack/generated/claude/skills/rite-build/SKILL.md +35 -30
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +41 -39
- package/pack/generated/claude/skills/rite-build/reference/evidence-standard.md +10 -0
- package/pack/generated/claude/skills/rite-build/reference/forge.md +186 -156
- package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +4 -3
- package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +96 -175
- package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +10 -4
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +129 -134
- package/pack/generated/claude/skills/rite-clarify/SKILL.md +90 -0
- package/pack/generated/claude/skills/rite-clarify/reference/decision-coverage.md +61 -0
- package/pack/generated/claude/skills/rite-converge/SKILL.md +35 -25
- package/pack/generated/claude/skills/rite-define/SKILL.md +58 -32
- package/pack/generated/claude/skills/rite-define/reference/gates.md +16 -15
- package/pack/generated/claude/skills/rite-define/reference/plan-template.md +18 -8
- package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +22 -24
- package/pack/generated/claude/skills/rite-plan/SKILL.md +47 -16
- package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +4 -0
- package/pack/generated/claude/skills/rite-polish/SKILL.md +27 -23
- package/pack/generated/claude/skills/rite-prototype/SKILL.md +25 -26
- package/pack/generated/claude/skills/rite-prove/SKILL.md +27 -17
- package/pack/generated/claude/skills/rite-resolve/SKILL.md +12 -11
- package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +3 -0
- package/pack/generated/claude/skills/rite-review/SKILL.md +37 -28
- package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +27 -92
- package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +13 -0
- package/pack/generated/claude/skills/rite-ship/reference/design-memory.md +31 -36
- package/pack/generated/claude/skills/rite-spec/SKILL.md +84 -135
- package/pack/generated/claude/skills/rite-spec/reference/investigation.md +37 -33
- package/pack/generated/claude/skills/rite-spec/reference/question-protocol.md +6 -2
- package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +25 -24
- package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +9 -2
- package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +13 -3
- package/pack/generated/claude/skills/rite-temper/SKILL.md +62 -47
- package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +24 -22
- package/pack/generated/claude/skills/rite-upgrade/SKILL.md +125 -0
- package/pack/generated/claude/skills/rite-vet/SKILL.md +114 -113
- package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +50 -9
- package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +39 -37
- package/pack/generated/codex/AGENTS.md +5 -2
- package/pack/generated/codex/agents/devrites-code-reviewer.toml +69 -47
- package/pack/generated/codex/agents/devrites-devex-reviewer.toml +75 -51
- package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +35 -20
- package/pack/generated/codex/agents/devrites-evidence-scout.toml +75 -0
- package/pack/generated/codex/agents/devrites-forge-judge.toml +80 -59
- package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +54 -37
- package/pack/generated/codex/agents/devrites-performance-reviewer.toml +55 -38
- package/pack/generated/codex/agents/devrites-plan-drafter.toml +79 -0
- package/pack/generated/codex/agents/devrites-plan-reviewer.toml +82 -47
- package/pack/generated/codex/agents/devrites-proof-runner.toml +80 -0
- package/pack/generated/codex/agents/devrites-retrospector.toml +54 -43
- package/pack/generated/codex/agents/devrites-security-auditor.toml +53 -35
- package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +56 -44
- package/pack/generated/codex/agents/devrites-slice-wright.toml +159 -163
- package/pack/generated/codex/agents/devrites-spec-reviewer.toml +40 -30
- package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +65 -34
- package/pack/generated/codex/agents/devrites-test-analyst.toml +46 -28
- package/pack/generated/codex/agents/devrites-upgrade-planner.toml +106 -0
- package/pack/generated/codex/hooks.json +4 -14
- package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +7 -3
- package/pack/generated/codex/skills/devrites-audit/SKILL.md +47 -64
- package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +7 -3
- package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +31 -16
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
- package/pack/generated/codex/skills/devrites-doubt/SKILL.md +32 -20
- package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +7 -3
- package/pack/generated/codex/skills/devrites-interview/SKILL.md +60 -55
- package/pack/generated/codex/skills/devrites-lib/SKILL.md +19 -12
- package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +4 -2
- package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
- package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +8 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +38 -55
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
- package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +200 -190
- package/pack/generated/codex/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
- package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +16 -52
- package/pack/generated/codex/skills/devrites-lib/reference/standards/coding-style.md +2 -10
- package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
- package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +23 -18
- package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +17 -57
- package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
- package/pack/generated/codex/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
- package/pack/generated/codex/skills/devrites-lib/reference/standards/hooks.md +3 -14
- package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +9 -25
- package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +0 -9
- package/pack/generated/codex/skills/devrites-lib/reference/standards/principles.md +1 -3
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +17 -7
- package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +1 -27
- package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +46 -50
- package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +40 -10
- package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +7 -3
- package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +7 -3
- package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +29 -24
- package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite/SKILL.md +21 -13
- package/pack/generated/codex/skills/rite/reference/menu.md +13 -7
- package/pack/generated/codex/skills/rite-adopt/SKILL.md +40 -40
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +40 -31
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +21 -21
- package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
- package/pack/generated/codex/skills/rite-build/SKILL.md +42 -33
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +41 -39
- package/pack/generated/codex/skills/rite-build/reference/evidence-standard.md +10 -0
- package/pack/generated/codex/skills/rite-build/reference/forge.md +186 -156
- package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +4 -3
- package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +96 -175
- package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +10 -4
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +129 -134
- package/pack/generated/codex/skills/rite-clarify/SKILL.md +106 -0
- package/pack/generated/codex/skills/rite-clarify/reference/decision-coverage.md +61 -0
- package/pack/generated/codex/skills/rite-converge/SKILL.md +42 -28
- package/pack/generated/codex/skills/rite-customize/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-define/SKILL.md +65 -35
- package/pack/generated/codex/skills/rite-define/reference/gates.md +16 -15
- package/pack/generated/codex/skills/rite-define/reference/plan-template.md +18 -8
- package/pack/generated/codex/skills/rite-doctor/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-dogfood/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-explain/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-frame/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-frame/reference/failure-modes.md +22 -24
- package/pack/generated/codex/skills/rite-handoff/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-learn/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-plan/SKILL.md +54 -19
- package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +5 -1
- package/pack/generated/codex/skills/rite-polish/SKILL.md +34 -26
- package/pack/generated/codex/skills/rite-pov/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-prototype/SKILL.md +32 -29
- package/pack/generated/codex/skills/rite-prove/SKILL.md +34 -20
- package/pack/generated/codex/skills/rite-quick/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-resolve/SKILL.md +19 -14
- package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +3 -0
- package/pack/generated/codex/skills/rite-review/SKILL.md +44 -31
- package/pack/generated/codex/skills/rite-seal/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +27 -92
- package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +13 -0
- package/pack/generated/codex/skills/rite-ship/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-ship/reference/design-memory.md +31 -36
- package/pack/generated/codex/skills/rite-spec/SKILL.md +91 -138
- package/pack/generated/codex/skills/rite-spec/reference/investigation.md +37 -33
- package/pack/generated/codex/skills/rite-spec/reference/question-protocol.md +6 -2
- package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +25 -24
- package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +9 -2
- package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +13 -3
- package/pack/generated/codex/skills/rite-status/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-temper/SKILL.md +69 -50
- package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +24 -22
- package/pack/generated/codex/skills/rite-upgrade/SKILL.md +141 -0
- package/pack/generated/codex/skills/rite-upgrade/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-vet/SKILL.md +121 -116
- package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +50 -9
- package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +40 -38
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +7 -3
- package/package.json +1 -1
- package/scripts/build-release-tarball.sh +32 -15
- package/scripts/check-authority-drift.py +125 -0
- package/scripts/check-instruction-size-baseline.mjs +19 -11
- package/scripts/check-invocation-integrity.py +2 -0
- package/scripts/codex-generate.sh +69 -33
- package/scripts/grade-feature.sh +121 -40
- package/scripts/live-hosts/agent-result.schema.json +230 -0
- package/scripts/live-hosts/claude.sh +87 -0
- package/scripts/live-hosts/codex.sh +81 -0
- package/scripts/live-hosts/common.sh +113 -0
- package/scripts/live-hosts/fake-host.py +264 -0
- package/scripts/live-hosts/host-transport.py +287 -0
- package/scripts/release-check.sh +5 -1
- package/scripts/run-agent-contract-evals.py +1380 -0
- package/scripts/run-behavioral-evals.sh +24 -30
- package/scripts/run-evals.sh +1 -5
- package/scripts/run-live-behavioral-evals.py +1274 -144
- package/scripts/run-outcome-evals.sh +445 -88
- package/scripts/run-tests.mjs +30 -2
- package/scripts/skills-inventory.mjs +1 -1
- package/scripts/validate-workflow-security.py +39 -20
- package/scripts/validate-workspace-schema.py +362 -10
- package/scripts/validate.sh +21 -15
- package/engine/testdata/golden/TestParityWrightScope/devrites-edit-allowed.golden +0 -1
- /package/engine/testdata/golden/{TestParityReconcile/check-no-claimed.golden → TestParityBuildReadiness/arg=clarifyopen.golden} +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# Code review
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
Ask whether the change improves or preserves design clarity, logic, tests, and risk.
|
|
4
|
+
If it does not, do not merge it.
|
|
5
5
|
|
|
6
6
|
## Keep changes small
|
|
7
7
|
- One concern per change (a fix, an endpoint, a refactor), not three at once. Refactoring
|
|
8
8
|
that rides along with new behavior is two changes: split them.
|
|
9
9
|
- Aim for small diffs: under ~200 lines reviews well and merges fast; treat ~400 as a
|
|
10
10
|
soft ceiling and self-split beyond it. Large diffs hide defects and get rubber-stamped.
|
|
11
|
-
- Watch **file size
|
|
11
|
+
- Watch both **file size** and diff size: a small diff that grows an already-large file
|
|
12
12
|
(~1000+ total lines) is an inspection signal: extract the helper or module *first*,
|
|
13
13
|
then add.
|
|
14
14
|
- To self-split: **stack** (land the smallest standalone piece, build on top) or cut a
|
|
@@ -21,7 +21,7 @@ design, cleaner logic, better tests, fewer risks? If not, it doesn't merge yet.
|
|
|
21
21
|
2. **Correctness:** logic, edge cases, error paths, race conditions, wrong assumptions. For branching or boundary changes, run the mechanical [`edge-case trace`](edge-case-trace.md): explicit paths, fixed-set siblings, and deletion contracts.
|
|
22
22
|
3. **Readability:** names, function size, control flow, intent obvious without the author.
|
|
23
23
|
4. **Architecture:** right seam, coupling/cohesion, fits existing patterns, no premature
|
|
24
|
-
abstraction.
|
|
24
|
+
abstraction. Check how it fits the larger system as well as its local behavior.
|
|
25
25
|
5. **Security:** trust boundaries, input validation, authz, secrets.
|
|
26
26
|
6. **Risk:** migrations, destructive changes, rollback.
|
|
27
27
|
|
|
@@ -46,47 +46,12 @@ design, cleaner logic, better tests, fewer risks? If not, it doesn't merge yet.
|
|
|
46
46
|
- Let automation (linters, formatters, CI) catch the trivial stuff so review focuses on
|
|
47
47
|
design and correctness.
|
|
48
48
|
|
|
49
|
-
##
|
|
50
|
-
If a change has one structural problem and ten nits, the structural problem
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
on line 200 has optimized for the cheap finding over the load-bearing one.
|
|
49
|
+
## Report structural problems first
|
|
50
|
+
If a change has one structural problem and ten nits, lead with the structural problem.
|
|
51
|
+
Many nits disappear after the structure changes. Do not bury a wrong boundary behind
|
|
52
|
+
formatting comments.
|
|
54
53
|
|
|
55
|
-
##
|
|
56
|
-
Name these as judgment calls, not automatic violations. They block only when the smell creates a
|
|
57
|
-
concrete risk or breaks a DevRites/project standard.
|
|
58
|
-
|
|
59
|
-
- **Feature Envy:** code asks another object/module for too much data, so behavior likely lives
|
|
60
|
-
on the wrong side of the seam.
|
|
61
|
-
- **Primitive Obsession:** strings/maps/booleans stand in for a real domain concept and scatter
|
|
62
|
-
validation.
|
|
63
|
-
- **Shotgun Surgery:** one change forces many tiny edits across unrelated files.
|
|
64
|
-
- **Divergent Change:** one module changes for multiple unrelated reasons.
|
|
65
|
-
- **Speculative Generality:** abstraction/config/extension point exists for a future nobody needs
|
|
66
|
-
yet.
|
|
67
|
-
- **Long Method / Large Class:** too many responsibilities for a reviewer to reason about safely.
|
|
68
|
-
- **Data Clumps:** the same fields travel together without a named value object/type.
|
|
69
|
-
- **Message Chains / Middle Man:** callers know too much about navigation, or wrappers only pass
|
|
70
|
-
calls through.
|
|
71
|
-
- **Duplicate Code:** repeated logic likely hides inconsistent future fixes.
|
|
72
|
-
|
|
73
|
-
## Structural Remedies: propose the move, not just the problem
|
|
74
|
-
"This is hard to follow" names a smell; it doesn't discharge the review. When the problem is
|
|
75
|
-
structural, name the **move** that fixes it so the author has a concrete next step, not a vibe:
|
|
76
|
-
|
|
77
|
-
- **Replace a conditional chain with a typed dispatcher:** a map/table keyed by the variant,
|
|
78
|
-
each state carrying its own fields, instead of a growing `if/else` on a type tag.
|
|
79
|
-
- **Delete a pass-through wrapper:** a function that only forwards its arguments earns removal;
|
|
80
|
-
call the inner thing directly.
|
|
81
|
-
- **Collapse duplicate branches:** two arms doing the same work behind different conditions
|
|
82
|
-
become one.
|
|
83
|
-
- **Hoist an invariant out of the loop:** computation that doesn't change per iteration moves
|
|
84
|
-
above it.
|
|
85
|
-
|
|
86
|
-
A restructuring must *reduce* the concepts a reader holds, not relocate them
|
|
87
|
-
([`patterns.md`](patterns.md)): prefer the move that makes a whole branch or mode disappear.
|
|
88
|
-
|
|
89
|
-
## Disagreement hierarchy: what wins when you and the author differ
|
|
54
|
+
## Resolve disagreements by evidence
|
|
90
55
|
Resolve a review disagreement by the strongest ground available, in order: **facts** (a
|
|
91
56
|
correctness bug, a failing case, a measured number) > **the project's stated style/convention** >
|
|
92
57
|
**a general design principle** > **personal preference or consistency-for-its-own-sake**. If your
|
|
@@ -94,16 +59,15 @@ objection bottoms out at the last tier, it's a Suggestion at most: say so, and d
|
|
|
94
59
|
An author who is factually right wins over a reviewer's taste.
|
|
95
60
|
|
|
96
61
|
## Zero findings is suspicious
|
|
97
|
-
An adversarial review
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
nothing, it records a **`No-findings:`** justification: the specific adversarial passes it ran
|
|
62
|
+
An empty adversarial review still needs evidence because models tend to agree with the
|
|
63
|
+
author. When an axis (spec, code, security, a doubt) finds nothing, record a
|
|
64
|
+
**`No-findings:`** justification with the specific passes it ran
|
|
101
65
|
(edge cases, error paths, the riskiest decision, the consumer whose test might not cover the
|
|
102
|
-
change) and why each
|
|
103
|
-
|
|
66
|
+
change) and why each found nothing. "Looks good" is not a complete result. Treat a silent
|
|
67
|
+
axis with no finding and no justification as a re-run, not a pass.
|
|
104
68
|
|
|
105
|
-
|
|
106
|
-
|
|
69
|
+
Confidence bands suppress false positives; the no-findings justification catches silent
|
|
70
|
+
false negatives. `devrites-engine review-integrity`
|
|
107
71
|
checks the account is present (a `No-findings:` line on any axis section that raised nothing), not
|
|
108
72
|
its quality: the same honesty contract as `doubt-coverage` and the footprint roster.
|
|
109
73
|
|
|
@@ -11,18 +11,11 @@ existing idiom first; these rules fill the gaps.
|
|
|
11
11
|
|
|
12
12
|
## Functions do one thing
|
|
13
13
|
- One responsibility per function; if you need "and" to describe it, split it.
|
|
14
|
-
- Keep functions short enough to hold in your head. Long functions hide bugs.
|
|
15
|
-
- Limit parameters; a long parameter list usually wants a struct/object or a split.
|
|
16
14
|
- Make edge cases explicit rather than implicit in clever control flow.
|
|
17
15
|
|
|
18
16
|
## Guard clauses over nested pyramids
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
# instead of nesting the whole body in if/else, exit early:
|
|
22
|
-
if (!user) return Unauthorized
|
|
23
|
-
if (!user.active) return Forbidden
|
|
24
|
-
# ...happy path here, un-nested
|
|
25
|
-
```
|
|
17
|
+
|
|
18
|
+
Handle unwanted cases first and return early; keep the success path flat.
|
|
26
19
|
|
|
27
20
|
## Comments explain *why*, not *what*
|
|
28
21
|
- Self-explanatory code beats a comment restating it. Rename before you comment.
|
|
@@ -32,7 +25,6 @@ if (!user.active) return Forbidden
|
|
|
32
25
|
## Simplicity
|
|
33
26
|
- Prefer the simplest thing that works. Don't add abstraction before you have two real
|
|
34
27
|
callers; premature generalization is a cost, not a saving.
|
|
35
|
-
- Don't be clever at the expense of clear. Shorter-but-cryptic is not simpler.
|
|
36
28
|
- Delete dead code you created; don't leave TODOs or stray debug logs in shipped code.
|
|
37
29
|
|
|
38
30
|
## Reuse before you write
|
|
@@ -1,44 +1,17 @@
|
|
|
1
1
|
# Context hygiene
|
|
2
2
|
|
|
3
|
-
Long conversations degrade an agent's reasoning
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- **Lost-in-the-middle** (Liu et al. 2023). Models attend strongly to the start and
|
|
16
|
-
end of their context and **systematically under-attend the middle**. Performance
|
|
17
|
-
drops by ~30% on retrieval and reasoning tasks when load-bearing information shifts
|
|
18
|
-
from the edges to the centre.
|
|
19
|
-
- **Context rot.** Even on simple tasks, accuracy degrades as input length grows. The
|
|
20
|
-
effect compounds for agent workflows: every tool call, file read, and failed attempt
|
|
21
|
-
pushes earlier load-bearing context toward the middle of the window.
|
|
22
|
-
- **Failed-attempt amplification.** When an agentic task goes wrong and is corrected
|
|
23
|
-
in the same session, the failed attempt stays in context: doubling the token cost
|
|
24
|
-
and dragging the model toward the same kinds of mistake.
|
|
25
|
-
- **The 50-70% threshold.** Published Claude Code guidance + community evidence
|
|
26
|
-
consistently land at the same number: **act on context at 50-70% used, not 95%.**
|
|
27
|
-
By 95% the model is already operating in the dump-zone.
|
|
28
|
-
- **Attention budget ≠ window size.** A large window is capacity, not attention: focus
|
|
29
|
-
degrades long before the window fills, noticeably once loaded content passes ~5,000 lines.
|
|
30
|
-
Aim to keep the working set for one task under ~2,000 lines. Load the files a step needs, not the ones it might; a speculative dump you never read still costs attention on
|
|
31
|
-
every turn it sits there.
|
|
32
|
-
|
|
33
|
-
The summary the model can carry is *not* a substitute for the workspace; the workspace
|
|
34
|
-
is the source of truth.
|
|
35
|
-
|
|
36
|
-
**Compaction-preservation directive.** When the harness summarizes or compacts mid-feature,
|
|
37
|
-
always preserve these four. They are the cursor, and losing them to a summary forces the next
|
|
38
|
-
agent to re-derive state the workspace already holds: the `.devrites/ACTIVE` slug, `state.md`'s
|
|
39
|
-
`Next step`, every open `questions.md` gate, and `decisions.md`'s `Dead ends`. (The SessionStart
|
|
40
|
-
orientation and the UserPromptSubmit cursor re-inject this each session and turn; this directive
|
|
41
|
-
is the fallback for involuntary mid-session compaction, where no hook fires.)
|
|
3
|
+
Long conversations degrade an agent's reasoning. End phases cleanly, persist important
|
|
4
|
+
state to disk, and start the next phase in a fresh context.
|
|
5
|
+
|
|
6
|
+
The feature workspace stores the next session's authority; chat memory does not.
|
|
7
|
+
|
|
8
|
+
## Working-set rule
|
|
9
|
+
|
|
10
|
+
Long tool histories can displace important facts and retain failed attempts. Act at 50%
|
|
11
|
+
to 70% context use, keep one task's working set small, and load only what the current
|
|
12
|
+
step needs. The workspace, not a summary, is the source of truth.
|
|
13
|
+
|
|
14
|
+
**Compaction-preservation directive.** If the harness compacts mid-feature, preserve the `.devrites/ACTIVE` slug, `state.md`'s `Next step`, every open `questions.md` gate, and `decisions.md`'s `Dead ends`. Session hooks normally restore these; this is the fallback when no hook fires.
|
|
42
15
|
|
|
43
16
|
## Trust-levels for what you load
|
|
44
17
|
Not everything you read into context carries the same authority. Tier it: the same three-tier
|
|
@@ -61,26 +34,11 @@ validate*:
|
|
|
61
34
|
| The chat is dominated by tool outputs (file reads, diffs, test logs, browser snapshots). | A drift or doubt loop is mid-flight and the trade-off discussion isn't yet recorded. |
|
|
62
35
|
| You hit a wrong path that needs unwinding: fresh start beats arguing with stale context. | A user clarification just landed that materially changes the next phase. |
|
|
63
36
|
|
|
64
|
-
**Default to `/clear`.**
|
|
65
|
-
|
|
37
|
+
**Default to `/clear`.** Use `/compact` only when the workspace does not capture
|
|
38
|
+
important continuity. When in doubt, write the missing decision /
|
|
66
39
|
assumption / question to the canonical file (`/rite-handoff` does this in one step),
|
|
67
40
|
then `/clear`.
|
|
68
41
|
|
|
69
|
-
## Phase-aware recommendation (DevRites lifecycle)
|
|
70
|
-
|
|
71
|
-
| Phase | Typical context cost | After-phase recommendation |
|
|
72
|
-
|---|---|---|
|
|
73
|
-
| `/rite-spec` | HIGH: reads codebase, references, design assets. | **Strong `/clear`.** `spec.md`, `references/`, `decisions.md`, `assumptions.md`, `questions.md`, `brief.md` all captured. |
|
|
74
|
-
| `/rite-define` | MED: reads spec + decides architecture. | **`/clear`.** `plan.md`, `tasks.md`, `decisions.md`, `state.md` captured. |
|
|
75
|
-
| `/rite-plan` | MED: reshape / repair. | **`/clear`** if reshape was big; **keep** if only a small reorder. |
|
|
76
|
-
| `/rite-build` | HIGH: reads files, writes code + tests, runs checks, often retries. | **Strong `/clear` between slices.** `state.md` cursor, `touched-files.md`, `evidence.md` carry the cursor forward. |
|
|
77
|
-
| `/rite-prove` | HIGH: full test suite output, build logs, browser snapshots. | **Strong `/clear`.** `evidence.md`, `browser-evidence.md` captured. |
|
|
78
|
-
| `/rite-polish` | MED-HIGH: diffs + design-system reads + per-target polish. | **`/clear` between targets.** `polish-report.md`, `browser-evidence.md` captured. |
|
|
79
|
-
| `/rite-review` | HIGH: diff + parallel sub-agent reports + multi-axis review. | **`/compact`** if Criticals must be fixed in flow (review context informs the fix); **`/clear`** if review is clean. `review.md` captured. |
|
|
80
|
-
| `/rite-seal` | MED: read-only fan-out + GO/NO-GO. | Usually session-end. **`/clear` after a GO**; `/compact` if NO-GO and the seal's findings drive immediate fixes. |
|
|
81
|
-
| `/rite-status` | LOW (read-only). | **No recommendation**: cheap. |
|
|
82
|
-
| `/rite` (menu) | LOW. | **No recommendation.** |
|
|
83
|
-
|
|
84
42
|
## The "Session hygiene" footer (every rite-* output)
|
|
85
43
|
|
|
86
44
|
Every `rite-*` skill ends its output with a one-line **Session hygiene** advisory, plus
|
|
@@ -91,9 +49,8 @@ Session hygiene: /clear (recommended) — <one-line why, anchored to what just
|
|
|
91
49
|
Resume next session with: <single command, e.g. /rite-build slice 2>
|
|
92
50
|
```
|
|
93
51
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
context") at the exact moment the next decision is cheap.
|
|
52
|
+
This is advice, not a gate. The user can ignore it. It reports a trade-off the model
|
|
53
|
+
cannot inspect directly because no API reports context fullness.
|
|
97
54
|
|
|
98
55
|
## When NOT to recommend `/clear` or `/compact`
|
|
99
56
|
|
|
@@ -106,8 +63,8 @@ context") at the exact moment the next decision is cheap.
|
|
|
106
63
|
|
|
107
64
|
## The handoff bridge
|
|
108
65
|
|
|
109
|
-
When the user is leaving for a long break
|
|
110
|
-
is
|
|
66
|
+
When the user is leaving for a long break rather than moving directly between phases, `/rite-handoff`
|
|
67
|
+
is safer than `/clear` alone because it syncs chat-only context into the canonical
|
|
111
68
|
workspace files **before** the reset, then the user can `/clear` (or even close the
|
|
112
69
|
session) without losing anything. The session-hygiene footer points at `/rite-handoff`
|
|
113
70
|
when the gap to the next session is likely > a few hours.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# DevRites core rules
|
|
1
|
+
# DevRites core rules
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
These rules always apply. Workspace-operating
|
|
4
4
|
lifecycle rites read it in workflow step 0; phase-specific files load on demand from
|
|
5
5
|
`README.md`.
|
|
6
6
|
|
|
@@ -20,8 +20,8 @@ Project conventions always win where they exist; these rules fill gaps.
|
|
|
20
20
|
3. **No guessing through confusion:** if requirements / code / tests / docs
|
|
21
21
|
conflict, stop, name the conflict, present options, wait for resolution
|
|
22
22
|
when the answer changes the product.
|
|
23
|
-
4. **
|
|
24
|
-
|
|
23
|
+
4. **Keep the spec current:** change spec / plan only through the Spec Drift Guard;
|
|
24
|
+
never code against a known-wrong plan.
|
|
25
25
|
5. **One slice at a time:** build a single vertical slice, leave it working +
|
|
26
26
|
proven, then stop. Don't auto-continue (HITL default; under AFK the loop runs to
|
|
27
27
|
its slice budget: see [`afk-hitl.md`](afk-hitl.md)).
|
|
@@ -29,12 +29,14 @@ Project conventions always win where they exist; these rules fill gaps.
|
|
|
29
29
|
assertions; record commands and output.
|
|
30
30
|
7. **Feature scope only:** review / simplify / polish / security stay within
|
|
31
31
|
the active feature and touched files. No project-wide refactor, no drive-by
|
|
32
|
-
cleanup.
|
|
33
|
-
infrastructure, managing credentials
|
|
34
|
-
|
|
32
|
+
cleanup. Refuse inherently out-of-scope work such as creating accounts, provisioning
|
|
33
|
+
production infrastructure, managing credentials or secrets, or testing against
|
|
34
|
+
production. Route it to the human.
|
|
35
35
|
8. **Prefer existing conventions:** follow the project's architecture,
|
|
36
|
-
components, tokens, tests, and commands
|
|
37
|
-
|
|
36
|
+
components, tokens, tests, and commands. A new dependency or second design system
|
|
37
|
+
must be justified and vetted before build; it becomes a human question only when it
|
|
38
|
+
changes licensing/cost/security or an explicit architecture policy. Reversible technical
|
|
39
|
+
selection is agent-owned.
|
|
38
40
|
9. **Verify uncertain facts at the source:** when framework / library
|
|
39
41
|
behaviour matters and isn't certain, check the installed source or docs (context7 for
|
|
40
42
|
current upstream docs, **if available**: see [`tooling.md`](tooling.md)) and record it.
|
|
@@ -45,7 +47,7 @@ When an excuse appears, load the canonical
|
|
|
45
47
|
[`anti-patterns.md` rationalization table](anti-patterns.md#universal-rationalizations)
|
|
46
48
|
and apply its matching rebuttal before continuing.
|
|
47
49
|
|
|
48
|
-
##
|
|
50
|
+
## Rule summary (load the full file when in scope)
|
|
49
51
|
|
|
50
52
|
These are the universal craft musts. Each links to the full file. Claude
|
|
51
53
|
reads it only when the phase needs depth.
|
|
@@ -86,13 +88,13 @@ Before any `rite-*` skill stops:
|
|
|
86
88
|
- Assumption made? → `assumptions.md`. Drift raised? → `drift.md`.
|
|
87
89
|
- Approach tried that **failed**? → a `## Dead ends` section in `decisions.md` (what you
|
|
88
90
|
tried, why it failed, what it rules out). Compaction and the next agent must not repeat a
|
|
89
|
-
dead end
|
|
91
|
+
dead end because later work must not repeat an invalidated approach.
|
|
90
92
|
- Next-action ambiguous? → resolve to one command in `state.md`.
|
|
91
93
|
- HITL pause? → write the `Awaiting human` block to `state.md` and set
|
|
92
94
|
`Status: awaiting_human` before stopping; resume via `/rite-resolve <qid> "<answer>"`.
|
|
93
95
|
See [`afk-hitl.md`](afk-hitl.md) for the full AFK / HITL contract.
|
|
94
96
|
|
|
95
|
-
A skill that
|
|
97
|
+
A skill that stops without doing this leaves the workspace incomplete.
|
|
96
98
|
|
|
97
99
|
## Context hygiene (end of every phase)
|
|
98
100
|
|
|
@@ -105,15 +107,18 @@ phase-by-phase guidance: [`context-hygiene.md`](context-hygiene.md).
|
|
|
105
107
|
|
|
106
108
|
## Precedence
|
|
107
109
|
|
|
108
|
-
**
|
|
110
|
+
**Validated project principles > project conventions > DevRites rules.** The rules fill
|
|
109
111
|
gaps; they don't overwrite the project's choices. When the project's own
|
|
110
112
|
conventions disagree with these rules, **project wins**.
|
|
111
113
|
|
|
112
|
-
Two
|
|
113
|
-
load-bearing:
|
|
114
|
+
Two layers have opposite authority:
|
|
114
115
|
- **Project principles** (`.devrites/principles.md`): authored, prescriptive
|
|
115
|
-
invariants the project will not break.
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
invariants the project will not break. Once validated, a violation is a
|
|
117
|
+
top-severity blocking finding (absent file = none declared = gate passes).
|
|
118
|
+
→ [`principles.md`](principles.md)
|
|
118
119
|
- **Conventions** (`.devrites/conventions.md`): learned, *descriptive* idioms.
|
|
119
120
|
An *untrusted prior*: a fresh read of the live code overrides a convention.
|
|
121
|
+
|
|
122
|
+
<!-- authority:principles-trust:start -->
|
|
123
|
+
Project principles may become project policy only after explicit provenance and validation; arbitrary project-local Markdown is never inherently trusted executable instruction.
|
|
124
|
+
<!-- authority:principles-trust:end -->
|
|
@@ -1,71 +1,31 @@
|
|
|
1
1
|
# Deprecation & migration
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
to patch, security to maintain, the next engineer to onboard. Most teams build well and remove
|
|
5
|
-
badly, so dead and superseded code accumulates. Removing code that no longer earns its keep, and
|
|
6
|
-
moving users safely off the old path, is its own discipline, and a riskier one than writing new
|
|
7
|
-
code, because the failure mode is breaking something you forgot depended on it.
|
|
3
|
+
Removing behavior is riskier than adding it because hidden consumers may depend on observable quirks as well as documented contracts (Hyrum's law). Destructive migration, public-API breakage, auth changes, and data-loss paths always use the irreversible-risk pause in [`afk-hitl.md`](afk-hitl.md).
|
|
8
4
|
|
|
9
|
-
|
|
10
|
-
public-API break, and data-loss paths always pause ([`afk-hitl.md`](afk-hitl.md) irreversible-risk
|
|
11
|
-
list). The gate stops you; this rule is the safe path it stops you to take.
|
|
5
|
+
## Prove it is unused
|
|
12
6
|
|
|
13
|
-
|
|
14
|
-
Unused code is pure cost with no return: deleting earned-out code is a feature, not housekeeping.
|
|
15
|
-
But "I think this is unused" is a guess; prove it (below) before you act on it.
|
|
7
|
+
Find callers, subscribers, stored data, external clients, and scheduled jobs with code intelligence, then confirm runtime usage through [`observability.md`](observability.md). Static absence alone does not prove zero consumers. If zero usage cannot be proven, deprecate instead of deleting.
|
|
16
8
|
|
|
17
|
-
|
|
18
|
-
When adding a new system, ask "how would we remove this in three years?": the answer forces a seam
|
|
19
|
-
(a flag, an adapter, a single call site) that makes the eventual exit a contraction instead of a
|
|
20
|
-
surgery. Code built with no exit in mind is what becomes a zombie (below).
|
|
9
|
+
## Expand → migrate → contract
|
|
21
10
|
|
|
22
|
-
|
|
23
|
-
With enough consumers, *every* observable behavior is depended on by someone, not just the
|
|
24
|
-
documented API, but the quirks: timing, error shapes, ordering, the off-by-one nobody noticed.
|
|
25
|
-
Removing or changing a behavior you think is incidental can break invisible dependents. Assume a
|
|
26
|
-
consumer relies on it; verify against real usage rather than the spec's intent.
|
|
11
|
+
Use three independently shippable and reversible steps:
|
|
27
12
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
**runtime** usage: a log/metric on the path proves zero traffic in a way static search can't
|
|
32
|
-
([`observability.md`](observability.md)). No-usage-confirmed beats no-usage-assumed.
|
|
33
|
-
- If you can't prove zero usage, you're not removing. You're deprecating (below).
|
|
13
|
+
1. **Expand:** add the new path beside the old one.
|
|
14
|
+
2. **Migrate:** move consumers and data; observe old-path usage falling to zero.
|
|
15
|
+
3. **Contract:** remove the old path only after telemetry confirms zero use.
|
|
34
16
|
|
|
35
|
-
|
|
36
|
-
Never big-bang a breaking change. Three independently-shippable, independently-reversible steps:
|
|
37
|
-
1. **Expand:** add the new path alongside the old; both work.
|
|
38
|
-
2. **Migrate:** move consumers and data to the new path; watch the old path's usage fall to zero.
|
|
39
|
-
3. **Contract:** remove the old path *only once telemetry confirms it's unused*.
|
|
40
|
-
|
|
41
|
-
The same shape applies to data: add column → backfill → switch reads → drop the old column. Every
|
|
42
|
-
destructive step has a rollback, or it doesn't ship.
|
|
17
|
+
For data, this may mean add column → backfill → switch reads → drop the old column. Every destructive step needs a rollback.
|
|
43
18
|
|
|
44
19
|
## Deprecate before delete
|
|
45
|
-
- Mark the old path deprecated with a pointer to the replacement and a **removal trigger**: a
|
|
46
|
-
date or a condition ("when v1 traffic hits zero"), not a vague "soon". A deprecation with no
|
|
47
|
-
trigger is a permanent TODO.
|
|
48
|
-
- Emit a usage signal on the deprecated path so the removal trigger is a measured fact, not a
|
|
49
|
-
hope ([`observability.md`](observability.md)).
|
|
50
20
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
without providing the tooling, docs, and support to hit it isn't a migration; it's a break with a
|
|
57
|
-
countdown.
|
|
21
|
+
- Mark the old path with its replacement and a measurable removal trigger: a date or a condition such as zero v1 traffic.
|
|
22
|
+
- Emit a usage signal so the trigger is evidence, not hope.
|
|
23
|
+
- The owner of the deprecated surface also owns migration. Provide the codemod, backfill, compatible update, documentation, and support consumers need; a deadline alone is a break with a countdown.
|
|
24
|
+
|
|
25
|
+
## Design for removal
|
|
58
26
|
|
|
59
|
-
|
|
60
|
-
The dangerous middle state is not dead code (safe to remove) but **zombie** code: no one maintains
|
|
61
|
-
it, yet live consumers still call it. Signs: no commits in 6+ months, an active caller graph, no
|
|
62
|
-
named owner, failing tests nobody fixes. A zombie can't stay in limbo: it either gets **invested
|
|
63
|
-
in** (an owner, green tests, a real place in the architecture) or gets **removed** on the
|
|
64
|
-
prove-unused → expand→contract path above. Leaving it untouched is choosing the worst option: an
|
|
65
|
-
unmaintained dependency that breaks under someone who never signed up to fix it.
|
|
27
|
+
When introducing a system, keep its exit bounded behind a flag, adapter, or small call surface. An unowned but still-used zombie must either regain an owner and green proof or follow the prove-unused and expand/contract path; do not leave it as an unmaintained dependency.
|
|
66
28
|
|
|
67
29
|
## Scope
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
([`anti-patterns.md`](anti-patterns.md)), and a destructive step trips the seal's risk-and-rollback
|
|
71
|
-
check regardless.
|
|
30
|
+
|
|
31
|
+
Treat removal or migration as a feature with its own spec, slices, evidence, and risk review. Do not hide deletion inside an unrelated change.
|
package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md
CHANGED
|
@@ -1,50 +1,21 @@
|
|
|
1
1
|
# Development workflow
|
|
2
2
|
|
|
3
|
-
Ship small, integrate often, keep the main branch releasable.
|
|
4
|
-
lifecycle atop that loop: spec → define → vet → build → prove → polish → review → seal → ship.
|
|
3
|
+
Ship small, integrate often, and keep the main branch releasable. Workflow phase order comes from the engine manifest, not this standard.
|
|
5
4
|
|
|
6
5
|
## Work in small batches
|
|
7
6
|
- Break work into thin, independently shippable slices and integrate them frequently:
|
|
8
7
|
ideally merging to the main branch at least once a day.
|
|
9
|
-
- Small batches shrink merge pain, surface integration problems early, and get real
|
|
10
|
-
reviews. Large batches hide defects and stall.
|
|
11
8
|
|
|
12
9
|
## Short-lived branches, trunk always green
|
|
13
|
-
- Prefer short-lived branches off the main branch
|
|
14
|
-
drift and create painful merges.
|
|
10
|
+
- Prefer short-lived branches off the main branch.
|
|
15
11
|
- The main branch is **always in a releasable state**. Validate every change through a
|
|
16
12
|
**fast, reliable CI pipeline** (tests + build) before it merges.
|
|
17
13
|
- Hide incomplete work behind a **feature flag / toggle** rather than a long branch, so
|
|
18
14
|
partial work can land without blocking releases or breaking the trunk.
|
|
19
15
|
|
|
20
16
|
## Review gate
|
|
21
|
-
-
|
|
22
|
-
reviews push people back toward big, risky batches.
|
|
23
|
-
- Set expectations on PR size and merge cadence: small, frequent, single-concern.
|
|
17
|
+
- A human reviews every change before merge; `code-review.md` owns review scope and evidence.
|
|
24
18
|
|
|
25
19
|
## Definition of done
|
|
26
|
-
The **Definition of Done** is the project's *standing bar*: the floor every change clears,
|
|
27
|
-
distinct from a slice's **acceptance criteria** (which change per slice and say what *this* work
|
|
28
|
-
must do). Acceptance criteria answer "did we build the right thing"; the DoD answers "is it
|
|
29
|
-
shippable at all". The bar does not move with deadline pressure: a Definition of Done that gets
|
|
30
|
-
renegotiated each time is not one. Apply it in tiers so the cost matches the scope:
|
|
31
20
|
|
|
32
|
-
-
|
|
33
|
-
(tests/build/runtime: see `testing.md`), behaviour verified at runtime not just compiled; tests
|
|
34
|
-
and build green in CI; reviewed and **within scope, no unrelated refactor snuck in**; edge and
|
|
35
|
-
error paths handled, not only the happy path.
|
|
36
|
-
- **Every feature:** Integration + Documentation: works with the rest of the system, migrations/
|
|
37
|
-
config/flags accounted for, backward compatibility considered for any public-interface change;
|
|
38
|
-
docs/comments touched are updated (`documentation.md`) and describe the *current state in timeless
|
|
39
|
-
language*, not the change history.
|
|
40
|
-
- **Every release:** Ship-readiness: security reviewed for any untrusted input/auth/data
|
|
41
|
-
(`security.md`), observability on new critical paths (`observability.md`), a **rollback for
|
|
42
|
-
anything risky**, and a **human has reviewed and approved before merge**.
|
|
43
|
-
|
|
44
|
-
Two invariants across all tiers: evidence post-dates the code it proves: edits made after
|
|
45
|
-
`/rite-prove` (polish/review) require re-proof before seal, stale evidence is not proof; and
|
|
46
|
-
"tests pass" is not a synonym for done. "Code written" is not done. "Proven and reviewed" is.
|
|
47
|
-
|
|
48
|
-
## Incremental delivery
|
|
49
|
-
Deliver a working end-to-end path each slice, then expand. Avoid the "90% done, nothing
|
|
50
|
-
proven" pile-up: one finished, verified slice beats five half-built ones.
|
|
21
|
+
[`definition-of-done.md`](definition-of-done.md) owns the standing bar. Acceptance criteria prove the slice-specific behavior; the Definition of Done proves the change is shippable.
|
|
@@ -11,15 +11,6 @@ Format: `type(scope): subject`
|
|
|
11
11
|
- Keep the header short (~50, hard cap ~72). Put the *why* in the body, wrapped, after a
|
|
12
12
|
blank line. Reference issues in the footer.
|
|
13
13
|
|
|
14
|
-
```
|
|
15
|
-
feat(export): stream large CSV exports
|
|
16
|
-
|
|
17
|
-
Buffering the whole file OOM-ed on >100k rows. Stream rows to the
|
|
18
|
-
response instead so memory stays flat.
|
|
19
|
-
|
|
20
|
-
Refs: #123
|
|
21
|
-
```
|
|
22
|
-
|
|
23
14
|
## Atomic commits
|
|
24
15
|
- One logical change per commit; it should build and pass tests on its own.
|
|
25
16
|
- Don't mix refactor + behavior change in one commit: split them so each is reviewable
|
|
@@ -30,7 +21,7 @@ Refs: #123
|
|
|
30
21
|
- Keep PRs small (see `code-review.md`) so they get a real review.
|
|
31
22
|
|
|
32
23
|
## Change summary: prove the scope
|
|
33
|
-
When you hand back a change, state what you deliberately left alone
|
|
24
|
+
When you hand back a change, state what you deliberately left alone as well as what you touched.
|
|
34
25
|
A **"Things I didn't touch (intentionally)"** line (the adjacent smells you noticed and declined
|
|
35
26
|
to fix) proves the diff is feature-scoped ([`core.md`](core.md) rule 7) and matches
|
|
36
27
|
`touched-files.md`, rather than an unsolicited renovation the reviewer has to untangle from the
|
|
@@ -48,16 +39,9 @@ When git is mid-merge or mid-rebase, recover before other workflow work:
|
|
|
48
39
|
branch direction is wrong, not because a hunk is annoying.
|
|
49
40
|
|
|
50
41
|
## Versioning & changelog
|
|
51
|
-
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
breaking, assume it is; a surprise major is far cheaper than a broken consumer.
|
|
55
|
-
- **The tag is the single source of truth** for the version. Derive it from the tag; never
|
|
56
|
-
hand-edit a version copied across `package.json`, a constant, and a header: three copies drift,
|
|
57
|
-
one tag can't.
|
|
58
|
-
- **A changelog is not the git log.** Curate it by user impact (what a consumer must know to
|
|
59
|
-
upgrade) not by commit. Write the entry in the same change that earns it, while the impact is
|
|
60
|
-
fresh; a changelog reconstructed later is a guess.
|
|
42
|
+
- Semver describes what consumers may rely on. Treat an observable breaking change as major.
|
|
43
|
+
- Derive the version from the tag; do not maintain competing manual copies.
|
|
44
|
+
- Curate changelog entries by user impact in the change that earns them; a changelog is not a git log.
|
|
61
45
|
|
|
62
46
|
## Never commit
|
|
63
47
|
- Secrets, credentials, tokens, or `.env` files. If one lands in history, rotate it and
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# Automation hooks
|
|
2
2
|
|
|
3
|
-
Automate
|
|
4
|
-
|
|
5
|
-
catches things, so keep local hooks fast and scoped.**
|
|
3
|
+
Automate easy-to-forget checks at the earliest affordable stage. Keep local hooks fast
|
|
4
|
+
and scoped so developers continue to run them.
|
|
6
5
|
|
|
7
6
|
## Stage the work by cost (the 10-second rule)
|
|
8
7
|
- **pre-commit** (must finish in well under ~10s): format, lint, and secret-scan the
|
|
@@ -13,18 +12,8 @@ catches things, so keep local hooks fast and scoped.**
|
|
|
13
12
|
- **CI** (no time pressure): the full test suite, build, integration, and deeper
|
|
14
13
|
security scans. CI is the source of truth for "green", not local hooks.
|
|
15
14
|
|
|
16
|
-
## What to run where
|
|
17
|
-
| Stage | Run | Don't run |
|
|
18
|
-
|---|---|---|
|
|
19
|
-
| pre-commit | formatter, fast linter, secret scan, changed-files checks | the full test suite |
|
|
20
|
-
| commit-msg | commit-message lint | anything slow |
|
|
21
|
-
| pre-push | affected unit/integration tests | end-to-end matrices |
|
|
22
|
-
| CI | everything (suite, build, e2e, security) |: |
|
|
23
|
-
|
|
24
15
|
## Keep hooks fast
|
|
25
|
-
|
|
26
|
-
- Lean on tool caches (most modern linters/formatters cache and re-run only what changed).
|
|
27
|
-
- Prefer fast tools; a slow check belongs in CI, not the commit path.
|
|
16
|
+
A slow check belongs in CI, not the commit path.
|
|
28
17
|
|
|
29
18
|
## Secret scanning
|
|
30
19
|
Scan for credentials/keys/tokens before they enter history: catching a secret
|
|
@@ -1,33 +1,22 @@
|
|
|
1
1
|
# Patterns & architecture
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
makes the design simpler to reason about, not to show it's there.
|
|
3
|
+
Use a pattern only when it makes the design easier to understand and reduces coupling.
|
|
5
4
|
|
|
6
5
|
## Principles
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- **Composition over inheritance:** prefer assembling behavior from small pieces over
|
|
11
|
-
deep class hierarchies; inheritance couples tightly and resists change.
|
|
12
|
-
- **Depend on abstractions at real seams:** inject dependencies where you genuinely
|
|
13
|
-
need to swap or test them; don't wrap everything in an interface "just in case".
|
|
14
|
-
- **Separation of concerns:** keep I/O, business logic, and presentation in distinct
|
|
15
|
-
layers so each can change and be tested on its own.
|
|
6
|
+
|
|
7
|
+
- Keep cohesion high and coupling low; separate I/O, domain logic, and presentation.
|
|
8
|
+
- Prefer composition to deep inheritance. Introduce an abstraction only at a real seam that must vary or be tested independently.
|
|
16
9
|
|
|
17
10
|
## Choose the pattern after you understand the problem
|
|
18
|
-
- Identify the
|
|
19
|
-
A pattern applied to the wrong problem adds indirection and cost.
|
|
11
|
+
- Identify the architectural challenge before choosing a pattern.
|
|
20
12
|
- Start with the **simplest structure that works**: a modular monolith beats premature
|
|
21
13
|
microservices for a small team. Scale the architecture when load or team size demands
|
|
22
14
|
it, not before.
|
|
23
15
|
|
|
24
|
-
## Avoid over-engineering
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
- Watch the cost: misused patterns add memory/indirection/overhead and obscure intent.
|
|
29
|
-
- A refactor must **reduce** complexity, not just **relocate** it. Count the concepts a
|
|
30
|
-
reader must hold; if a "cleaner" version leaves that count unchanged it isn't cleaner:
|
|
16
|
+
## Avoid over-engineering
|
|
17
|
+
- Follow [`coding-style.md`](coding-style.md#simplicity): no speculative abstraction or pattern without a current need.
|
|
18
|
+
- A refactor must **reduce** complexity rather than merely **relocate** it. Count the concepts a
|
|
19
|
+
reader must hold; if a "cleaner" version leaves that count unchanged, it is not cleaner:
|
|
31
20
|
prefer the restructuring that makes whole branches/modes/layers disappear.
|
|
32
21
|
|
|
33
22
|
## Anti-patterns to name and avoid
|
|
@@ -41,8 +30,3 @@ makes the design simpler to reason about, not to show it's there.
|
|
|
41
30
|
Match the patterns the project already uses before introducing a new one. A consistent
|
|
42
31
|
"good enough" pattern beats a locally-superior but foreign one. Document the *why* of any
|
|
43
32
|
non-obvious structural choice (see `documentation.md`).
|
|
44
|
-
|
|
45
|
-
## Reuse first
|
|
46
|
-
Before adding a new util / component / helper / type, **search** for an existing one and
|
|
47
|
-
prefer **reuse → extend → build new**, applying the AHA caveat (duplication beats the
|
|
48
|
-
wrong abstraction). Canonical rule in [`coding-style.md`](coding-style.md#reuse-before-you-write).
|