devrites 2.6.0 → 3.0.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 +77 -0
- package/README.md +85 -50
- package/SECURITY.md +65 -39
- package/bin/devrites.mjs +135 -51
- package/docs/agents/domain.md +58 -0
- package/docs/agents/issue-driven-rites.md +11 -0
- package/docs/agents/issue-tracker.md +29 -0
- package/docs/agents/triage-labels.md +15 -0
- package/docs/architecture.md +60 -35
- package/docs/capability-surface-selection.md +18 -0
- package/docs/cli.md +53 -0
- package/docs/command-map.md +59 -22
- package/docs/engine/agent-contract.md +92 -0
- package/docs/engine/commands.md +323 -0
- package/docs/engine/state-schema.md +134 -0
- package/docs/engine/workspace-schema.md +150 -0
- package/docs/extensions.md +178 -0
- package/docs/flow.md +19 -16
- package/docs/harness-compliance.md +45 -0
- package/docs/orchestration.md +6 -4
- package/docs/porting-to-a-new-harness.md +27 -0
- package/docs/quick-reference.md +22 -0
- package/docs/release.md +3 -3
- package/docs/skills.md +42 -48
- package/docs/usage.md +21 -8
- package/engine/.gosec.json +5 -0
- package/engine/Makefile +64 -0
- package/engine/commands.go +195 -0
- package/engine/go.mod +5 -0
- package/engine/harnessmatrix.go +60 -0
- package/engine/harnessmatrix_test.go +59 -0
- package/engine/hookpolicy.go +114 -0
- package/engine/hookpolicy_test.go +64 -0
- package/engine/hooks.go +336 -0
- package/engine/hooks_events_test.go +106 -0
- package/engine/hooks_workspace.go +603 -0
- package/engine/internal/devritespaths/paths.go +76 -0
- package/engine/internal/doctor/doctor.go +178 -0
- package/engine/internal/doctor/doctor_test.go +150 -0
- package/engine/internal/fsutil/copy.go +101 -0
- package/engine/internal/fsutil/replace_other.go +7 -0
- package/engine/internal/fsutil/replace_windows.go +31 -0
- package/engine/internal/gate/gate.go +243 -0
- package/engine/internal/gate/gate_test.go +145 -0
- package/engine/internal/harness/compliance.go +102 -0
- package/engine/internal/harness/harness.go +304 -0
- package/engine/internal/harness/harness_test.go +104 -0
- package/engine/internal/hostpack/hostpack.go +259 -0
- package/engine/internal/hostpack/hostpack_test.go +111 -0
- package/engine/internal/hostpack/templates/alias_skill.md.tmpl +11 -0
- package/engine/internal/hostpack/templates/devrites_readme.md.tmpl +14 -0
- package/engine/internal/install/install.go +1560 -0
- package/engine/internal/install/install_test.go +564 -0
- package/engine/internal/iohooks/detach_other.go +11 -0
- package/engine/internal/iohooks/detach_unix.go +11 -0
- package/engine/internal/iohooks/iohooks.go +546 -0
- package/engine/internal/iohooks/iohooks_test.go +130 -0
- package/engine/internal/lib/adoption.go +634 -0
- package/engine/internal/lib/adoption_test.go +91 -0
- package/engine/internal/lib/analyze.go +225 -0
- package/engine/internal/lib/archivesearch.go +93 -0
- package/engine/internal/lib/archivesearch_test.go +110 -0
- package/engine/internal/lib/budget.go +172 -0
- package/engine/internal/lib/buildreadiness.go +88 -0
- package/engine/internal/lib/checkacceptance.go +176 -0
- package/engine/internal/lib/closeout.go +69 -0
- package/engine/internal/lib/command_other.go +7 -0
- package/engine/internal/lib/command_unix.go +24 -0
- package/engine/internal/lib/context.go +236 -0
- package/engine/internal/lib/conventions.go +449 -0
- package/engine/internal/lib/coverage.go +147 -0
- package/engine/internal/lib/doubtcoverage.go +88 -0
- package/engine/internal/lib/evidencefresh.go +85 -0
- package/engine/internal/lib/extensions.go +619 -0
- package/engine/internal/lib/extensions_test.go +305 -0
- package/engine/internal/lib/footprint.go +239 -0
- package/engine/internal/lib/jsonout.go +115 -0
- package/engine/internal/lib/jsonout_test.go +57 -0
- package/engine/internal/lib/lanes.go +106 -0
- package/engine/internal/lib/learnings.go +391 -0
- package/engine/internal/lib/learnings_inject_test.go +77 -0
- package/engine/internal/lib/learnings_remediation_test.go +24 -0
- package/engine/internal/lib/ledger.go +298 -0
- package/engine/internal/lib/ledger_test.go +162 -0
- package/engine/internal/lib/mutationgate.go +85 -0
- package/engine/internal/lib/overrides.go +164 -0
- package/engine/internal/lib/overrides_test.go +112 -0
- package/engine/internal/lib/packageexistence.go +175 -0
- package/engine/internal/lib/preamble.go +159 -0
- package/engine/internal/lib/progress.go +168 -0
- package/engine/internal/lib/reconcile.go +173 -0
- package/engine/internal/lib/reconcile_test.go +197 -0
- package/engine/internal/lib/resolve.go +376 -0
- package/engine/internal/lib/resolve_remediation_test.go +49 -0
- package/engine/internal/lib/reviewers.go +143 -0
- package/engine/internal/lib/reviewers_test.go +45 -0
- package/engine/internal/lib/reviewerstats.go +199 -0
- package/engine/internal/lib/reviewerstats_test.go +104 -0
- package/engine/internal/lib/reviewintegrity.go +143 -0
- package/engine/internal/lib/reviewintegrity_test.go +103 -0
- package/engine/internal/lib/runbook.go +292 -0
- package/engine/internal/lib/runbook_context_test.go +119 -0
- package/engine/internal/lib/session.go +328 -0
- package/engine/internal/lib/session_test.go +110 -0
- package/engine/internal/lib/specparse.go +125 -0
- package/engine/internal/lib/specskeleton.go +79 -0
- package/engine/internal/lib/specvalidate.go +391 -0
- package/engine/internal/lib/specvalidate_test.go +185 -0
- package/engine/internal/lib/stuck.go +206 -0
- package/engine/internal/lib/templates/conventions_drift.tmpl +6 -0
- package/engine/internal/lib/templates/conventions_ledger_header.md +6 -0
- package/engine/internal/lib/templates/conventions_orient_header.txt +1 -0
- package/engine/internal/lib/testintegrity.go +203 -0
- package/engine/internal/lib/testintegrity_test.go +72 -0
- package/engine/internal/lib/tickafk.go +99 -0
- package/engine/internal/lib/util.go +68 -0
- package/engine/internal/migrate/migrate.go +213 -0
- package/engine/internal/migrate/migrate_test.go +105 -0
- package/engine/internal/orient/firstrun.go +50 -0
- package/engine/internal/orient/firstrun_test.go +72 -0
- package/engine/internal/orient/orient.go +69 -0
- package/engine/internal/orient/orient_test.go +25 -0
- package/engine/internal/profile/profile.go +270 -0
- package/engine/internal/state/concurrency_test.go +184 -0
- package/engine/internal/state/feature.go +309 -0
- package/engine/internal/state/lock_other.go +24 -0
- package/engine/internal/state/lock_unix.go +35 -0
- package/engine/internal/state/lock_windows.go +56 -0
- package/engine/internal/state/schema.go +102 -0
- package/engine/internal/state/snapshot.go +384 -0
- package/engine/internal/state/state_test.go +260 -0
- package/engine/internal/state/status.go +90 -0
- package/engine/internal/state/write.go +59 -0
- package/engine/internal/testutil/testutil.go +66 -0
- package/engine/internal/version/version.go +57 -0
- package/engine/internal/workflow/commands.go +64 -0
- package/engine/main.go +530 -0
- package/engine/profile_test.go +76 -0
- package/engine/subagent_orient_context.txt +6 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/auth-tokens/decisions.md +4 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/auth-tokens/feature.md +8 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/auth-tokens/plan.md +5 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/auth-tokens/spec.md +6 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/auth-tokens/status.md +4 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/auth-tokens/tasks.md +1 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/search-ranking/feature.md +8 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/search-ranking/spec.md +6 -0
- package/engine/testdata/golden/TestParityA1Guard/devrites-edit-allowed.golden +1 -0
- package/engine/testdata/golden/TestParityA1Guard/inline-fallback-silent.golden +1 -0
- package/engine/testdata/golden/TestParityA1Guard/no-window-silent.golden +1 -0
- package/engine/testdata/golden/TestParityA1Guard/non-edit-tool.golden +1 -0
- package/engine/testdata/golden/TestParityA1Guard/observe-mode-silent.golden +1 -0
- package/engine/testdata/golden/TestParityA1Guard/source-edit-enforce-denies.golden +2 -0
- package/engine/testdata/golden/TestParityA1Guard/subagent-allowed.golden +1 -0
- package/engine/testdata/golden/TestParityAnalyze/noactive.golden +1 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=covered.golden +15 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=dangling.golden +16 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=ghost.golden +1 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=noac.golden +15 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=order.golden +17 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=orphan.golden +16 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=uncovered.golden +16 -0
- package/engine/testdata/golden/TestParityBudget/default-active.golden +4 -0
- package/engine/testdata/golden/TestParityBudget/extra-md.golden +5 -0
- package/engine/testdata/golden/TestParityBudget/no-active.golden +1 -0
- package/engine/testdata/golden/TestParityBudget/no-feature.golden +1 -0
- package/engine/testdata/golden/TestParityBudget/over-advisory.golden +6 -0
- package/engine/testdata/golden/TestParityBudget/over-strict.golden +6 -0
- package/engine/testdata/golden/TestParityBudget/within.golden +6 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=approved.golden +2 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=approvenone.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=await.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=blocked.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=emptystatus.golden +2 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=ghost.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=noapprove.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=trailhash.golden +2 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=trailpipe.golden +2 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=blank-section.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=empty.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=flat-dropped.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=flat-ok.golden +2 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=flat-unchecked.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=id-gap.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=id-ok.golden +2 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=no-seal.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=no-section.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=nonexistent.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance.golden +1 -0
- package/engine/testdata/golden/TestParityCloseOut/active_pointed_elsewhere.golden +2 -0
- package/engine/testdata/golden/TestParityCloseOut/active_slug_cleared.golden +2 -0
- package/engine/testdata/golden/TestParityCloseOut/archive_clobber.golden +1 -0
- package/engine/testdata/golden/TestParityCloseOut/missing_slug.golden +1 -0
- package/engine/testdata/golden/TestParityCloseOut/missing_workspace.golden +1 -0
- package/engine/testdata/golden/TestParityCoverage/arg=flat.golden +7 -0
- package/engine/testdata/golden/TestParityCoverage/arg=full.golden +10 -0
- package/engine/testdata/golden/TestParityCoverage/arg=nonexistent.golden +1 -0
- package/engine/testdata/golden/TestParityCoverage/arg=nospec.golden +1 -0
- package/engine/testdata/golden/TestParityCoverage/arg=speconly.golden +9 -0
- package/engine/testdata/golden/TestParityCoverage.golden +1 -0
- package/engine/testdata/golden/TestParityCursor/bare.golden +3 -0
- package/engine/testdata/golden/TestParityCursor/full-afk.golden +6 -0
- package/engine/testdata/golden/TestParityCursor/full-hitl.golden +5 -0
- package/engine/testdata/golden/TestParityCursor/no-active.golden +1 -0
- package/engine/testdata/golden/TestParityCursor/red.golden +5 -0
- package/engine/testdata/golden/TestParityCursor/zerogates.golden +5 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=doubted.golden +2 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=ghost.golden +2 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=inline.golden +3 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=missing-inline.golden +3 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=missing.golden +3 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=nodoubt.golden +4 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=nolog.golden +2 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=nowright.golden +2 -0
- package/engine/testdata/golden/TestParityDoubtCoverage.golden +1 -0
- package/engine/testdata/golden/TestParityLearnings/add.golden +2 -0
- package/engine/testdata/golden/TestParityLearnings/list.golden +5 -0
- package/engine/testdata/golden/TestParityLearnings/mine-no-archive.golden +2 -0
- package/engine/testdata/golden/TestParityLearnings/mine.golden +5 -0
- package/engine/testdata/golden/TestParityLearnings/nudge.golden +2 -0
- package/engine/testdata/golden/TestParityLearnings/unknown.golden +1 -0
- package/engine/testdata/golden/TestParityMutationGate/active-slug.golden +3 -0
- package/engine/testdata/golden/TestParityMutationGate/explicit-slug.golden +3 -0
- package/engine/testdata/golden/TestParityMutationGate/ghost.golden +1 -0
- package/engine/testdata/golden/TestParityOrientSilentPath.golden +1 -0
- package/engine/testdata/golden/TestParityPackageExistence/declared.golden +2 -0
- package/engine/testdata/golden/TestParityPackageExistence/default-import-subpath.golden +2 -0
- package/engine/testdata/golden/TestParityPackageExistence/ghost-workspace.golden +1 -0
- package/engine/testdata/golden/TestParityPackageExistence/no-manifest.golden +1 -0
- package/engine/testdata/golden/TestParityPackageExistence/not-git.golden +1 -0
- package/engine/testdata/golden/TestParityPackageExistence/undeclared.golden +1 -0
- package/engine/testdata/golden/TestParityPreamble/afk/a.golden +14 -0
- package/engine/testdata/golden/TestParityPreamble/hitl/active.golden +18 -0
- package/engine/testdata/golden/TestParityPreamble/hitl/bare.golden +10 -0
- package/engine/testdata/golden/TestParityPreamble/hitl/full.golden +18 -0
- package/engine/testdata/golden/TestParityPreamble/hitl/ghost.golden +2 -0
- package/engine/testdata/golden/TestParityPreamble/hitl/nonl.golden +11 -0
- package/engine/testdata/golden/TestParityPreamble/hitl/openend.golden +13 -0
- package/engine/testdata/golden/TestParityProgress/arg=allbuilt.golden +4 -0
- package/engine/testdata/golden/TestParityProgress/arg=done.golden +3 -0
- package/engine/testdata/golden/TestParityProgress/arg=ghost.golden +1 -0
- package/engine/testdata/golden/TestParityProgress/arg=mid.golden +4 -0
- package/engine/testdata/golden/TestParityProgress/arg=nophase.golden +3 -0
- package/engine/testdata/golden/TestParityProgress/arg=noslice.golden +3 -0
- package/engine/testdata/golden/TestParityProgress/arg=plan.golden +4 -0
- package/engine/testdata/golden/TestParityProgress/arg=seal.golden +3 -0
- package/engine/testdata/golden/TestParityReconcile/bad-mode.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/check-clean/snapshot.golden +2 -0
- package/engine/testdata/golden/TestParityReconcile/check-clean.golden +2 -0
- package/engine/testdata/golden/TestParityReconcile/check-no-base.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/check-no-claimed/snapshot.golden +2 -0
- package/engine/testdata/golden/TestParityReconcile/check-no-claimed.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/check-violation/snapshot.golden +2 -0
- package/engine/testdata/golden/TestParityReconcile/check-violation.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/inline-fallback/snapshot.golden +2 -0
- package/engine/testdata/golden/TestParityReconcile/inline-fallback.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/not-git.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/snapshot/snapshot.golden +2 -0
- package/engine/testdata/golden/TestParityReconcile/snapshot.golden +2 -0
- package/engine/testdata/golden/TestParityRedwatch/fail-writes-red.golden +2 -0
- package/engine/testdata/golden/TestParityRedwatch/non-bash-tool.golden +1 -0
- package/engine/testdata/golden/TestParityRedwatch/non-test-command.golden +1 -0
- package/engine/testdata/golden/TestParityRedwatch/pass-clears-red.golden +1 -0
- package/engine/testdata/golden/TestParityResolve/answer/questions.md.golden +9 -0
- package/engine/testdata/golden/TestParityResolve/answer/state.md.golden +6 -0
- package/engine/testdata/golden/TestParityResolve/answer.golden +4 -0
- package/engine/testdata/golden/TestParityResolve/batch/questions.md.golden +9 -0
- package/engine/testdata/golden/TestParityResolve/batch-unterminated/questions.md.golden +9 -0
- package/engine/testdata/golden/TestParityResolve/batch-unterminated.golden +2 -0
- package/engine/testdata/golden/TestParityResolve/batch.golden +3 -0
- package/engine/testdata/golden/TestParityResolve/drop/questions.md.golden +9 -0
- package/engine/testdata/golden/TestParityResolve/drop/state.md.golden +8 -0
- package/engine/testdata/golden/TestParityResolve/drop.golden +4 -0
- package/engine/testdata/golden/TestParityResolve/missing-answer.golden +1 -0
- package/engine/testdata/golden/TestParityResolve/next-qid.golden +2 -0
- package/engine/testdata/golden/TestParityResolve/no-workspace.golden +1 -0
- package/engine/testdata/golden/TestParityResolve/not-found.golden +1 -0
- package/engine/testdata/golden/TestParityResolve/not-open.golden +1 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/agent-required-devrites-agent-denies.golden +2 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/agent-required-non-devrites-allows.golden +1 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/agent-required-subagent-type-only-allows.golden +1 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/enforce-deny-git-commit.golden +2 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/enforce-deny-mutating.golden +2 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/non-bash-tool.golden +1 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/non-tool-input.golden +1 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/observe-mutating-silent.golden +1 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/safe-bash-command.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=dup.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=empty.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=flat.golden +2 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=nonexistent.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=noscenario.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=noshall.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=nothen.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=valid/spec.md.golden +2 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=valid.golden +2 -0
- package/engine/testdata/golden/TestParitySpecValidate.golden +1 -0
- package/engine/testdata/golden/TestParityStatusline/full-afk.golden +2 -0
- package/engine/testdata/golden/TestParityStatusline/full-hitl.golden +2 -0
- package/engine/testdata/golden/TestParityStatusline/no-active.golden +1 -0
- package/engine/testdata/golden/TestParityStatusline/nophase.golden +2 -0
- package/engine/testdata/golden/TestParityStatusline/red.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/bad-cmd.golden +1 -0
- package/engine/testdata/golden/TestParityStuckCheck/custom-window-2.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/dominant.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/few.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/ghost.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/identical.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/no-cmd.golden +1 -0
- package/engine/testdata/golden/TestParityStuckCheck/no-slug.golden +1 -0
- package/engine/testdata/golden/TestParityStuckCheck/nolog.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/pingpong.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/varied.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/window-04-identical.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/window-2.5-varied4.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/window-4x-varied4.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/window-leadspace-varied4.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/window-plus4-identical.golden +2 -0
- package/engine/testdata/golden/TestParitySubagentOrient/devrites-agent-subagent-type-key.golden +2 -0
- package/engine/testdata/golden/TestParitySubagentOrient/devrites-agent.golden +2 -0
- package/engine/testdata/golden/TestParitySubagentOrient/garbage-input.golden +1 -0
- package/engine/testdata/golden/TestParitySubagentOrient/non-devrites-agent.golden +1 -0
- package/engine/testdata/golden/TestParityTestIntegrity/assertion-dropped.golden +1 -0
- package/engine/testdata/golden/TestParityTestIntegrity/clean.golden +2 -0
- package/engine/testdata/golden/TestParityTestIntegrity/deleted.golden +1 -0
- package/engine/testdata/golden/TestParityTestIntegrity/ghost-workspace.golden +1 -0
- package/engine/testdata/golden/TestParityTestIntegrity/not-git.golden +1 -0
- package/engine/testdata/golden/TestParityTestIntegrity/skip-added.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/budget1/state.md.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/budget1.golden +2 -0
- package/engine/testdata/golden/TestParityTickAfk/budget3/state.md.golden +5 -0
- package/engine/testdata/golden/TestParityTickAfk/budget3.golden +2 -0
- package/engine/testdata/golden/TestParityTickAfk/bulletPipe/state.md.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/bulletPipe.golden +2 -0
- package/engine/testdata/golden/TestParityTickAfk/missingField/state.md.golden +3 -0
- package/engine/testdata/golden/TestParityTickAfk/missingField.golden +2 -0
- package/engine/testdata/golden/TestParityTickAfk/missingFile.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/nonNumeric/state.md.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/nonNumeric.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/none/state.md.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/none.golden +2 -0
- package/engine/testdata/golden/TestParityWrightScope/agent-required-non-wright.golden +1 -0
- package/engine/testdata/golden/TestParityWrightScope/devrites-edit-allowed.golden +1 -0
- package/engine/testdata/golden/TestParityWrightScope/in-scope-allowed.golden +1 -0
- package/engine/testdata/golden/TestParityWrightScope/non-edit-tool.golden +1 -0
- package/engine/testdata/golden/TestParityWrightScope/out-of-scope-enforce-denies.golden +2 -0
- package/engine/testdata/golden/TestParityWrightScope/out-of-scope-observe-silent.golden +1 -0
- package/engine/testdata/golden/TestSpecSkeleton/missing-some.golden +2 -0
- package/engine/testdata/golden/TestSpecSkeleton/present-all.golden +2 -0
- package/engine/testdata/golden/TestStatusLiveWorkspace.golden +10 -0
- package/engine/testdata/golden/TestStuckLogHashParity.golden +1 -0
- package/engine/testdata/golden/status/auth-tokens.txt +9 -0
- package/engine/testdata/golden/status/search-ranking.txt +9 -0
- package/engine/tests/adr_0003_gate_exit_code_test.go +32 -0
- package/engine/tests/adr_0004_required_by_phase_test.go +62 -0
- package/engine/tests/adr_0006_clock_seam_test.go +36 -0
- package/engine/tests/budget_test.go +77 -0
- package/engine/tests/cli_test.go +209 -0
- package/engine/tests/concurrency_cli_test.go +125 -0
- package/engine/tests/conventions_test.go +106 -0
- package/engine/tests/doctor_cli_test.go +62 -0
- package/engine/tests/gate_test.go +235 -0
- package/engine/tests/hook_test.go +390 -0
- package/engine/tests/hooks_io_test.go +218 -0
- package/engine/tests/json_contract_test.go +99 -0
- package/engine/tests/lib_parity_test.go +942 -0
- package/engine/tests/meta_test.go +67 -0
- package/engine/tests/migrate_cli_test.go +193 -0
- package/engine/tests/parity_analyze_test.go +55 -0
- package/engine/tests/parity_buildreadiness_test.go +42 -0
- package/engine/tests/parity_closeout_test.go +102 -0
- package/engine/tests/parity_githelpers_test.go +41 -0
- package/engine/tests/parity_learnings_test.go +90 -0
- package/engine/tests/parity_mutationgate_test.go +36 -0
- package/engine/tests/parity_packageexistence_test.go +64 -0
- package/engine/tests/parity_reconcile_test.go +88 -0
- package/engine/tests/parity_resolve_test.go +144 -0
- package/engine/tests/parity_test.go +380 -0
- package/engine/tests/parity_testintegrity_test.go +65 -0
- package/engine/tests/parity_tickafk_test.go +83 -0
- package/engine/validatepack.go +192 -0
- package/engine/validatepack_test.go +79 -0
- package/engine/validatepackskills.go +181 -0
- package/engine/validatepackskills_test.go +171 -0
- package/install.sh +67 -913
- package/pack/.claude/agents/devrites-code-reviewer.md +20 -3
- package/pack/.claude/agents/devrites-devex-reviewer.md +13 -3
- package/pack/.claude/agents/devrites-doubt-reviewer.md +16 -3
- package/pack/.claude/agents/devrites-forge-judge.md +14 -4
- package/pack/.claude/agents/devrites-frontend-reviewer.md +27 -3
- package/pack/.claude/agents/devrites-performance-reviewer.md +18 -2
- package/pack/.claude/agents/devrites-plan-reviewer.md +13 -3
- package/pack/.claude/agents/devrites-retrospector.md +12 -7
- package/pack/.claude/agents/devrites-security-auditor.md +20 -4
- package/pack/.claude/agents/devrites-simplifier-reviewer.md +17 -2
- package/pack/.claude/agents/devrites-slice-wright.md +32 -16
- package/pack/.claude/agents/devrites-spec-reviewer.md +17 -2
- package/pack/.claude/agents/devrites-strategy-reviewer.md +12 -2
- package/pack/.claude/agents/devrites-test-analyst.md +20 -3
- package/pack/.claude/settings.json +58 -8
- package/pack/.claude/skills/devrites-api-interface/SKILL.md +22 -5
- package/pack/.claude/skills/devrites-audit/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-browser-proof/SKILL.md +26 -53
- package/pack/.claude/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
- package/pack/.claude/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +21 -6
- package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +11 -0
- package/pack/.claude/skills/devrites-debug-recovery/reference/regression-test.md +2 -3
- package/pack/.claude/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/.claude/skills/devrites-doubt/SKILL.md +10 -3
- package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +16 -13
- package/pack/.claude/skills/devrites-frontend-craft/reference/craft.md +15 -3
- package/pack/.claude/skills/devrites-frontend-craft/reference/quality-standards.md +19 -0
- package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/.claude/skills/devrites-interview/SKILL.md +30 -7
- package/pack/.claude/skills/devrites-lib/SKILL.md +35 -36
- package/pack/.claude/skills/devrites-lib/reference/intent-map.md +16 -0
- package/pack/.claude/skills/devrites-lib/reference/model-tiers.md +43 -0
- package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +104 -20
- package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +111 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/README.md +14 -6
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/afk-hitl.md +10 -18
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/agents.md +81 -16
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/anti-patterns.md +3 -4
- package/pack/.claude/skills/devrites-lib/reference/standards/browser-proof-checklist.md +9 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +62 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +141 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/context-hygiene.md +17 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/core.md +9 -18
- package/pack/.claude/skills/devrites-lib/reference/standards/definition-of-done.md +16 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/deprecation.md +21 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/developer-experience.md +3 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +51 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/documentation.md +9 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/edge-case-trace.md +19 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/elicitation.md +80 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/git-workflow.md +65 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/observability.md +13 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/performance.md +1 -1
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/principles.md +3 -3
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/prose-style.md +18 -2
- package/pack/.claude/skills/devrites-lib/reference/standards/release/ship-checklist.md +9 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/review-checklist.md +10 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/security-checklist.md +9 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/security.md +45 -4
- package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +105 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/spec-grammar.md +185 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/test-proof-checklist.md +9 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +162 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/tooling.md +29 -2
- package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +110 -0
- package/pack/.claude/skills/devrites-prose-craft/SKILL.md +40 -76
- package/pack/.claude/skills/devrites-prose-craft/reference/examples.md +19 -5
- package/pack/.claude/skills/devrites-refresh-indexes/SKILL.md +3 -6
- package/pack/.claude/skills/devrites-source-driven/SKILL.md +17 -1
- package/pack/.claude/skills/devrites-ux-shape/SKILL.md +20 -7
- package/pack/.claude/skills/devrites-ux-shape/reference/brief-template.md +25 -10
- package/pack/.claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +2 -2
- package/pack/.claude/skills/rite/SKILL.md +67 -42
- package/pack/.claude/skills/rite/reference/menu.md +4 -1
- package/pack/.claude/skills/rite-adopt/SKILL.md +31 -22
- package/pack/.claude/skills/rite-adopt/reference/adoption.md +6 -9
- package/pack/.claude/skills/rite-adopt/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +25 -25
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +2 -2
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +1 -1
- package/pack/.claude/skills/rite-build/SKILL.md +24 -256
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +3 -3
- package/pack/.claude/skills/rite-build/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +1 -1
- package/pack/.claude/skills/rite-build/reference/checkpoint.md +44 -0
- package/pack/.claude/skills/rite-build/reference/evidence-standard.md +10 -7
- package/pack/.claude/skills/rite-build/reference/forge.md +17 -7
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +2 -0
- package/pack/.claude/skills/rite-build/reference/output.md +41 -0
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +258 -0
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +11 -10
- package/pack/.claude/skills/rite-converge/SKILL.md +131 -0
- package/pack/.claude/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +61 -0
- package/pack/.claude/skills/rite-customize/SKILL.md +67 -0
- package/pack/.claude/skills/rite-define/SKILL.md +76 -93
- package/pack/.claude/skills/rite-define/reference/anti-patterns.md +2 -1
- package/pack/.claude/skills/rite-define/reference/gates.md +3 -3
- package/pack/.claude/skills/rite-define/reference/plan-template.md +35 -6
- package/pack/.claude/skills/rite-doctor/SKILL.md +41 -16
- package/pack/.claude/skills/rite-dogfood/SKILL.md +49 -0
- package/pack/.claude/skills/rite-explain/SKILL.md +148 -0
- package/pack/.claude/skills/rite-explain/reference/intake.md +79 -0
- package/pack/.claude/skills/rite-frame/SKILL.md +14 -15
- package/pack/.claude/skills/rite-frame/reference/failure-modes.md +1 -1
- package/pack/.claude/skills/rite-handoff/SKILL.md +19 -17
- package/pack/.claude/skills/rite-handoff/reference/handoff-template.md +16 -6
- package/pack/.claude/skills/rite-learn/SKILL.md +46 -24
- package/pack/.claude/skills/rite-plan/SKILL.md +35 -26
- package/pack/.claude/skills/rite-plan/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-plan/reference/dependency-graph.md +3 -3
- package/pack/.claude/skills/rite-plan/reference/slicing.md +20 -7
- package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +15 -16
- package/pack/.claude/skills/rite-polish/SKILL.md +18 -23
- package/pack/.claude/skills/rite-polish/reference/anti-ai-slop.md +31 -2
- package/pack/.claude/skills/rite-polish/reference/anti-patterns.md +4 -1
- package/pack/.claude/skills/rite-polish/reference/code.md +16 -5
- package/pack/.claude/skills/rite-polish/reference/design-system-discovery.md +5 -32
- package/pack/.claude/skills/rite-pov/SKILL.md +46 -0
- package/pack/.claude/skills/rite-pr-feedback/SKILL.md +49 -0
- package/pack/.claude/skills/rite-pressure-test/SKILL.md +40 -10
- package/pack/.claude/skills/rite-prototype/SKILL.md +23 -2
- package/pack/.claude/skills/rite-prove/SKILL.md +41 -96
- package/pack/.claude/skills/rite-prove/reference/acceptance-proof.md +48 -0
- package/pack/.claude/skills/rite-prove/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-prove/reference/browser-proof.md +36 -13
- package/pack/.claude/skills/rite-quick/SKILL.md +19 -12
- package/pack/.claude/skills/rite-resolve/SKILL.md +21 -25
- package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +2 -2
- package/pack/.claude/skills/rite-review/SKILL.md +43 -45
- package/pack/.claude/skills/rite-review/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-review/reference/performance-checklist.md +1 -1
- package/pack/.claude/skills/rite-review/reference/performance-review.md +4 -22
- package/pack/.claude/skills/rite-review/reference/security-review.md +2 -2
- package/pack/.claude/skills/rite-seal/SKILL.md +40 -174
- package/pack/.claude/skills/rite-seal/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-seal/reference/conventions-ledger.md +6 -9
- package/pack/.claude/skills/rite-seal/reference/final-evidence.md +6 -14
- package/pack/.claude/skills/rite-seal/reference/go-no-go.md +3 -3
- package/pack/.claude/skills/rite-seal/reference/output.md +7 -0
- package/pack/.claude/skills/rite-seal/reference/phase-contract.md +211 -0
- package/pack/.claude/skills/rite-seal/reference/seal-template.md +1 -1
- package/pack/.claude/skills/rite-ship/SKILL.md +45 -75
- package/pack/.claude/skills/rite-ship/reference/adr-promotion.md +9 -0
- package/pack/.claude/skills/rite-ship/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-ship/reference/close-out.md +12 -1
- package/pack/.claude/skills/rite-ship/reference/design-memory.md +2 -2
- package/pack/.claude/skills/rite-ship/reference/git-ship.md +32 -1
- package/pack/.claude/skills/rite-ship/reference/ledger.md +56 -0
- package/pack/.claude/skills/rite-ship/reference/rollout.md +43 -0
- package/pack/.claude/skills/rite-spec/SKILL.md +108 -60
- package/pack/.claude/skills/rite-spec/reference/ai-spec-template.md +33 -0
- package/pack/.claude/skills/rite-spec/reference/anti-patterns.md +4 -1
- package/pack/.claude/skills/rite-spec/reference/investigation.md +34 -14
- package/pack/.claude/skills/rite-spec/reference/question-protocol.md +7 -37
- package/pack/.claude/skills/rite-spec/reference/references-intake.md +23 -18
- package/pack/.claude/skills/rite-spec/reference/spec-template.md +94 -118
- package/pack/.claude/skills/rite-spec/reference/state-workspace.md +128 -139
- package/pack/.claude/skills/rite-status/SKILL.md +26 -22
- package/pack/.claude/skills/rite-temper/SKILL.md +34 -27
- package/pack/.claude/skills/rite-temper/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-temper/reference/scope-modes.md +1 -1
- package/pack/.claude/skills/rite-temper/reference/significance.md +1 -1
- package/pack/.claude/skills/rite-vet/SKILL.md +58 -70
- package/pack/.claude/skills/rite-vet/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-vet/reference/cross-model.md +7 -5
- package/pack/.claude/skills/rite-vet/reference/depth.md +1 -1
- package/pack/.claude/skills/rite-vet/reference/review-axes.md +3 -3
- package/pack/.claude/skills/rite-zoom-out/SKILL.md +16 -17
- package/pack/generated/README.md +10 -0
- package/pack/generated/claude/agents/devrites-code-reviewer.md +103 -0
- package/pack/generated/claude/agents/devrites-devex-reviewer.md +104 -0
- package/pack/generated/claude/agents/devrites-doubt-reviewer.md +68 -0
- package/pack/generated/claude/agents/devrites-forge-judge.md +102 -0
- package/pack/generated/claude/agents/devrites-frontend-reviewer.md +84 -0
- package/pack/generated/claude/agents/devrites-performance-reviewer.md +111 -0
- package/pack/generated/claude/agents/devrites-plan-reviewer.md +89 -0
- package/pack/generated/claude/agents/devrites-retrospector.md +96 -0
- package/pack/generated/claude/agents/devrites-security-auditor.md +85 -0
- package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +90 -0
- package/pack/generated/claude/agents/devrites-slice-wright.md +210 -0
- package/pack/generated/claude/agents/devrites-spec-reviewer.md +87 -0
- package/pack/generated/claude/agents/devrites-strategy-reviewer.md +72 -0
- package/pack/generated/claude/agents/devrites-test-analyst.md +64 -0
- package/pack/generated/claude/settings.json +103 -0
- package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +61 -0
- package/pack/generated/claude/skills/devrites-audit/SKILL.md +73 -0
- package/pack/generated/claude/skills/devrites-browser-proof/SKILL.md +76 -0
- package/pack/generated/claude/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
- package/pack/generated/claude/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +65 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +17 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/generated/claude/skills/devrites-doubt/SKILL.md +82 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/SKILL.md +99 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/craft.md +71 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/design-references.md +116 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/fullstack.md +45 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/quality-standards.md +234 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +59 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/shape.md +60 -0
- package/pack/generated/claude/skills/devrites-interview/SKILL.md +104 -0
- package/pack/generated/claude/skills/devrites-lib/SKILL.md +82 -0
- package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +16 -0
- package/pack/generated/claude/skills/devrites-lib/reference/model-tiers.md +43 -0
- package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +165 -0
- package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +111 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +61 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +243 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +192 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/anti-patterns.md +58 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/browser-proof-checklist.md +9 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +62 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +141 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/coding-style.md +55 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +114 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +119 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/definition-of-done.md +16 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +71 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +51 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/documentation.md +35 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/edge-case-trace.md +19 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/elicitation.md +80 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/error-handling.md +33 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/git-workflow.md +65 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/hooks.md +38 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/observability.md +73 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +48 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +36 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/principles.md +158 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/prose-style.md +117 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/release/ship-checklist.md +9 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/review-checklist.md +10 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security-checklist.md +9 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +135 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +105 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/spec-grammar.md +185 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/test-proof-checklist.md +9 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +162 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +99 -0
- package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +110 -0
- package/pack/generated/claude/skills/devrites-prose-craft/SKILL.md +69 -0
- package/pack/generated/claude/skills/devrites-prose-craft/reference/banned-phrases.md +95 -0
- package/pack/generated/claude/skills/devrites-prose-craft/reference/examples.md +102 -0
- package/pack/generated/claude/skills/devrites-prose-craft/reference/structures.md +134 -0
- package/pack/generated/claude/skills/devrites-refresh-indexes/SKILL.md +51 -0
- package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +52 -0
- package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +134 -0
- package/pack/generated/claude/skills/devrites-ux-shape/reference/brief-template.md +108 -0
- package/pack/generated/claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
- package/pack/generated/claude/skills/rite/SKILL.md +142 -0
- package/pack/generated/claude/skills/rite/reference/menu.md +42 -0
- package/pack/generated/claude/skills/rite-adopt/SKILL.md +104 -0
- package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +55 -0
- package/pack/generated/claude/skills/rite-adopt/reference/anti-patterns.md +19 -0
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +98 -0
- package/pack/generated/claude/skills/rite-autocomplete/reference/decision-policy.md +35 -0
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +54 -0
- package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +59 -0
- package/pack/generated/claude/skills/rite-build/SKILL.md +84 -0
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +145 -0
- package/pack/generated/claude/skills/rite-build/reference/anti-patterns.md +37 -0
- package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +149 -0
- package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +44 -0
- package/pack/generated/claude/skills/rite-build/reference/evidence-standard.md +35 -0
- package/pack/generated/claude/skills/rite-build/reference/forge.md +181 -0
- package/pack/generated/claude/skills/rite-build/reference/frontend-trigger.md +39 -0
- package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +42 -0
- package/pack/generated/claude/skills/rite-build/reference/output.md +41 -0
- package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +258 -0
- package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +43 -0
- package/pack/generated/claude/skills/rite-build/reference/tdd.md +26 -0
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +140 -0
- package/pack/generated/claude/skills/rite-converge/SKILL.md +131 -0
- package/pack/generated/claude/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/generated/claude/skills/rite-converge/reference/convergence-assessment.md +61 -0
- package/pack/generated/claude/skills/rite-customize/SKILL.md +67 -0
- package/pack/generated/claude/skills/rite-define/SKILL.md +153 -0
- package/pack/generated/claude/skills/rite-define/reference/anti-patterns.md +26 -0
- package/pack/generated/claude/skills/rite-define/reference/gates.md +152 -0
- package/pack/generated/claude/skills/rite-define/reference/plan-template.md +94 -0
- package/pack/generated/claude/skills/rite-doctor/SKILL.md +76 -0
- package/pack/generated/claude/skills/rite-dogfood/SKILL.md +49 -0
- package/pack/generated/claude/skills/rite-explain/SKILL.md +148 -0
- package/pack/generated/claude/skills/rite-explain/reference/intake.md +79 -0
- package/pack/generated/claude/skills/rite-frame/SKILL.md +120 -0
- package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +68 -0
- package/pack/generated/claude/skills/rite-handoff/SKILL.md +97 -0
- package/pack/generated/claude/skills/rite-handoff/reference/handoff-template.md +44 -0
- package/pack/generated/claude/skills/rite-learn/SKILL.md +117 -0
- package/pack/generated/claude/skills/rite-plan/SKILL.md +95 -0
- package/pack/generated/claude/skills/rite-plan/reference/anti-patterns.md +24 -0
- package/pack/generated/claude/skills/rite-plan/reference/dependency-graph.md +33 -0
- package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +42 -0
- package/pack/generated/claude/skills/rite-plan/reference/slicing.md +65 -0
- package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +33 -0
- package/pack/generated/claude/skills/rite-polish/SKILL.md +87 -0
- package/pack/generated/claude/skills/rite-polish/reference/anti-ai-slop.md +206 -0
- package/pack/generated/claude/skills/rite-polish/reference/anti-patterns.md +30 -0
- package/pack/generated/claude/skills/rite-polish/reference/backend-polish.md +80 -0
- package/pack/generated/claude/skills/rite-polish/reference/browser-polish-evidence.md +31 -0
- package/pack/generated/claude/skills/rite-polish/reference/code.md +100 -0
- package/pack/generated/claude/skills/rite-polish/reference/design-system-discovery.md +8 -0
- package/pack/generated/claude/skills/rite-polish/reference/harden-checklist.md +109 -0
- package/pack/generated/claude/skills/rite-polish/reference/ui.md +136 -0
- package/pack/generated/claude/skills/rite-pov/SKILL.md +46 -0
- package/pack/generated/claude/skills/rite-pr-feedback/SKILL.md +49 -0
- package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +74 -0
- package/pack/generated/claude/skills/rite-prototype/SKILL.md +110 -0
- package/pack/generated/claude/skills/rite-prove/SKILL.md +104 -0
- package/pack/generated/claude/skills/rite-prove/reference/acceptance-proof.md +48 -0
- package/pack/generated/claude/skills/rite-prove/reference/anti-patterns.md +25 -0
- package/pack/generated/claude/skills/rite-prove/reference/browser-proof.md +49 -0
- package/pack/generated/claude/skills/rite-prove/reference/failure-triage.md +25 -0
- package/pack/generated/claude/skills/rite-prove/reference/proof-ladder.md +28 -0
- package/pack/generated/claude/skills/rite-prove/reference/test-command-discovery.md +30 -0
- package/pack/generated/claude/skills/rite-quick/SKILL.md +93 -0
- package/pack/generated/claude/skills/rite-resolve/SKILL.md +109 -0
- package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +115 -0
- package/pack/generated/claude/skills/rite-review/SKILL.md +171 -0
- package/pack/generated/claude/skills/rite-review/reference/anti-patterns.md +32 -0
- package/pack/generated/claude/skills/rite-review/reference/cognitive-load.md +92 -0
- package/pack/generated/claude/skills/rite-review/reference/feature-scoped-review.md +26 -0
- package/pack/generated/claude/skills/rite-review/reference/five-axis-review.md +60 -0
- package/pack/generated/claude/skills/rite-review/reference/nielsen-heuristics.md +130 -0
- package/pack/generated/claude/skills/rite-review/reference/performance-checklist.md +80 -0
- package/pack/generated/claude/skills/rite-review/reference/performance-review.md +14 -0
- package/pack/generated/claude/skills/rite-review/reference/security-review.md +37 -0
- package/pack/generated/claude/skills/rite-seal/SKILL.md +101 -0
- package/pack/generated/claude/skills/rite-seal/reference/anti-patterns.md +29 -0
- package/pack/generated/claude/skills/rite-seal/reference/conventions-ledger.md +60 -0
- package/pack/generated/claude/skills/rite-seal/reference/final-evidence.md +64 -0
- package/pack/generated/claude/skills/rite-seal/reference/go-no-go.md +53 -0
- package/pack/generated/claude/skills/rite-seal/reference/output.md +7 -0
- package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +211 -0
- package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +30 -0
- package/pack/generated/claude/skills/rite-seal/reference/seal-template.md +36 -0
- package/pack/generated/claude/skills/rite-ship/SKILL.md +111 -0
- package/pack/generated/claude/skills/rite-ship/reference/adr-promotion.md +9 -0
- package/pack/generated/claude/skills/rite-ship/reference/anti-patterns.md +25 -0
- package/pack/generated/claude/skills/rite-ship/reference/close-out.md +42 -0
- package/pack/generated/claude/skills/rite-ship/reference/design-memory.md +120 -0
- package/pack/generated/claude/skills/rite-ship/reference/git-ship.md +73 -0
- package/pack/generated/claude/skills/rite-ship/reference/ledger.md +56 -0
- package/pack/generated/claude/skills/rite-ship/reference/rollout.md +43 -0
- package/pack/generated/claude/skills/rite-ship/reference/ship-template.md +33 -0
- package/pack/generated/claude/skills/rite-spec/SKILL.md +217 -0
- package/pack/generated/claude/skills/rite-spec/reference/acceptance-criteria.md +31 -0
- package/pack/generated/claude/skills/rite-spec/reference/ai-spec-template.md +33 -0
- package/pack/generated/claude/skills/rite-spec/reference/anti-patterns.md +28 -0
- package/pack/generated/claude/skills/rite-spec/reference/interview-patterns.md +56 -0
- package/pack/generated/claude/skills/rite-spec/reference/investigation.md +84 -0
- package/pack/generated/claude/skills/rite-spec/reference/question-protocol.md +31 -0
- package/pack/generated/claude/skills/rite-spec/reference/references-intake.md +62 -0
- package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +73 -0
- package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +110 -0
- package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +156 -0
- package/pack/generated/claude/skills/rite-status/SKILL.md +107 -0
- package/pack/generated/claude/skills/rite-temper/SKILL.md +126 -0
- package/pack/generated/claude/skills/rite-temper/reference/anti-patterns.md +29 -0
- package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +65 -0
- package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +53 -0
- package/pack/generated/claude/skills/rite-temper/reference/significance.md +46 -0
- package/pack/generated/claude/skills/rite-temper/reference/strategy-template.md +90 -0
- package/pack/generated/claude/skills/rite-vet/SKILL.md +175 -0
- package/pack/generated/claude/skills/rite-vet/reference/anti-patterns.md +29 -0
- package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +135 -0
- package/pack/generated/claude/skills/rite-vet/reference/cross-model.md +43 -0
- package/pack/generated/claude/skills/rite-vet/reference/depth.md +53 -0
- package/pack/generated/claude/skills/rite-vet/reference/eng-lenses.md +48 -0
- package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +167 -0
- package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +75 -0
- package/pack/generated/codex/AGENTS.md +23 -0
- package/pack/generated/codex/agents/devrites-code-reviewer.toml +101 -0
- package/pack/generated/codex/agents/devrites-devex-reviewer.toml +102 -0
- package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +66 -0
- package/pack/generated/codex/agents/devrites-forge-judge.toml +100 -0
- package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +80 -0
- package/pack/generated/codex/agents/devrites-performance-reviewer.toml +109 -0
- package/pack/generated/codex/agents/devrites-plan-reviewer.toml +93 -0
- package/pack/generated/codex/agents/devrites-retrospector.toml +94 -0
- package/pack/generated/codex/agents/devrites-security-auditor.toml +83 -0
- package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +88 -0
- package/pack/generated/codex/agents/devrites-slice-wright.toml +207 -0
- package/pack/generated/codex/agents/devrites-spec-reviewer.toml +85 -0
- package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +76 -0
- package/pack/generated/codex/agents/devrites-test-analyst.toml +62 -0
- package/pack/generated/codex/hooks.json +151 -0
- package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +73 -0
- package/pack/generated/codex/skills/devrites-api-interface/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-audit/SKILL.md +85 -0
- package/pack/generated/codex/skills/devrites-audit/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +88 -0
- package/pack/generated/codex/skills/devrites-browser-proof/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
- package/pack/generated/codex/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +77 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +17 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/generated/codex/skills/devrites-doubt/SKILL.md +94 -0
- package/pack/generated/codex/skills/devrites-doubt/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +111 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/craft.md +71 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/design-references.md +116 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/fullstack.md +45 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/quality-standards.md +234 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +59 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/shape.md +60 -0
- package/pack/generated/codex/skills/devrites-interview/SKILL.md +116 -0
- package/pack/generated/codex/skills/devrites-interview/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-lib/SKILL.md +94 -0
- package/pack/generated/codex/skills/devrites-lib/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +16 -0
- package/pack/generated/codex/skills/devrites-lib/reference/model-tiers.md +43 -0
- package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +165 -0
- package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +111 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +61 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +243 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +192 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/anti-patterns.md +58 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/browser-proof-checklist.md +9 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +62 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +141 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/coding-style.md +55 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +114 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +119 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/definition-of-done.md +16 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +71 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +51 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/documentation.md +35 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/edge-case-trace.md +19 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/elicitation.md +80 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/error-handling.md +33 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/git-workflow.md +65 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/hooks.md +38 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/observability.md +73 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +48 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +36 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/principles.md +158 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/prose-style.md +117 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/release/ship-checklist.md +9 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/review-checklist.md +10 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security-checklist.md +9 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +135 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +105 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/spec-grammar.md +185 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/test-proof-checklist.md +9 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +162 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +99 -0
- package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +110 -0
- package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +81 -0
- package/pack/generated/codex/skills/devrites-prose-craft/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-prose-craft/reference/banned-phrases.md +95 -0
- package/pack/generated/codex/skills/devrites-prose-craft/reference/examples.md +102 -0
- package/pack/generated/codex/skills/devrites-prose-craft/reference/structures.md +134 -0
- package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +63 -0
- package/pack/generated/codex/skills/devrites-refresh-indexes/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +64 -0
- package/pack/generated/codex/skills/devrites-source-driven/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +146 -0
- package/pack/generated/codex/skills/devrites-ux-shape/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-ux-shape/reference/brief-template.md +108 -0
- package/pack/generated/codex/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
- package/pack/generated/codex/skills/rite/SKILL.md +154 -0
- package/pack/generated/codex/skills/rite/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite/reference/menu.md +42 -0
- package/pack/generated/codex/skills/rite-adopt/SKILL.md +116 -0
- package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +55 -0
- package/pack/generated/codex/skills/rite-adopt/reference/anti-patterns.md +19 -0
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +110 -0
- package/pack/generated/codex/skills/rite-autocomplete/reference/decision-policy.md +35 -0
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +54 -0
- package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +59 -0
- package/pack/generated/codex/skills/rite-build/SKILL.md +96 -0
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +145 -0
- package/pack/generated/codex/skills/rite-build/reference/anti-patterns.md +37 -0
- package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +149 -0
- package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +44 -0
- package/pack/generated/codex/skills/rite-build/reference/evidence-standard.md +35 -0
- package/pack/generated/codex/skills/rite-build/reference/forge.md +181 -0
- package/pack/generated/codex/skills/rite-build/reference/frontend-trigger.md +39 -0
- package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +42 -0
- package/pack/generated/codex/skills/rite-build/reference/output.md +41 -0
- package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +258 -0
- package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +43 -0
- package/pack/generated/codex/skills/rite-build/reference/tdd.md +26 -0
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +140 -0
- package/pack/generated/codex/skills/rite-converge/SKILL.md +143 -0
- package/pack/generated/codex/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +61 -0
- package/pack/generated/codex/skills/rite-customize/SKILL.md +79 -0
- package/pack/generated/codex/skills/rite-customize/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-define/SKILL.md +165 -0
- package/pack/generated/codex/skills/rite-define/reference/anti-patterns.md +26 -0
- package/pack/generated/codex/skills/rite-define/reference/gates.md +152 -0
- package/pack/generated/codex/skills/rite-define/reference/plan-template.md +94 -0
- package/pack/generated/codex/skills/rite-doctor/SKILL.md +88 -0
- package/pack/generated/codex/skills/rite-dogfood/SKILL.md +61 -0
- package/pack/generated/codex/skills/rite-dogfood/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-explain/SKILL.md +160 -0
- package/pack/generated/codex/skills/rite-explain/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-explain/reference/intake.md +79 -0
- package/pack/generated/codex/skills/rite-frame/SKILL.md +132 -0
- package/pack/generated/codex/skills/rite-frame/reference/failure-modes.md +68 -0
- package/pack/generated/codex/skills/rite-handoff/SKILL.md +109 -0
- package/pack/generated/codex/skills/rite-handoff/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-handoff/reference/handoff-template.md +44 -0
- package/pack/generated/codex/skills/rite-learn/SKILL.md +129 -0
- package/pack/generated/codex/skills/rite-learn/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-plan/SKILL.md +107 -0
- package/pack/generated/codex/skills/rite-plan/reference/anti-patterns.md +24 -0
- package/pack/generated/codex/skills/rite-plan/reference/dependency-graph.md +33 -0
- package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +42 -0
- package/pack/generated/codex/skills/rite-plan/reference/slicing.md +65 -0
- package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +33 -0
- package/pack/generated/codex/skills/rite-polish/SKILL.md +99 -0
- package/pack/generated/codex/skills/rite-polish/reference/anti-ai-slop.md +206 -0
- package/pack/generated/codex/skills/rite-polish/reference/anti-patterns.md +30 -0
- package/pack/generated/codex/skills/rite-polish/reference/backend-polish.md +80 -0
- package/pack/generated/codex/skills/rite-polish/reference/browser-polish-evidence.md +31 -0
- package/pack/generated/codex/skills/rite-polish/reference/code.md +100 -0
- package/pack/generated/codex/skills/rite-polish/reference/design-system-discovery.md +8 -0
- package/pack/generated/codex/skills/rite-polish/reference/harden-checklist.md +109 -0
- package/pack/generated/codex/skills/rite-polish/reference/ui.md +136 -0
- package/pack/generated/codex/skills/rite-pov/SKILL.md +58 -0
- package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +61 -0
- package/pack/generated/codex/skills/rite-pr-feedback/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +86 -0
- package/pack/generated/codex/skills/rite-prototype/SKILL.md +122 -0
- package/pack/generated/codex/skills/rite-prototype/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-prove/SKILL.md +116 -0
- package/pack/generated/codex/skills/rite-prove/reference/acceptance-proof.md +48 -0
- package/pack/generated/codex/skills/rite-prove/reference/anti-patterns.md +25 -0
- package/pack/generated/codex/skills/rite-prove/reference/browser-proof.md +49 -0
- package/pack/generated/codex/skills/rite-prove/reference/failure-triage.md +25 -0
- package/pack/generated/codex/skills/rite-prove/reference/proof-ladder.md +28 -0
- package/pack/generated/codex/skills/rite-prove/reference/test-command-discovery.md +30 -0
- package/pack/generated/codex/skills/rite-quick/SKILL.md +105 -0
- package/pack/generated/codex/skills/rite-resolve/SKILL.md +121 -0
- package/pack/generated/codex/skills/rite-resolve/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +115 -0
- package/pack/generated/codex/skills/rite-review/SKILL.md +183 -0
- package/pack/generated/codex/skills/rite-review/reference/anti-patterns.md +32 -0
- package/pack/generated/codex/skills/rite-review/reference/cognitive-load.md +92 -0
- package/pack/generated/codex/skills/rite-review/reference/feature-scoped-review.md +26 -0
- package/pack/generated/codex/skills/rite-review/reference/five-axis-review.md +60 -0
- package/pack/generated/codex/skills/rite-review/reference/nielsen-heuristics.md +130 -0
- package/pack/generated/codex/skills/rite-review/reference/performance-checklist.md +80 -0
- package/pack/generated/codex/skills/rite-review/reference/performance-review.md +14 -0
- package/pack/generated/codex/skills/rite-review/reference/security-review.md +37 -0
- package/pack/generated/codex/skills/rite-seal/SKILL.md +113 -0
- package/pack/generated/codex/skills/rite-seal/reference/anti-patterns.md +29 -0
- package/pack/generated/codex/skills/rite-seal/reference/conventions-ledger.md +60 -0
- package/pack/generated/codex/skills/rite-seal/reference/final-evidence.md +64 -0
- package/pack/generated/codex/skills/rite-seal/reference/go-no-go.md +53 -0
- package/pack/generated/codex/skills/rite-seal/reference/output.md +7 -0
- package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +211 -0
- package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +30 -0
- package/pack/generated/codex/skills/rite-seal/reference/seal-template.md +36 -0
- package/pack/generated/codex/skills/rite-ship/SKILL.md +123 -0
- package/pack/generated/codex/skills/rite-ship/reference/adr-promotion.md +9 -0
- package/pack/generated/codex/skills/rite-ship/reference/anti-patterns.md +25 -0
- package/pack/generated/codex/skills/rite-ship/reference/close-out.md +42 -0
- package/pack/generated/codex/skills/rite-ship/reference/design-memory.md +120 -0
- package/pack/generated/codex/skills/rite-ship/reference/git-ship.md +73 -0
- package/pack/generated/codex/skills/rite-ship/reference/ledger.md +56 -0
- package/pack/generated/codex/skills/rite-ship/reference/rollout.md +43 -0
- package/pack/generated/codex/skills/rite-ship/reference/ship-template.md +33 -0
- package/pack/generated/codex/skills/rite-spec/SKILL.md +229 -0
- package/pack/generated/codex/skills/rite-spec/reference/acceptance-criteria.md +31 -0
- package/pack/generated/codex/skills/rite-spec/reference/ai-spec-template.md +33 -0
- package/pack/generated/codex/skills/rite-spec/reference/anti-patterns.md +28 -0
- package/pack/generated/codex/skills/rite-spec/reference/interview-patterns.md +56 -0
- package/pack/generated/codex/skills/rite-spec/reference/investigation.md +84 -0
- package/pack/generated/codex/skills/rite-spec/reference/question-protocol.md +31 -0
- package/pack/generated/codex/skills/rite-spec/reference/references-intake.md +62 -0
- package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +73 -0
- package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +110 -0
- package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +156 -0
- package/pack/generated/codex/skills/rite-status/SKILL.md +119 -0
- package/pack/generated/codex/skills/rite-status/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-temper/SKILL.md +138 -0
- package/pack/generated/codex/skills/rite-temper/reference/anti-patterns.md +29 -0
- package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +65 -0
- package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +53 -0
- package/pack/generated/codex/skills/rite-temper/reference/significance.md +46 -0
- package/pack/generated/codex/skills/rite-temper/reference/strategy-template.md +90 -0
- package/pack/generated/codex/skills/rite-vet/SKILL.md +187 -0
- package/pack/generated/codex/skills/rite-vet/reference/anti-patterns.md +29 -0
- package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +135 -0
- package/pack/generated/codex/skills/rite-vet/reference/cross-model.md +43 -0
- package/pack/generated/codex/skills/rite-vet/reference/depth.md +53 -0
- package/pack/generated/codex/skills/rite-vet/reference/eng-lenses.md +48 -0
- package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +167 -0
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +87 -0
- package/pack/generated/codex/skills/rite-zoom-out/agents/openai.yaml +2 -0
- package/package.json +8 -4
- package/scripts/build-binaries.sh +75 -0
- package/scripts/build-host-artifacts.sh +100 -0
- package/scripts/build-release-tarball.sh +16 -2
- package/scripts/check-cross-refs.py +17 -3
- package/scripts/check-generated-skill-budget.mjs +41 -0
- package/scripts/check-instruction-size-baseline.mjs +79 -0
- package/scripts/check-invocation-integrity.py +113 -0
- package/scripts/check-no-global-writes.sh +22 -0
- package/scripts/check-no-personal-paths.py +50 -0
- package/scripts/check-reference-governance.mjs +82 -0
- package/scripts/check-reply-contract.sh +64 -0
- package/scripts/check-rule-uniqueness.sh +4 -32
- package/scripts/codex-generate.sh +300 -0
- package/scripts/devrites-detect.sh +2 -1
- package/scripts/eval-runner.py +4 -2
- package/scripts/eval-scorer.mjs +46 -0
- package/scripts/grade-feature.sh +24 -7
- package/scripts/install-lib.sh +112 -19
- package/scripts/pin.sh +4 -4
- package/scripts/release-check.sh +71 -0
- package/scripts/run-behavioral-evals.sh +34 -2
- package/scripts/run-evals.sh +45 -30
- package/scripts/run-live-behavioral-evals.py +180 -0
- package/scripts/run-outcome-evals.sh +27 -0
- package/scripts/run-routing-evals.py +342 -0
- package/scripts/run-tests.mjs +203 -0
- package/scripts/skill-pruning-audit.mjs +120 -0
- package/scripts/skills-inventory.mjs +107 -0
- package/scripts/validate-agent-composition.py +57 -0
- package/scripts/validate-command-parity.py +70 -0
- package/scripts/validate-frontmatter.py +43 -7
- package/scripts/validate-skill-anatomy.py +139 -0
- package/scripts/validate-workflow-security.py +22 -3
- package/scripts/validate-workspace-schema.py +512 -0
- package/scripts/validate.sh +174 -34
- package/uninstall.sh +22 -183
- package/update.sh +29 -185
- package/docs/cli-mcp.md +0 -62
- package/mcp/devrites-mcp.mjs +0 -105
- package/pack/.claude/hooks/devrites-a1-guard.sh +0 -99
- package/pack/.claude/hooks/devrites-allow.sh +0 -44
- package/pack/.claude/hooks/devrites-cursor.sh +0 -28
- package/pack/.claude/hooks/devrites-orient.sh +0 -53
- package/pack/.claude/hooks/devrites-redwatch.sh +0 -39
- package/pack/.claude/hooks/devrites-refresh-indexes.sh +0 -127
- package/pack/.claude/hooks/devrites-reviewer-readonly.sh +0 -37
- package/pack/.claude/hooks/devrites-statusline.sh +0 -18
- package/pack/.claude/hooks/devrites-stop-gate.sh +0 -45
- package/pack/.claude/hooks/devrites-wright-scope.sh +0 -64
- package/pack/.claude/hooks/hooks.json +0 -52
- package/pack/.claude/rules/code-review.md +0 -48
- package/pack/.claude/rules/development-workflow.md +0 -40
- package/pack/.claude/rules/git-workflow.md +0 -35
- package/pack/.claude/rules/spec-grammar.md +0 -106
- package/pack/.claude/rules/testing.md +0 -88
- package/pack/.claude/skills/devrites-lib/scripts/analyze.sh +0 -78
- package/pack/.claude/skills/devrites-lib/scripts/check-acceptance.sh +0 -75
- package/pack/.claude/skills/devrites-lib/scripts/close-out.sh +0 -47
- package/pack/.claude/skills/devrites-lib/scripts/conventions.py +0 -273
- package/pack/.claude/skills/devrites-lib/scripts/coverage.sh +0 -51
- package/pack/.claude/skills/devrites-lib/scripts/devrites.sh +0 -77
- package/pack/.claude/skills/devrites-lib/scripts/doctor.sh +0 -156
- package/pack/.claude/skills/devrites-lib/scripts/doubt-coverage.sh +0 -59
- package/pack/.claude/skills/devrites-lib/scripts/evidence-fresh.sh +0 -63
- package/pack/.claude/skills/devrites-lib/scripts/footprint.sh +0 -45
- package/pack/.claude/skills/devrites-lib/scripts/learnings.sh +0 -74
- package/pack/.claude/skills/devrites-lib/scripts/mutation-gate.sh +0 -52
- package/pack/.claude/skills/devrites-lib/scripts/package-existence.sh +0 -68
- package/pack/.claude/skills/devrites-lib/scripts/preamble.sh +0 -76
- package/pack/.claude/skills/devrites-lib/scripts/progress.sh +0 -103
- package/pack/.claude/skills/devrites-lib/scripts/readiness.sh +0 -62
- package/pack/.claude/skills/devrites-lib/scripts/reconcile.sh +0 -123
- package/pack/.claude/skills/devrites-lib/scripts/resolve.sh +0 -279
- package/pack/.claude/skills/devrites-lib/scripts/rites.sh +0 -41
- package/pack/.claude/skills/devrites-lib/scripts/spec-validate.sh +0 -130
- package/pack/.claude/skills/devrites-lib/scripts/stuck.sh +0 -67
- package/pack/.claude/skills/devrites-lib/scripts/test-integrity.sh +0 -87
- package/pack/.claude/skills/devrites-lib/scripts/tick-afk.sh +0 -52
- package/scripts/merge-codex-hooks.mjs +0 -78
- /package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/coding-style.md +0 -0
- /package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/error-handling.md +0 -0
- /package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/hooks.md +0 -0
- /package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/patterns.md +0 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# DevRites core rules — always-on
|
|
2
|
+
|
|
3
|
+
The minimal always-on subset of the DevRites engineering rules. Workspace-operating
|
|
4
|
+
lifecycle rites read it in workflow step 0; phase-specific files load on demand from
|
|
5
|
+
`README.md`.
|
|
6
|
+
|
|
7
|
+
Project conventions always win where they exist; these rules fill gaps.
|
|
8
|
+
|
|
9
|
+
## Operating rules (every phase)
|
|
10
|
+
|
|
11
|
+
1. **Right step, right time** — use the smallest relevant workflow; don't load
|
|
12
|
+
everything. When you read, parallelize independent reads and speculatively batch the
|
|
13
|
+
files a step is likely to need; aim for comprehensive coverage of the relevant code,
|
|
14
|
+
not the first match (a code-intelligence index, **if one is available**, answers
|
|
15
|
+
structural questions faster than raw reads — see [`tooling.md`](tooling.md); this rule
|
|
16
|
+
is for the raw reads, the fallback when none is).
|
|
17
|
+
2. **No silent assumptions** — surface material assumptions; ask when the answer
|
|
18
|
+
changes scope, architecture, data model, UX, security, migration risk, or
|
|
19
|
+
acceptance.
|
|
20
|
+
3. **No guessing through confusion** — if requirements / code / tests / docs
|
|
21
|
+
conflict, stop, name the conflict, present options, wait for resolution
|
|
22
|
+
when the answer changes the product.
|
|
23
|
+
4. **Spec is living, not sacred** — change spec / plan only through the
|
|
24
|
+
Spec Drift Guard; never code against a known-wrong plan.
|
|
25
|
+
5. **One slice at a time** — build a single vertical slice, leave it working +
|
|
26
|
+
proven, then stop. Don't auto-continue (HITL default; under AFK the loop runs to
|
|
27
|
+
its slice budget — see [`afk-hitl.md`](afk-hitl.md)).
|
|
28
|
+
6. **Evidence over confidence** — tests, builds, runtime, screenshots beat
|
|
29
|
+
assertions; record commands and output.
|
|
30
|
+
7. **Feature scope only** — review / simplify / polish / security stay within
|
|
31
|
+
the active feature and touched files. No project-wide refactor, no drive-by
|
|
32
|
+
cleanup. Some work is out of scope by nature — creating accounts, provisioning prod
|
|
33
|
+
infrastructure, managing credentials / secrets, testing against production — refuse it
|
|
34
|
+
and route to the human.
|
|
35
|
+
8. **Prefer existing conventions** — follow the project's architecture,
|
|
36
|
+
components, tokens, tests, and commands; ask before adding a dependency or a
|
|
37
|
+
second design system.
|
|
38
|
+
9. **Verify uncertain facts at the source** — when framework / library
|
|
39
|
+
behaviour matters and isn't certain, check the installed source or docs (context7 for
|
|
40
|
+
current upstream docs, **if available** — see [`tooling.md`](tooling.md)) and record it.
|
|
41
|
+
|
|
42
|
+
## Rationalization guard
|
|
43
|
+
|
|
44
|
+
When an excuse appears, load the canonical
|
|
45
|
+
[`anti-patterns.md` rationalization table](anti-patterns.md#universal-rationalizations)
|
|
46
|
+
and apply its matching rebuttal before continuing.
|
|
47
|
+
|
|
48
|
+
## One-line discipline (load the full rule file when in scope)
|
|
49
|
+
|
|
50
|
+
These are the universal craft musts. Each links to the full file — Claude
|
|
51
|
+
reads it only when the phase needs depth.
|
|
52
|
+
|
|
53
|
+
- **Fail fast, no silent catches.** Validate at the top; catch narrow, recover
|
|
54
|
+
or rethrow with context; fail closed on auth / permission / transaction. →
|
|
55
|
+
[`error-handling.md`](error-handling.md)
|
|
56
|
+
- **Reuse before write.** Before adding a new util / component / helper /
|
|
57
|
+
type, search for an existing one. **Reuse → extend → build new.**
|
|
58
|
+
Duplication beats the wrong abstraction (AHA). →
|
|
59
|
+
[`coding-style.md`](coding-style.md), [`patterns.md`](patterns.md)
|
|
60
|
+
- **Test behaviour, not implementation.** Assert on observable behaviour and
|
|
61
|
+
public interfaces; one behaviour per test; cover unhappy paths; no flaky
|
|
62
|
+
tests. → [`testing.md`](testing.md)
|
|
63
|
+
- **Three-tier trust boundary.** *untrusted* → explicit validation + authz at
|
|
64
|
+
the *boundary* → *trusted* core. Every value crosses the boundary
|
|
65
|
+
deliberately; one that skips it is a finding. →
|
|
66
|
+
[`security.md`](security.md)
|
|
67
|
+
- **Measure before you optimize.** An optimisation without a measurement is a
|
|
68
|
+
guess that adds complexity. → [`performance.md`](performance.md)
|
|
69
|
+
- **Names reveal intent.** No `process()` / `handle()` / `data` / `temp`.
|
|
70
|
+
One concept, one word, across the codebase. → [`coding-style.md`](coding-style.md)
|
|
71
|
+
- **Comments explain *why*, not *what*.** Rename before you comment; delete
|
|
72
|
+
commented-out code. → [`coding-style.md`](coding-style.md)
|
|
73
|
+
- **Write like a human, not a model.** Cut the LLM tells from every artifact
|
|
74
|
+
and reply — filler openers, "not X, it's Y" contrasts, fake profundity,
|
|
75
|
+
marketing adjectives, em-dash tics — while keeping precise lists and exact
|
|
76
|
+
terms in specs. Read [`prose-style.md`](prose-style.md); for substantive prose,
|
|
77
|
+
explicitly invoke `devrites-prose-craft` for its rewrite and completion check.
|
|
78
|
+
- **Atomic commits, Conventional Commits.** One logical change per commit;
|
|
79
|
+
it builds + passes tests on its own. → [`git-workflow.md`](git-workflow.md)
|
|
80
|
+
|
|
81
|
+
## Persistence before stopping (handoff discipline)
|
|
82
|
+
|
|
83
|
+
Before any `rite-*` skill stops:
|
|
84
|
+
- Open question? → `questions.md` (with `status`, `gate`, `slice`, `proposed`,
|
|
85
|
+
`raised_at`). Decision discussed? → `decisions.md`.
|
|
86
|
+
- Assumption made? → `assumptions.md`. Drift raised? → `drift.md`.
|
|
87
|
+
- Approach tried that **failed**? → a `## Dead ends` section in `decisions.md` (what you
|
|
88
|
+
tried, why it failed, what it rules out). Compaction and the next agent must not repeat a
|
|
89
|
+
dead end — an invalidated approach is load-bearing context.
|
|
90
|
+
- Next-action ambiguous? → resolve to one command in `state.md`.
|
|
91
|
+
- HITL pause? → write the `Awaiting human` block to `state.md` and set
|
|
92
|
+
`Status: awaiting_human` before stopping; resume via `/rite-resolve <qid> "<answer>"`.
|
|
93
|
+
See [`afk-hitl.md`](afk-hitl.md) for the full AFK / HITL contract.
|
|
94
|
+
|
|
95
|
+
A skill that "stops" without doing this leaves the workspace lying.
|
|
96
|
+
|
|
97
|
+
## Context hygiene (end of every phase)
|
|
98
|
+
|
|
99
|
+
Long contexts degrade reasoning quality (Liu et al. 2023 "lost in the middle";
|
|
100
|
+
"context rot" on long inputs). Act on context at **50–70% used, not 95%**.
|
|
101
|
+
|
|
102
|
+
Every `rite-*` skill ends with a one-line **Session hygiene** advisory naming
|
|
103
|
+
the right move (`/clear` vs `/compact`) and the single resume command. Full
|
|
104
|
+
phase-by-phase guidance: [`context-hygiene.md`](context-hygiene.md).
|
|
105
|
+
|
|
106
|
+
## Precedence
|
|
107
|
+
|
|
108
|
+
**Project principles > project conventions > DevRites rules.** The rules fill
|
|
109
|
+
gaps; they don't overwrite the project's choices. When the project's own
|
|
110
|
+
conventions disagree with these rules, **project wins**.
|
|
111
|
+
|
|
112
|
+
Two of those layers carry **opposite** authority, and the difference is
|
|
113
|
+
load-bearing:
|
|
114
|
+
- **Project principles** (`.devrites/principles.md`) — authored, prescriptive
|
|
115
|
+
invariants the project will not break. *Trusted and gating*: a change that
|
|
116
|
+
violates one is a defect, not a prior to weigh — a top-severity, blocking
|
|
117
|
+
finding (absent file = none declared = gate passes). → [`principles.md`](principles.md)
|
|
118
|
+
- **Conventions** (`.devrites/conventions.md`) — learned, *descriptive* idioms.
|
|
119
|
+
An *untrusted prior*: a fresh read of the live code overrides a convention.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Definition of Done
|
|
2
|
+
|
|
3
|
+
DevRites acceptance criteria answer “did we build the requested thing?” Definition of Done answers “is the change finished to DevRites quality?”
|
|
4
|
+
|
|
5
|
+
A feature is done only when:
|
|
6
|
+
|
|
7
|
+
1. Acceptance criteria are mapped to evidence.
|
|
8
|
+
2. See-it-fail-first proof exists where behavior changed.
|
|
9
|
+
3. Runtime/build/test/browser evidence is fresh and recorded.
|
|
10
|
+
4. No unscoped edits, drive-by refactors, or hidden second systems remain.
|
|
11
|
+
5. Project standards and declared principles are honored, or an approved exception is recorded.
|
|
12
|
+
6. No hard gates remain open: HITL, AFK, red tests, stale evidence, drift, review blockers, or NO-GO.
|
|
13
|
+
7. Risky work names rollback/recovery.
|
|
14
|
+
8. Public behavior, command surface, docs, or architecture changes update docs/ADR where applicable.
|
|
15
|
+
|
|
16
|
+
Use this as the standing bar in `rite-vet`, `rite-build`, `rite-prove`, `rite-seal`, and `rite-quick`; phase-specific standards still apply.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Deprecation & migration
|
|
2
|
+
|
|
3
|
+
Code is a liability, not an asset. Every line carries ongoing cost — bugs to fix, dependencies
|
|
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.
|
|
8
|
+
|
|
9
|
+
DevRites already **gates** the dangerous moves: destructive migration, auth/authz change,
|
|
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.
|
|
12
|
+
|
|
13
|
+
## Code is a liability
|
|
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.
|
|
16
|
+
|
|
17
|
+
**Design for removal.** The cheapest deprecation is the one you planned when you built the thing.
|
|
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).
|
|
21
|
+
|
|
22
|
+
## Hyrum's law — observable behavior is the contract
|
|
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.
|
|
27
|
+
|
|
28
|
+
## Prove it's unused before you remove it
|
|
29
|
+
- Find the dependents: callers, subscribers, stored data, external clients, scheduled jobs. Use a
|
|
30
|
+
code-intelligence index for blast radius ([`tooling.md`](tooling.md)), then confirm against
|
|
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).
|
|
34
|
+
|
|
35
|
+
## Expand → contract (parallel change)
|
|
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.
|
|
43
|
+
|
|
44
|
+
## 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
|
+
|
|
51
|
+
## The Churn Rule — you own the deprecation, you own the migration
|
|
52
|
+
If you own the thing being deprecated, moving the consumers off it is *your* job, not theirs.
|
|
53
|
+
"They'll migrate on their own" is how a deprecation stalls advisory for years. Either do the
|
|
54
|
+
migration for them — a codemod, a backfill, a config flip they don't have to think about — or ship
|
|
55
|
+
the change as a backward-compatible update that needs no migration at all. Announcing a deadline
|
|
56
|
+
without providing the tooling, docs, and support to hit it isn't a migration; it's a break with a
|
|
57
|
+
countdown.
|
|
58
|
+
|
|
59
|
+
## Zombie code — nobody owns it, everybody depends on it
|
|
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.
|
|
66
|
+
|
|
67
|
+
## Scope
|
|
68
|
+
A removal or migration is a feature with its own spec, slices, and evidence — not a drive-by
|
|
69
|
+
delete while you're in another change. A surprise deletion in an unrelated diff is a red flag
|
|
70
|
+
([`anti-patterns.md`](anti-patterns.md)), and a destructive step trips the seal's risk-and-rollback
|
|
71
|
+
check regardless.
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Developer experience
|
|
2
|
+
|
|
3
|
+
When a change ships a surface another engineer has to *use* — a public API, a CLI, an SDK
|
|
4
|
+
or library, a webhook, a config/env contract, an error message, or the getting-started path
|
|
5
|
+
that introduces all of them — the developer using it is a user, and their experience is part
|
|
6
|
+
of the change. Code that compiles and passes its tests can still strand the next developer at
|
|
7
|
+
a cryptic error, a getting-started snippet that doesn't run, or an endpoint whose shape you
|
|
8
|
+
have to read the source to learn. Un-tested DX is a claim, the same way un-run code is a claim.
|
|
9
|
+
|
|
10
|
+
This rule is the developer-facing counterpart to [`performance.md`](performance.md): perf says
|
|
11
|
+
*measure the speed before you assert it*; this says *measure the experience before you assert
|
|
12
|
+
it*. It pairs with the [`devrites-api-interface`](../../../devrites-api-interface/SKILL.md)
|
|
13
|
+
skill (which shapes the contract) — this rule **proves** the shape is usable.
|
|
14
|
+
|
|
15
|
+
## Scope — when this applies
|
|
16
|
+
|
|
17
|
+
Conditional, like [`performance.md`](performance.md) and [`observability.md`](observability.md).
|
|
18
|
+
It applies when the diff changes a **developer-facing surface**:
|
|
19
|
+
|
|
20
|
+
- a public/external **API** endpoint, response shape, or status-code contract;
|
|
21
|
+
- a **CLI** command, flag, output, or exit code;
|
|
22
|
+
- an **SDK / library / package** export, signature, or type;
|
|
23
|
+
- a **webhook**, event payload, or integration contract;
|
|
24
|
+
- a **config / env-var** interface a consumer must set;
|
|
25
|
+
- an **error message, exit code, or failure response** a developer reads to recover;
|
|
26
|
+
- the **getting-started path** — README, install steps, quickstart, the first-run docs.
|
|
27
|
+
|
|
28
|
+
Skip it for pure-internal refactors, private helpers, app-only UI (that's
|
|
29
|
+
[`devrites-frontend-craft`](../../../devrites-frontend-craft/SKILL.md) /
|
|
30
|
+
`devrites-frontend-reviewer`), docs-only typo fixes, and config that no external consumer
|
|
31
|
+
touches. Don't DX-review a change with no developer-facing surface — the same scope discipline
|
|
32
|
+
as the rest of the conditional rules. End-user UX is a different axis; this rule is about the
|
|
33
|
+
*developer* consuming the surface.
|
|
34
|
+
|
|
35
|
+
## The boomerang — predict at plan, measure at prove, reconcile at seal
|
|
36
|
+
|
|
37
|
+
DevRites already runs a predict-then-prove spine (the vetted `test-plan.md` coverage target at
|
|
38
|
+
`/rite-vet`, proven at `/rite-prove`, gated at `/rite-seal`). DX rides the same spine, and the
|
|
39
|
+
gap between the two ends is the signal:
|
|
40
|
+
|
|
41
|
+
1. **Predict** — at `/rite-vet`, when a developer-facing surface is in scope, score the *planned*
|
|
42
|
+
surface against the dimensions below and write a predicted scorecard to `devex.md` (the
|
|
43
|
+
estimate, e.g. "time-to-hello-world: ~3 min"). This is cheap and pre-build; it forces the
|
|
44
|
+
ergonomics question before the contract sets.
|
|
45
|
+
2. **Measure** — at `/rite-prove`, actually exercise the surface (run the getting-started flow,
|
|
46
|
+
call the endpoint, invoke the CLI, trigger the error) and record the *measured* scorecard with
|
|
47
|
+
evidence: real time-to-hello-world, the verbatim error text, the screenshot of the docs page.
|
|
48
|
+
3. **Reconcile (the boomerang)** — at `/rite-seal`, compare predicted against measured. A material
|
|
49
|
+
gap — "the plan said 3 minutes, the getting-started flow actually took 8 and step 4 errored" —
|
|
50
|
+
is a finding, not a rounding error. The estimate was wrong *or* the surface regressed; either
|
|
51
|
+
way the developer using it pays, and the gap is exactly what a single end-state score would hide.
|
|
52
|
+
|
|
53
|
+
The boomerang is what makes DX a measured axis rather than an opinion: the prediction is on
|
|
54
|
+
record, so the measured reality can falsify it.
|
|
55
|
+
|
|
56
|
+
## The scorecard — what to score
|
|
57
|
+
|
|
58
|
+
One entity, one name: call the metric **time-to-hello-world (TTHW)** consistently, not "onboarding
|
|
59
|
+
time" in one place and "setup time" in another. Score these dimensions; only the ones the diff
|
|
60
|
+
touches:
|
|
61
|
+
|
|
62
|
+
- **Discoverability** — can a developer find the entry point without reading the source? Is the
|
|
63
|
+
new surface named, exported, and documented where they'll look?
|
|
64
|
+
- **Time-to-hello-world (TTHW)** — wall-clock from "I have the repo/package" to "I got one
|
|
65
|
+
successful call/response/render". The headline number; measure it, don't estimate it at seal.
|
|
66
|
+
- **Getting-started friction** — does the quickstart run *as written*, copy-pasted, on a clean
|
|
67
|
+
checkout? Every undocumented prerequisite, wrong command, or missing step is friction.
|
|
68
|
+
- **Error-message quality** — does a failure say *what* failed, *why*, and *how to recover*, with
|
|
69
|
+
the relevant ids (never secrets — see [`security.md`](security.md))? A bare stack trace, a
|
|
70
|
+
silent exit, or "an error occurred" is a defect on a developer-facing path.
|
|
71
|
+
- **Ergonomics & consistency** — does the surface match the project's existing conventions
|
|
72
|
+
(naming, argument order, pagination, error shape)? An inconsistent new endpoint taxes everyone
|
|
73
|
+
who learned the old ones. Sensible defaults; the common case is one call.
|
|
74
|
+
- **Docs accuracy** — examples are copy-pasteable and correct, the signature in the docs matches
|
|
75
|
+
the code, and changed behavior updated its docs in the same change ([`documentation.md`](documentation.md)).
|
|
76
|
+
|
|
77
|
+
## Measure, don't assert
|
|
78
|
+
|
|
79
|
+
The same discipline as `performance.md` "measure first" and `testing.md` "see it fail first":
|
|
80
|
+
|
|
81
|
+
- **Run it, don't read it.** A scorecard backed by "the code looks fine" is Source mode and says
|
|
82
|
+
so. The graded scorecard comes from actually invoking the surface — the getting-started flow on
|
|
83
|
+
a clean state, the real CLI `--help`, the real error path — and recording what happened.
|
|
84
|
+
- **Quote the artifact.** Paste the verbatim error string, the exact failing command, the measured
|
|
85
|
+
TTHW; for a docs/quickstart page, capture it through the browser-proof ladder
|
|
86
|
+
([`../skills/devrites-browser-proof/SKILL.md`](../../../devrites-browser-proof/SKILL.md)) and
|
|
87
|
+
describe the screenshot. A path is not proof; the observation is.
|
|
88
|
+
- **No measurement → no DX claim**, and usually no finding above Suggestion. "Feels confusing" is
|
|
89
|
+
a hypothesis to test, not a verdict.
|
|
90
|
+
|
|
91
|
+
## The gate — severity by who-pays
|
|
92
|
+
|
|
93
|
+
DX findings carry the standard labels (Critical / Important / Suggestion / Nit / FYI), scaled to
|
|
94
|
+
the cost the consumer bears, not to how polished it feels:
|
|
95
|
+
|
|
96
|
+
- A **public/external contract that ships broken or wrong** — a documented command that errors, an
|
|
97
|
+
endpoint whose response contradicts its contract, a getting-started flow that can't complete — is
|
|
98
|
+
**Important**, and **Critical** when it's a frozen public surface (the principles-gated public-API
|
|
99
|
+
invariant, [`principles.md`](principles.md)) or an irreversible break.
|
|
100
|
+
- A **measured DX regression** against the predicted scorecard with no recorded reason is a
|
|
101
|
+
finding the boomerang surfaces at seal — at least **Important** when it lands on a public surface.
|
|
102
|
+
- An **unactionable error message** on a developer-facing failure path is **Important** — the
|
|
103
|
+
on-call test ([`observability.md`](observability.md)) applied to the consumer instead of the operator.
|
|
104
|
+
- Inconsistent-but-working ergonomics, a thin doc, a missable default → **Suggestion**, unless the
|
|
105
|
+
spec made it acceptance.
|
|
106
|
+
|
|
107
|
+
## The artifact — `devex.md`
|
|
108
|
+
|
|
109
|
+
When a developer-facing surface is in scope, the workspace carries `devex.md`: the **predicted**
|
|
110
|
+
scorecard (from `/rite-vet`), the **measured** scorecard with evidence (from `/rite-prove`), and
|
|
111
|
+
the **boomerang delta** (reconciled at `/rite-seal`). Absent surface → no `devex.md`, and the gate
|
|
112
|
+
passes silently — never block a change for the *absence* of a DX surface, the same no-op discipline
|
|
113
|
+
as the principles and spec-grammar gates.
|
|
114
|
+
|
|
115
|
+
## Scope discipline
|
|
116
|
+
|
|
117
|
+
Review the developer-facing surface the change *touches*. A surface the diff didn't change is not
|
|
118
|
+
this change's job; a project-wide DX audit (every endpoint, the whole CLI) is its own effort —
|
|
119
|
+
record it as a follow-up, don't smuggle it into an unrelated change.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Development workflow
|
|
2
|
+
|
|
3
|
+
Ship small, integrate often, keep the main branch releasable. This is the general
|
|
4
|
+
engineering loop the DevRites feature lifecycle (spec → define → build → prove → polish →
|
|
5
|
+
review → seal → ship) runs on top of.
|
|
6
|
+
|
|
7
|
+
## Work in small batches
|
|
8
|
+
- Break work into thin, independently shippable slices and integrate them frequently —
|
|
9
|
+
ideally merging to the main branch at least once a day.
|
|
10
|
+
- Small batches shrink merge pain, surface integration problems early, and get real
|
|
11
|
+
reviews. Large batches hide defects and stall.
|
|
12
|
+
|
|
13
|
+
## Short-lived branches, trunk always green
|
|
14
|
+
- Prefer short-lived branches off the main branch (trunk-based). Long-running branches
|
|
15
|
+
drift and create painful merges.
|
|
16
|
+
- The main branch is **always in a releasable state**. Validate every change through a
|
|
17
|
+
**fast, reliable CI pipeline** (tests + build) before it merges.
|
|
18
|
+
- Hide incomplete work behind a **feature flag / toggle** rather than a long branch, so
|
|
19
|
+
partial work can land without blocking releases or breaking the trunk.
|
|
20
|
+
|
|
21
|
+
## Review gate
|
|
22
|
+
- Every change is reviewed before merge (see `code-review.md`). Keep reviews fast — slow
|
|
23
|
+
reviews push people back toward big, risky batches.
|
|
24
|
+
- Set expectations on PR size and merge cadence: small, frequent, single-concern.
|
|
25
|
+
|
|
26
|
+
## Definition of done
|
|
27
|
+
The **Definition of Done** is the project's *standing bar* — the floor every change clears,
|
|
28
|
+
distinct from a slice's **acceptance criteria** (which change per slice and say what *this* work
|
|
29
|
+
must do). Acceptance criteria answer "did we build the right thing"; the DoD answers "is it
|
|
30
|
+
shippable at all". The bar does not move with deadline pressure — a Definition of Done that gets
|
|
31
|
+
renegotiated each time is not one. Apply it in tiers so the cost matches the scope:
|
|
32
|
+
|
|
33
|
+
- **Every slice** — Correctness + Quality: meets its acceptance criteria with **evidence**
|
|
34
|
+
(tests/build/runtime — see `testing.md`), behaviour verified at runtime not just compiled; tests
|
|
35
|
+
and build green in CI; reviewed and **within scope, no unrelated refactor snuck in**; edge and
|
|
36
|
+
error paths handled, not only the happy path.
|
|
37
|
+
- **Every feature** — Integration + Documentation: works with the rest of the system, migrations/
|
|
38
|
+
config/flags accounted for, backward compatibility considered for any public-interface change;
|
|
39
|
+
docs/comments touched are updated (`documentation.md`) and describe the *current state in timeless
|
|
40
|
+
language*, not the change history.
|
|
41
|
+
- **Every release** — Ship-readiness: security reviewed for any untrusted input/auth/data
|
|
42
|
+
(`security.md`), observability on new critical paths (`observability.md`), a **rollback for
|
|
43
|
+
anything risky**, and a **human has reviewed and approved before merge**.
|
|
44
|
+
|
|
45
|
+
Two invariants across all tiers: evidence post-dates the code it proves — edits made after
|
|
46
|
+
`/rite-prove` (polish/review) require re-proof before seal, stale evidence is not proof; and
|
|
47
|
+
"tests pass" is not a synonym for done. "Code written" is not done. "Proven and reviewed" is.
|
|
48
|
+
|
|
49
|
+
## Incremental delivery
|
|
50
|
+
Deliver a working end-to-end path each slice, then expand. Avoid the "90% done, nothing
|
|
51
|
+
proven" pile-up — one finished, verified slice beats five half-built ones.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Documentation
|
|
2
|
+
|
|
3
|
+
Write the documentation that saves the next person time — no more, no less.
|
|
4
|
+
|
|
5
|
+
## Explain why, keep it current
|
|
6
|
+
- Document **intent and decisions**, not a restatement of the code. The *why* is what
|
|
7
|
+
can't be recovered from reading the source.
|
|
8
|
+
- Out-of-date docs are worse than none. Update docs in the same change that changes the
|
|
9
|
+
behavior; stale docs erode trust in all docs.
|
|
10
|
+
|
|
11
|
+
## Record decisions
|
|
12
|
+
- Capture significant choices and their rationale (an ADR-style note: context, decision,
|
|
13
|
+
consequences). Future readers need to know *why this and not the obvious alternative*.
|
|
14
|
+
DevRites records these in `decisions.md`.
|
|
15
|
+
- Note the trade-off you accepted and what would change the decision.
|
|
16
|
+
- **The rejected alternatives are the highest-value part.** Anyone can read the decision from the
|
|
17
|
+
code; only the ADR records the options you weighed and *why each lost*. List them with the reason
|
|
18
|
+
each was rejected, or the note answers nothing the source doesn't already show.
|
|
19
|
+
- **An ADR has a lifecycle:** `PROPOSED → ACCEPTED → SUPERSEDED / DEPRECATED`. When a decision
|
|
20
|
+
changes, write a **new** ADR that references and supersedes the old one — never edit or delete the
|
|
21
|
+
original, or you erase the record of why the project once chose differently.
|
|
22
|
+
|
|
23
|
+
## What to document
|
|
24
|
+
- **Public surfaces**: APIs, module boundaries, and config — inputs, outputs, errors,
|
|
25
|
+
and gotchas. Writing the contract down is the first test of the design: documenting a public
|
|
26
|
+
interface surfaces its rough edges before the code sets around them.
|
|
27
|
+
- **READMEs that actually run**: setup, the real commands to build/test/run, and how to
|
|
28
|
+
get a working environment. Keep examples copy-pasteable and correct.
|
|
29
|
+
- **Non-obvious constraints**: invariants, ordering requirements, "do not call X before
|
|
30
|
+
Y", and known limitations.
|
|
31
|
+
|
|
32
|
+
## Keep it lean
|
|
33
|
+
- Don't document the obvious or duplicate what the type signatures already say.
|
|
34
|
+
- Prefer one good example over three paragraphs of prose.
|
|
35
|
+
- Put long reference material where it's loaded on demand, not inline everywhere.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Edge-case trace
|
|
2
|
+
|
|
3
|
+
Use this when a diff changes branching logic, boundaries, validation, deletion, or a claim that a path is safe.
|
|
4
|
+
|
|
5
|
+
## Trace
|
|
6
|
+
|
|
7
|
+
1. **Scope the changed surface.** Name the changed function/API/state/config and the nearest observable caller.
|
|
8
|
+
2. **Enumerate explicit paths.** Walk each `if`/`switch`/loop/error branch and boundary value the changed surface handles.
|
|
9
|
+
3. **Enumerate fixed-set siblings.** If the change special-cases members of a known set — enum values, statuses, sentinels, flags, roles, modes — list the untouched siblings too. A handled `pending`/`failed` branch makes `success` an implicit branch to check.
|
|
10
|
+
4. **Check deletion contracts.** For removed or replaced code, name the behavior or contract it carried and where the diff re-establishes it. If it was intentionally retired, cite the spec/decision that retires it.
|
|
11
|
+
5. **Report only reachable gaps.** A finding needs `file:line`, trigger condition, missing guard/handling, and concrete consequence. If the path is already handled, drop it silently.
|
|
12
|
+
|
|
13
|
+
## Output shape
|
|
14
|
+
|
|
15
|
+
```md
|
|
16
|
+
[Important] path:line — <trigger> reaches <unhandled path>; add <minimal guard/handling>. Consequence: <what breaks>.
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Use the caller's severity scale. Do not create a separate edge-case score.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Elicitation — a move-set for the thinking phases
|
|
2
|
+
|
|
3
|
+
The thinking phases (`/rite-temper` on the spec, `/rite-vet` on the plan) default to one shape each
|
|
4
|
+
— a pre-mortem, a plan review. That's a floor, not a ceiling. When a section needs deeper thought,
|
|
5
|
+
this is the menu you reach into: named reasoning techniques, each with the shape it produces, so
|
|
6
|
+
"make this stronger" becomes a concrete move instead of a vibe.
|
|
7
|
+
|
|
8
|
+
## How to use it (progressive — no ceremony by default)
|
|
9
|
+
1. Look at the **one section** in front of you (a requirement, a risk, an estimate, a boundary).
|
|
10
|
+
2. Read its **risk**, then pull the 3–5 techniques below whose *When to reach for it* matches.
|
|
11
|
+
3. Present them as a short numbered menu; the human picks one (or `skip`).
|
|
12
|
+
4. Run that technique on that section, apply the result, move on.
|
|
13
|
+
|
|
14
|
+
Selection is by the section's risk, not taste. Reach for the row that fits:
|
|
15
|
+
|
|
16
|
+
| The section is… | Reach for |
|
|
17
|
+
|---|---|
|
|
18
|
+
| an irreversible / boundary / auth / data-model decision | Red-Team vs Blue-Team · Assumption Audit · Pre-Mortem |
|
|
19
|
+
| a vague or contested requirement | Steelman-then-Attack · Devil's Advocate · Five Whys |
|
|
20
|
+
| an estimate, sizing, or a "how long / how risky" | Delphi · Reference-Class Forecast |
|
|
21
|
+
| a design with more than one plausible shape | Tournament (A vs B) · Inversion · Analogy Mapping |
|
|
22
|
+
| a spec that feels *too* big or *too* small | Scope Extremes (MVP vs Gold-plate) · YAGNI Pass |
|
|
23
|
+
| a risk surface you suspect is under-explored | Chaos Scenarios · Edge-Case Hunt · Second-Order Effects |
|
|
24
|
+
|
|
25
|
+
## The techniques
|
|
26
|
+
|
|
27
|
+
Each entry is **name — when to reach for it — the shape it produces** (`→` reads "then").
|
|
28
|
+
|
|
29
|
+
### Sharpening a claim
|
|
30
|
+
- **Steelman-then-Attack** — a requirement or approach you're inclined to accept. Build the
|
|
31
|
+
*strongest* case for it → then attack that strongest form. Survives → keep; falls → revise.
|
|
32
|
+
- **Devil's Advocate** — consensus formed too fast. One voice argues the opposite in good faith →
|
|
33
|
+
surface the objection the room skipped.
|
|
34
|
+
- **Assumption Audit** — a plan resting on unstated beliefs. List every assumption the section
|
|
35
|
+
makes → mark each *load-bearing / verified / unverified* → the unverified load-bearing ones are
|
|
36
|
+
the work.
|
|
37
|
+
- **Five Whys** — a stated requirement whose *reason* is fuzzy. Ask "why" five times down from the
|
|
38
|
+
ask → reach the root need (often narrower or different than the surface ask).
|
|
39
|
+
|
|
40
|
+
### Stress-testing a decision
|
|
41
|
+
- **Pre-Mortem** — before committing an irreversible choice. Assume it's six months later and this
|
|
42
|
+
failed → write the failure story → each cause becomes a mitigation or a blocking question. (This
|
|
43
|
+
is `/rite-temper`'s default; the others deepen it.)
|
|
44
|
+
- **Red-Team vs Blue-Team** — a security, trust-boundary, or adversarial-input surface.
|
|
45
|
+
`defense → attack → hardening`: state the defense, attack it as a hostile party, harden the gap.
|
|
46
|
+
- **Inversion** — "how do we make X good?" stalls. Ask instead "how would we *guarantee X fails*?"
|
|
47
|
+
→ invert each failure into a requirement.
|
|
48
|
+
- **Second-Order Effects** — a change that touches shared surface. For each first-order effect ask
|
|
49
|
+
"and then what?" twice → surface the downstream consequence the diff hides.
|
|
50
|
+
|
|
51
|
+
### Sizing and estimating
|
|
52
|
+
- **Delphi** — an estimate one person is anchoring. Gather independent estimates *without* seeing
|
|
53
|
+
each other → reveal → discuss the spread → re-estimate → converge. Kills anchoring.
|
|
54
|
+
- **Reference-Class Forecast** — "this'll be quick." Find 3 past changes of the same *class* → use
|
|
55
|
+
their actual cost as the base rate, not the inside view.
|
|
56
|
+
|
|
57
|
+
### Widening the option space
|
|
58
|
+
- **Tournament (A vs B)** — two plausible designs. Put them head-to-head on the *decision hinge*
|
|
59
|
+
(the one axis that actually differs) → pick on that axis, not on a feature checklist.
|
|
60
|
+
- **Analogy Mapping** — a novel problem. "What is this *like* that's already solved?" → borrow the
|
|
61
|
+
solved structure, note where the analogy breaks.
|
|
62
|
+
- **Scope Extremes** — a spec of uncertain size. Describe the *MVP* (smallest thing that ships
|
|
63
|
+
value) and the *gold-plated* version → the right scope is usually named by the gap between them.
|
|
64
|
+
- **YAGNI Pass** — a plan carrying "might need it later." For each speculative piece, demand a
|
|
65
|
+
*current* acceptance criterion → no criterion, cut it to a follow-up.
|
|
66
|
+
|
|
67
|
+
### Finding what's missing
|
|
68
|
+
- **Edge-Case Hunt** — a happy-path-shaped spec. Walk empty / boundary / invalid / concurrent /
|
|
69
|
+
huge-or-weird input for each element → each uncovered case is a missing criterion.
|
|
70
|
+
- **Chaos Scenarios** — a system with external dependencies. "What if the DB is down / the API
|
|
71
|
+
times out / the clock jumps / the input is hostile?" → each becomes a failure-mode requirement.
|
|
72
|
+
- **Completeness Critic** — end of a section. Ask only "what's *missing* — a modality not covered, a
|
|
73
|
+
claim not verified, a flow with no path?" → the answer is the next round of work.
|
|
74
|
+
|
|
75
|
+
## The one rule
|
|
76
|
+
Run the technique on the **section in front of you**, not the whole document — a move applied to
|
|
77
|
+
everything is a move applied to nothing. Record what it changed in the phase artifact (a new
|
|
78
|
+
requirement, a mitigation, a blocking question), not just that you ran it.
|
|
79
|
+
|
|
80
|
+
A project can append its own house techniques to this file — same three-column shape.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Error handling
|
|
2
|
+
|
|
3
|
+
Errors are part of the contract, not an afterthought. Make failure loud, local, and
|
|
4
|
+
recoverable.
|
|
5
|
+
|
|
6
|
+
## Fail fast
|
|
7
|
+
- Validate preconditions at the top; stop the moment state is invalid, close to the root
|
|
8
|
+
cause. Don't let bad data propagate and surface as a confusing failure three layers
|
|
9
|
+
later.
|
|
10
|
+
|
|
11
|
+
## No silent catches
|
|
12
|
+
- Never swallow an error to make a problem "go away" — that hides bugs and corrupts
|
|
13
|
+
state silently.
|
|
14
|
+
- Catch the **narrowest** error you can actually handle, not a blanket catch-all. A
|
|
15
|
+
bare/broad catch masks unrelated failures.
|
|
16
|
+
- If you catch, either recover meaningfully, or rethrow/wrap with added context. Don't
|
|
17
|
+
log-and-continue past an error you didn't handle.
|
|
18
|
+
|
|
19
|
+
## Meaningful messages
|
|
20
|
+
- Error messages state what failed, the relevant context (ids, inputs — not secrets),
|
|
21
|
+
and ideally how to recover. Cryptic messages cost hours.
|
|
22
|
+
- Distinguish *expected* failures (validation, not-found) from *unexpected* (bugs);
|
|
23
|
+
handle the first as flow, surface the second.
|
|
24
|
+
|
|
25
|
+
## Fail closed (security-relevant paths)
|
|
26
|
+
- On error in an auth/permission/transaction path, **deny and roll back** — never
|
|
27
|
+
default to granting access or committing partial state.
|
|
28
|
+
|
|
29
|
+
## Logging
|
|
30
|
+
- Log key events (failures, access violations, validation errors) with enough context to
|
|
31
|
+
debug. Prefer structured logs (key/value or JSON) over string soup.
|
|
32
|
+
- **Never log secrets, credentials, tokens, or personal data.** Show users a clear,
|
|
33
|
+
non-revealing message; keep the detail in the logs for the team.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Git workflow
|
|
2
|
+
|
|
3
|
+
History is documentation. Keep it clean, atomic, and readable.
|
|
4
|
+
|
|
5
|
+
## Conventional Commits
|
|
6
|
+
Format: `type(scope): subject`
|
|
7
|
+
- **type**: `feat fix docs style refactor perf test build ci chore revert` (lower-case).
|
|
8
|
+
- **scope**: the area changed (lower-case).
|
|
9
|
+
- **subject**: imperative mood, no leading capital, no trailing period
|
|
10
|
+
("add export endpoint", not "Added export endpoint.").
|
|
11
|
+
- Keep the header short (~50, hard cap ~72). Put the *why* in the body, wrapped, after a
|
|
12
|
+
blank line. Reference issues in the footer.
|
|
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
|
+
## Atomic commits
|
|
24
|
+
- One logical change per commit; it should build and pass tests on its own.
|
|
25
|
+
- Don't mix refactor + behavior change in one commit — split them so each is reviewable
|
|
26
|
+
and revertible.
|
|
27
|
+
|
|
28
|
+
## Small, focused branches/PRs
|
|
29
|
+
- One concern per branch. Short-lived; rebase/merge per the project's convention.
|
|
30
|
+
- Keep PRs small (see `code-review.md`) so they get a real review.
|
|
31
|
+
|
|
32
|
+
## Change summary — prove the scope
|
|
33
|
+
When you hand back a change, state what you deliberately left alone, not only what you touched.
|
|
34
|
+
A **"Things I didn't touch (intentionally)"** line — the adjacent smells you noticed and declined
|
|
35
|
+
to fix — proves the diff is feature-scoped ([`core.md`](core.md) rule 7) and matches
|
|
36
|
+
`touched-files.md`, rather than an unsolicited renovation the reviewer has to untangle from the
|
|
37
|
+
real change. Noticed-but-not-fixed becomes an FYI follow-up, never a silent addition to this diff.
|
|
38
|
+
|
|
39
|
+
## Merge conflict recovery
|
|
40
|
+
When git is mid-merge or mid-rebase, recover before other workflow work:
|
|
41
|
+
|
|
42
|
+
1. Inspect state: `git status --short --branch`, then note whether this is a merge or rebase.
|
|
43
|
+
2. For each conflicted file, identify **our intent** and **their intent** before editing.
|
|
44
|
+
3. Resolve each hunk by preserving both intents when possible; if intents conflict, pick one and
|
|
45
|
+
record the trade-off in the commit/PR body.
|
|
46
|
+
4. `git add` the resolved files, then run the smallest relevant checks.
|
|
47
|
+
5. Finish with `git merge --continue` or `git rebase --continue`; abort only when the chosen
|
|
48
|
+
branch direction is wrong, not because a hunk is annoying.
|
|
49
|
+
|
|
50
|
+
## Versioning & changelog
|
|
51
|
+
- **The version is a promise.** Semver encodes what a consumer may rely on. A "patch" that
|
|
52
|
+
changes behaviour someone depended on is a major wearing a disguise — every observable behaviour
|
|
53
|
+
is a contract (Hyrum's law, [`deprecation.md`](deprecation.md)). When unsure whether a change is
|
|
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.
|
|
61
|
+
|
|
62
|
+
## Never commit
|
|
63
|
+
- Secrets, credentials, tokens, or `.env` files. If one lands in history, rotate it and
|
|
64
|
+
scrub it — deleting the file in a later commit is not enough.
|
|
65
|
+
- Generated artifacts, dependencies, or large binaries that belong in ignore rules.
|