devrites 2.6.1 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +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 +224 -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 +145 -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/canonical_ac_ids_test.go +44 -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 -912
- 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 +82 -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 +110 -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 +64 -71
- 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 +159 -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 +219 -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 +180 -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 +171 -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 +231 -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 +192 -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,105 @@
|
|
|
1
|
+
# Skill authoring
|
|
2
|
+
|
|
3
|
+
Use this when creating or editing DevRites skills.
|
|
4
|
+
|
|
5
|
+
## Distribution
|
|
6
|
+
|
|
7
|
+
DevRites is installed through the npm package (`npx devrites ...`). Claude Code
|
|
8
|
+
and Codex files are generated host artifacts copied by that installer, never
|
|
9
|
+
Claude/Codex plugin-store surfaces. Edit the canonical Claude-authored pack sources,
|
|
10
|
+
rebuild host artifacts, then validate.
|
|
11
|
+
|
|
12
|
+
## Surface lifecycle
|
|
13
|
+
|
|
14
|
+
- **Promoted** — shipped in `pack/`, documented in `docs/skills.md` and
|
|
15
|
+
`docs/command-map.md`, and covered by validation.
|
|
16
|
+
- **Draft** — local/research material outside the shipped pack.
|
|
17
|
+
- **Deprecated** — shipped only as a compatibility bridge with a replacement and
|
|
18
|
+
removal note.
|
|
19
|
+
- **Research** — notes under `docs/research/`; never installed.
|
|
20
|
+
|
|
21
|
+
## Description
|
|
22
|
+
|
|
23
|
+
The description is an invocation pointer, not documentation.
|
|
24
|
+
|
|
25
|
+
- **Model-invoked** skills pay context load so the agent or another skill can reach them;
|
|
26
|
+
omit `disable-model-invocation` and give them trigger-bearing descriptions.
|
|
27
|
+
- **Explicit-only** skills pay human cognitive load instead; set
|
|
28
|
+
`disable-model-invocation: true`, keep the description a human summary, and expose them
|
|
29
|
+
through `/rite`. The Codex generator must map this to
|
|
30
|
+
`policy.allow_implicit_invocation: false` without stubbing a public description.
|
|
31
|
+
- Keep public model-invoked skills under 90 words, internal specialists under 75,
|
|
32
|
+
explicit-only skills under 30, and `devrites-lib` under 60.
|
|
33
|
+
- Front-load one stable leading word that is also used in prompts/docs when that concept
|
|
34
|
+
should trigger the skill.
|
|
35
|
+
- Use one clear trigger branch per phrase; repeated `Use when` or `Not for` means the branch should collapse or move into the body.
|
|
36
|
+
- State the **defining constraint** — the one fact that separates this skill from its nearest sibling (e.g. `/rite-seal` decides, `/rite-ship` mutates git). It is the strongest trigger discriminator the routing evals measure.
|
|
37
|
+
- Put examples, edge cases, and rationale in `SKILL.md` body or a reference file, not in frontmatter.
|
|
38
|
+
|
|
39
|
+
## Body
|
|
40
|
+
|
|
41
|
+
- Put ordered work as steps, each ending in a checkable completion criterion.
|
|
42
|
+
- Move branch-only reference behind a direct file pointer.
|
|
43
|
+
- Keep one meaning in one place; prefer a shared reference over repeated prose.
|
|
44
|
+
- Add an explicit setup/engine pointer only where the skill produces *wrong* output without
|
|
45
|
+
the config; where it merely sharpens output, plain prose ("the conventions ledger, if
|
|
46
|
+
present") is enough — cargo-culted pointers spread as sediment.
|
|
47
|
+
|
|
48
|
+
## Router and docs
|
|
49
|
+
|
|
50
|
+
- Public `rite-*` skills must appear in the `/rite` router, `docs/skills.md`,
|
|
51
|
+
and `docs/command-map.md`.
|
|
52
|
+
- Internal `devrites-*` skills must stay out of the public command menu unless
|
|
53
|
+
named as implementation detail.
|
|
54
|
+
- A public skill's docs card states purpose, when to invoke, where it fits,
|
|
55
|
+
its defining constraint (as plain prose, never a labelled aside), and what
|
|
56
|
+
evidence proves completion. Do not copy the full `SKILL.md` process into docs.
|
|
57
|
+
- Model-invoked skills need positive/negative implicit-routing evals. Explicit-only
|
|
58
|
+
public skills need direct-command evals; non-workflow libraries are exempt explicitly.
|
|
59
|
+
|
|
60
|
+
## Source intake
|
|
61
|
+
|
|
62
|
+
External skill packs, articles, and examples are references, not authority.
|
|
63
|
+
|
|
64
|
+
- Record source, commit/date, and files read in `docs/research/`.
|
|
65
|
+
- Adopt the DevRites principle, not foreign names or workflow chains.
|
|
66
|
+
- Name rejected ideas so future maintainers do not re-litigate them.
|
|
67
|
+
- Add a validator or eval when the adoption creates a durable product contract.
|
|
68
|
+
|
|
69
|
+
## Match the form to the failure
|
|
70
|
+
|
|
71
|
+
Pick the instruction form from the *observed* failure, not by habit:
|
|
72
|
+
|
|
73
|
+
- Agent **violates a rule under pressure** → hard guardrail + rationalization rebuttal
|
|
74
|
+
(the `anti-patterns.md` table form) + a red-flag stop list.
|
|
75
|
+
- Output has the **wrong shape** (bloated, buried, missing emphasis) → a positive recipe or
|
|
76
|
+
template with REQUIRED slots. Prohibitions backfire here — wording tests show a "don't"
|
|
77
|
+
list produces *more* of the unwanted shape than no guidance at all.
|
|
78
|
+
- Agent **omits a required element** → a structural slot in the artifact template, not a
|
|
79
|
+
prose reminder.
|
|
80
|
+
- Behavior should **depend on a condition** → a conditional keyed to an observable
|
|
81
|
+
predicate, not an unconditional rule with exemption clauses ("unless it matters" reopens
|
|
82
|
+
the negotiation).
|
|
83
|
+
|
|
84
|
+
## Wording evals
|
|
85
|
+
|
|
86
|
+
A wording change to behavior-shaping content is a code change — prove it:
|
|
87
|
+
|
|
88
|
+
1. **Baseline first (no-guidance control).** Run the scenario without the new wording; if
|
|
89
|
+
the control doesn't exhibit the failure, the guidance is a no-op — don't author it.
|
|
90
|
+
2. **≥5 reps per variant, fresh context each.** Single samples lie; read every flagged run.
|
|
91
|
+
3. **Variance is a signal.** Five runs, five interpretations = the wording isn't binding —
|
|
92
|
+
rewrite, don't average.
|
|
93
|
+
|
|
94
|
+
## Pruning
|
|
95
|
+
|
|
96
|
+
Delete no-op instructions the model already follows. Keep positive target behavior; use prohibitions only for hard guardrails.
|
|
97
|
+
|
|
98
|
+
Read a draft for its **negative space**: every decision the skill declines to make is
|
|
99
|
+
delegated to the model's priors, not left neutral. Decide each silence deliberately — fill
|
|
100
|
+
it, or leave it open as a real branch.
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
## Contribution preflight
|
|
104
|
+
|
|
105
|
+
New skills are expensive routing surface. Before adding one, document the catalog search, why a reference inside an existing skill is insufficient, required eval coverage, host command parity, and whether the surface is public `rite-*` or internal `devrites-*`. Public commands need docs, evals, generated Claude/Codex artifacts, and a reply-contract marker. Internal skills need a clear trigger boundary and "when not to use" section. Agents need role/scope, read/write mode, output format, and composition block; only `devrites-slice-wright` may write.
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# Spec grammar — testable requirements, parseable by tooling
|
|
2
|
+
|
|
3
|
+
Acceptance criteria are the contract the seal checks ([`testing.md`](testing.md),
|
|
4
|
+
[`code-review.md`](code-review.md)). Prose criteria work, but a requirement written as free
|
|
5
|
+
text is graded by a human reading carefully — and an ambiguous one ("handle errors
|
|
6
|
+
gracefully") slips past every gate because nothing can falsify it. This rule adds an
|
|
7
|
+
**optional, recommended structure** that makes a behavioral requirement testable by
|
|
8
|
+
construction and parseable by a deterministic linter, so the spec phase catches a malformed
|
|
9
|
+
requirement before `/rite-define` plans against it.
|
|
10
|
+
|
|
11
|
+
It is the grammar counterpart to [`testing.md`](testing.md): testing says *prove every
|
|
12
|
+
behavior*; this says *write each behavior so it can be proven*.
|
|
13
|
+
|
|
14
|
+
## Progressive rigor — when to use the structured form
|
|
15
|
+
|
|
16
|
+
Match the rigor to the stakes; don't pay grammar ceremony for a one-liner.
|
|
17
|
+
|
|
18
|
+
- **Simple / routine change** — the flat checklist form is correct and stays. One bullet per
|
|
19
|
+
criterion, each tagged with an `AC-###` id:
|
|
20
|
+
```markdown
|
|
21
|
+
## Acceptance criteria
|
|
22
|
+
- [ ] AC-001: export returns a CSV with a header row
|
|
23
|
+
- [ ] AC-002: an empty dataset returns 204, not an empty 200
|
|
24
|
+
```
|
|
25
|
+
- **Behavioral / high-risk / cross-boundary requirement** — auth, data model, state machine,
|
|
26
|
+
public API, money, a migration, anything with non-obvious edge cases — use the structured
|
|
27
|
+
**Requirement / Scenario** grammar below. The act of writing the WHEN/THEN forces the edge
|
|
28
|
+
cases into the open at spec time, where they're cheapest to resolve.
|
|
29
|
+
|
|
30
|
+
A spec mixes both: most criteria stay flat bullets; the two or three that carry real risk get
|
|
31
|
+
the structured treatment. **Absence of structured requirements is never a failure** — the
|
|
32
|
+
validator no-ops on a flat-bullet spec, the same discipline as the principles gate
|
|
33
|
+
([`principles.md`](principles.md)).
|
|
34
|
+
|
|
35
|
+
## The structured form
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
### Requirement: Session tokens expire after inactivity
|
|
39
|
+
The system SHALL reject any session token older than 15 minutes of inactivity.
|
|
40
|
+
|
|
41
|
+
#### Scenario: token past the inactivity window
|
|
42
|
+
- [ ] AC-004: **WHEN** a request presents a token whose last use was > 15m ago
|
|
43
|
+
**THEN** the request is rejected with 401 and the token is revoked
|
|
44
|
+
|
|
45
|
+
#### Scenario: token within the window
|
|
46
|
+
- [ ] AC-005: **WHEN** a request presents a token last used < 15m ago
|
|
47
|
+
**THEN** the request is served and the last-use timestamp advances
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The rules the validator enforces (`devrites-engine spec-validate`):
|
|
51
|
+
|
|
52
|
+
- **`### Requirement: <name>`** — a level-3 heading. Its block MUST carry a **SHALL** or
|
|
53
|
+
**MUST** statement (in the header or the body) describing the core behavior. Keep the name
|
|
54
|
+
descriptive and under ~50 characters.
|
|
55
|
+
- **Header identity is the key.** Requirement names are **unique** within a spec — tooling (and
|
|
56
|
+
any future spec sync) matches a requirement by its header text, so two requirements can't
|
|
57
|
+
share a name. Renaming a requirement is a remove + add, not an in-place edit, so the change
|
|
58
|
+
is visible.
|
|
59
|
+
- **`#### Scenario: <name>`** — every requirement owns **at least one**. A requirement with no
|
|
60
|
+
scenario is an assertion no test can target.
|
|
61
|
+
- **WHEN / THEN** — every scenario states a trigger (**WHEN**) and an observable outcome
|
|
62
|
+
(**THEN**); chain extra conditions with **AND**. Keywords are uppercase so they parse
|
|
63
|
+
unambiguously. A scenario missing either half isn't falsifiable.
|
|
64
|
+
|
|
65
|
+
## Behavior first — WHAT, not HOW
|
|
66
|
+
|
|
67
|
+
A spec requirement describes observable behavior, not the implementation that delivers it
|
|
68
|
+
(the spec stays technology-agnostic — see `rite-spec/reference/spec-template.md`). "**THEN**
|
|
69
|
+
respond 401" is behavior; "**THEN** call `AuthGuard.reject()`" leaks the design and locks the
|
|
70
|
+
plan before `/rite-define` has chosen it. Name the input, the observable output, and the state
|
|
71
|
+
change — not the function, class, or library. Implementation belongs in `plan.md`, not the
|
|
72
|
+
requirement.
|
|
73
|
+
|
|
74
|
+
Acceptance criteria are **surface-anchored**: they observe the outermost surface the user or
|
|
75
|
+
system can see. If the feature is an API contract, the THEN names the response shape/status; if it
|
|
76
|
+
is a UI flow, the THEN names the visible state. Internal rows, helper calls, and emitted logs can
|
|
77
|
+
support proof, but they are not the criterion unless the spec's surface is explicitly internal.
|
|
78
|
+
|
|
79
|
+
## How it composes (no new gate, no duplication)
|
|
80
|
+
|
|
81
|
+
- **`AC-###` ids nest inside scenarios.** Tag each scenario's checkable line with an `AC-###` id
|
|
82
|
+
exactly as the flat form does. The same `devrites-engine check-acceptance` grades it against `seal.md` at
|
|
83
|
+
the end of the lifecycle — this grammar checks the requirement's **shape**, that script
|
|
84
|
+
checks its **proof**. The two compose; neither replaces the other.
|
|
85
|
+
- **`/rite-prove` and `/rite-review` get concrete hooks.** Each scenario is one behavior to
|
|
86
|
+
prove and the test analyst's unit of "is this actually covered" — the WHEN/THEN maps
|
|
87
|
+
straight to an arrange/assert ([`testing.md`](testing.md)).
|
|
88
|
+
- **The spec-quality checklists still apply.** The grammar makes a requirement *parseable*; the
|
|
89
|
+
`checklists/<domain>.md` "unit tests for English" still score whether it's *complete and
|
|
90
|
+
measurable* ("is 'prominent' quantified?"). Structure doesn't excuse vagueness inside a THEN.
|
|
91
|
+
|
|
92
|
+
## Outcome metrics are not acceptance criteria
|
|
93
|
+
|
|
94
|
+
A **buildable** acceptance criterion names an observable behavior a slice delivers and a test
|
|
95
|
+
proves — "export returns a CSV with a header row", "a token past 15m is rejected with 401". An
|
|
96
|
+
**outcome metric** names a post-launch business result — "reduce support tickets 50%", "lift
|
|
97
|
+
signup conversion 3pts", "cut p95 latency in prod under real traffic". The distinction is not
|
|
98
|
+
pedantic: it decides what the coverage gate is allowed to check.
|
|
99
|
+
|
|
100
|
+
Tag only buildable criteria with an `AC-###` id. An outcome metric carries no id and lives under
|
|
101
|
+
a separate **`## Success metrics`** heading:
|
|
102
|
+
|
|
103
|
+
```markdown
|
|
104
|
+
## Acceptance criteria
|
|
105
|
+
- [ ] AC-001: export returns a CSV with a header row # buildable — a slice + a test
|
|
106
|
+
|
|
107
|
+
## Success metrics # outcome — no AC id, not slice-mapped
|
|
108
|
+
- Support tickets about export drop by half within a quarter
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Why the split earns its place: an outcome metric tagged `AC-###` poisons the coverage gate in
|
|
112
|
+
both directions. `devrites-engine analyze` flags it CRITICAL forever — no slice can `Satisfies:` a KPI —
|
|
113
|
+
so a genuinely complete plan reads as uncovered. And `devrites-engine check-acceptance` can never mark it
|
|
114
|
+
proven at `/rite-seal`, because no end-to-end test run inside the feature observes a quarter of
|
|
115
|
+
production traffic. The metric still matters — it's *why* the feature exists — but it belongs to
|
|
116
|
+
intent (`brief.md` / `spec.md` overview), not to the criteria the lifecycle mechanically proves.
|
|
117
|
+
The load-bearing test: **can one slice make this true and one test show it?** If no, it's a
|
|
118
|
+
success metric, not an acceptance criterion. (`analyze` scopes its coverage count to `AC-###`
|
|
119
|
+
ids, so an untagged `## Success metrics` line is correctly ignored by the gate.)
|
|
120
|
+
|
|
121
|
+
## The validator — `devrites-engine spec-validate`
|
|
122
|
+
|
|
123
|
+
Deterministic, zero-token. Run it on the workspace (or a spec path) at the spec readiness gate:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
devrites-engine spec-validate .devrites/work/<slug>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Exit codes: `0` valid (or no structured requirements — nothing to lint), `1` grammar
|
|
130
|
+
violation(s) with `file:line` locations, `2` usage, `5` missing `spec.md`. A non-zero exit is a
|
|
131
|
+
blocking spec-readiness failure: fix the requirement, never soften the check. It runs as part
|
|
132
|
+
of `/rite-spec`'s readiness gate and is safe to re-run any time the spec changes.
|
|
133
|
+
|
|
134
|
+
## Delta form — when the capability ledger already holds this behavior
|
|
135
|
+
|
|
136
|
+
The Requirement / Scenario block is the unit the **capability ledger** stores — the living
|
|
137
|
+
`.devrites/specs/<capability>/spec.md` record of *what the system does now*, folded in on ship
|
|
138
|
+
([ledger reference](../../../rite-ship/reference/ledger.md)). When a feature changes behavior a
|
|
139
|
+
ledger already describes, write its spec as **deltas against the ledger** instead of a flat
|
|
140
|
+
snapshot, so the change — not merely the end state — is explicit and the fold is unambiguous.
|
|
141
|
+
|
|
142
|
+
Group the structured `### Requirement:` blocks under three H2 sections, each tagged with the
|
|
143
|
+
capability it folds into. One feature spec MAY carry deltas across several capabilities:
|
|
144
|
+
|
|
145
|
+
```markdown
|
|
146
|
+
## ADDED Requirements — capability: theming
|
|
147
|
+
### Requirement: Dark mode honors the system preference
|
|
148
|
+
The system SHALL default to the OS colour-scheme on first load.
|
|
149
|
+
#### Scenario: no stored preference
|
|
150
|
+
- [ ] AC-010: **WHEN** a first-time visitor loads the app **THEN** the theme matches the OS setting
|
|
151
|
+
|
|
152
|
+
## MODIFIED Requirements — capability: settings-ui
|
|
153
|
+
### Requirement: Settings exposes a theme control
|
|
154
|
+
<the full new version of the requirement — not just the diff>
|
|
155
|
+
|
|
156
|
+
## REMOVED Requirements — capability: theming
|
|
157
|
+
### Requirement: Theme is hard-coded to light
|
|
158
|
+
Removed — superseded by system-preference detection.
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Fold semantics on `devrites-engine ledger sync` — **ADDED** appends, **MODIFIED** replaces the
|
|
162
|
+
same-named requirement, **REMOVED** deletes it. Matching is by **header identity** (the rule
|
|
163
|
+
above: names are unique and a rename is a remove + add), so the section MUST use the exact ledger
|
|
164
|
+
header text for MODIFIED / REMOVED.
|
|
165
|
+
|
|
166
|
+
- **The `— capability: <name>` suffix is the fold target.** Omit it and the fold defaults to the
|
|
167
|
+
feature slug — correct for a single-capability feature; name it explicitly when a feature spans
|
|
168
|
+
more than one, or when the capability differs from the slug.
|
|
169
|
+
- **Pick the kind against the current ledger, not from memory.** `devrites-engine ledger show
|
|
170
|
+
<capability>` prints what it holds. A real change marked ADDED yields two competing
|
|
171
|
+
requirements; new behavior marked MODIFIED has nothing to replace.
|
|
172
|
+
- **Greenfield stays flat.** A capability with no ledger entry is all-new — write plain
|
|
173
|
+
`### Requirement:` blocks with no delta H2; the first `ledger sync` seeds the capability as if
|
|
174
|
+
every block were ADDED. Never pay delta ceremony for behavior that has no prior record.
|
|
175
|
+
|
|
176
|
+
Validate the classification deterministically at the spec gate — `--against` points the linter at
|
|
177
|
+
the ledger root so it flags an ADDED that already exists or a MODIFIED/REMOVED that doesn't:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
devrites-engine spec-validate .devrites/work/<slug> --against .devrites/specs
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Exit `1` on a mismatch (a blocking spec-readiness failure); `0` when the deltas reconcile. The
|
|
184
|
+
plain-grammar checks (SHALL, WHEN/THEN, unique headers) run in the same pass — delta H2 headers
|
|
185
|
+
are transparent to them, so a flat spec and a delta spec lint identically.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Test proof checklist
|
|
2
|
+
|
|
3
|
+
- New behavior has an asserting test, preferably written before implementation.
|
|
4
|
+
- The test was seen fail for the right reason.
|
|
5
|
+
- Verification commands and relevant output are recorded.
|
|
6
|
+
- Regression, edge, and error paths match the acceptance criteria.
|
|
7
|
+
- Passing existing tests alone is not proof of the change.
|
|
8
|
+
|
|
9
|
+
Detailed standard: `testing.md`.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Testing
|
|
2
|
+
|
|
3
|
+
Tests are evidence. They exist to prove behavior and to catch regressions — not to hit a
|
|
4
|
+
coverage number.
|
|
5
|
+
|
|
6
|
+
## Shape: a pyramid
|
|
7
|
+
- **Many** fast, isolated unit tests at the base.
|
|
8
|
+
- **Some** integration tests for how components actually fit together.
|
|
9
|
+
- **Few** end-to-end tests for critical user journeys (they're slow and the most
|
|
10
|
+
flake-prone — reserve them for what matters).
|
|
11
|
+
|
|
12
|
+
Size by **resource cost**, not by folder. A **small** test runs in one process, no I/O — the
|
|
13
|
+
base of the pyramid, and the only size allowed to be many. A **medium** test touches the local
|
|
14
|
+
machine (filesystem, a container, `localhost`). A **large** test crosses the network or a real
|
|
15
|
+
external service — the flaky, slow tier E2E lives in. Push every behavior to the smallest size
|
|
16
|
+
that can still prove it; a behavior provable small but written large is a slow test you'll
|
|
17
|
+
learn to skip.
|
|
18
|
+
|
|
19
|
+
## Completeness — every behavior, element, and flow has a test (at the right level)
|
|
20
|
+
"Tested" means *every* observable behavior, *every* interactive element (input field,
|
|
21
|
+
checkbox, radio, select, toggle, button, actionable link), and *every* user flow has at
|
|
22
|
+
least one **asserting** test — not that a coverage % is hit. Completeness counts behaviors
|
|
23
|
+
covered, not lines executed: 100% line coverage can still leave a button's click untested,
|
|
24
|
+
and a button with one asserting unit test is "covered" at far less than 100% lines. Chase the
|
|
25
|
+
behavior, not the number.
|
|
26
|
+
|
|
27
|
+
Acceptance and tests are **surface-anchored**: assert the outermost surface the intent names. If the feature promised an API response, assert the API response; a database row behind it is supporting evidence, not proof.
|
|
28
|
+
|
|
29
|
+
Put each test at the level that proves it cheapest and most reliably (the pyramid above):
|
|
30
|
+
- **Element / field behavior** — validation, required, format, min/max, toggle on→off, select
|
|
31
|
+
options load + change fires, button enabled/disabled, handler runs → a **unit / component**
|
|
32
|
+
test. The bulk of element coverage lives here.
|
|
33
|
+
- **Wiring across a few components** — form submit → store → re-render → an **integration** test.
|
|
34
|
+
- **A critical end-to-end journey** — login, checkout, a destructive / data-loss path → **one
|
|
35
|
+
E2E** test. E2E is slow + flake-prone; reserve it for journeys, **never one-per-field**.
|
|
36
|
+
|
|
37
|
+
An interactive element or a user flow with **zero asserting test is a defect** — surfaced as an
|
|
38
|
+
unproven gap at `/rite-prove` and a NO-GO at `/rite-seal`, the same standing as an unproven
|
|
39
|
+
acceptance criterion. Assert what the element *does*, not that the markup exists.
|
|
40
|
+
|
|
41
|
+
## Assertion strength — a test that can't fail proves nothing
|
|
42
|
+
Completeness counts tests; strength makes them mean something. A test that passes for *any*
|
|
43
|
+
implementation is theatre — and it's the shape AI reaches for by default. Reject the weak forms:
|
|
44
|
+
|
|
45
|
+
- **No tautological assertions.** `expect(result).toBeDefined()` / `.not.toBeNull()` /
|
|
46
|
+
`assert x is not None` pass for almost any return value. Assert the **actual value or
|
|
47
|
+
observable effect** — `expect(total).toBe(42)`, the specific error thrown, the state changed,
|
|
48
|
+
the row written, the event emitted.
|
|
49
|
+
- **Don't assert the mock.** A test that stubs a dependency to return `X` then asserts `X` came
|
|
50
|
+
back tests the stub, not your code. Assert the real effect on real (or realistic) data.
|
|
51
|
+
- **Cover the unhappy edges, not just the happy path.** AI is strong on "valid input → success"
|
|
52
|
+
and weak on empty / boundary / invalid-state / long-or-weird input — write those explicitly.
|
|
53
|
+
- **Prove it can fail (fault injection).** For a critical or regression path, after green,
|
|
54
|
+
**break the code on purpose** (flip a comparison, drop a guard, return a constant) and confirm
|
|
55
|
+
the test goes **red**. A test never seen failing against broken code is unproven — this is
|
|
56
|
+
"see it fail first" extended past the happy path. Use the project's **mutation-testing** runner
|
|
57
|
+
to automate it where one exists; otherwise spot-check the criticals by hand.
|
|
58
|
+
- **Don't mirror the implementation.** A test whose assertions restate the code under test
|
|
59
|
+
(same constant, same formula, same branch) stays green even when the logic is wrong. Assert
|
|
60
|
+
an **independently-derived** expected value — reasoned from the spec, not copied from the code.
|
|
61
|
+
- **Don't grep the source.** A test that reads a source file as text and asserts it
|
|
62
|
+
`contains("foo")` proves a string exists, not that the behavior works — it passes on dead code
|
|
63
|
+
and breaks on a harmless rename. **Execute** the code and assert its effect; reserve text
|
|
64
|
+
scanning for genuinely textual artifacts (generated output, a committed manifest, a golden snapshot).
|
|
65
|
+
- **Coverage says "ran"; mutation says "checked".** Line coverage proves a line executed, not
|
|
66
|
+
that a test would catch it breaking. Where the project has a mutation runner, the changed-files
|
|
67
|
+
mutation gate (`devrites-engine mutation-gate`) certifies the suite would fail on a wrong implementation; a
|
|
68
|
+
surviving mutant is a behaviour no test actually checks.
|
|
69
|
+
|
|
70
|
+
## Never weaken a failing test (test integrity)
|
|
71
|
+
A failing test is a signal, not an obstacle. Never delete it, skip it (`it.skip`, `xit`,
|
|
72
|
+
`@pytest.mark.skip`, `t.Skip`, `#[ignore]`), mark it `xfail`, narrow the run with `.only`, or
|
|
73
|
+
loosen its assertions to turn the suite green. A red test means one of two things: the code is
|
|
74
|
+
wrong (fix the code) or the test is wrong (surface it as a blocking question and get the change
|
|
75
|
+
agreed) — never quietly make the red go away. A test weakened to clear a gate is a **Critical**
|
|
76
|
+
finding; `devrites-engine test-integrity` diffs the test files against the slice base and exits non-zero when
|
|
77
|
+
one is deleted, skipped, or loses assertions.
|
|
78
|
+
|
|
79
|
+
## The verification gap — green, but the test doesn't prove the change
|
|
80
|
+
Test-integrity catches reaching green by *weakening* a test. This catches the quieter failure: a
|
|
81
|
+
test that was never touched, is fully green, and still doesn't exercise the behavior that changed.
|
|
82
|
+
A passing suite is not proof the *change* is proven — the suite could pass identically with the
|
|
83
|
+
change reverted. Run this trace for each behavioral change in the diff:
|
|
84
|
+
|
|
85
|
+
1. **Screen for behavioral change.** What in this diff changes an observable output, not just its
|
|
86
|
+
shape? Treat a dependency bump, a build/config edit, or a data change as behavioral too — the
|
|
87
|
+
load-bearing change often isn't the line that looks important.
|
|
88
|
+
2. **Name what changed.** State the old behavior and the new one in one sentence each.
|
|
89
|
+
3. **Trace to the consumer.** Find where the changed code is actually called from.
|
|
90
|
+
4. **Inspect the consumer's test.** Does an *asserting*, surface-anchored test drive that consumer through the
|
|
91
|
+
**new** behavior — not merely execute the path, and not assert the old expectation still?
|
|
92
|
+
5. **Confirm the gap is real.** A finding is: `<change at file:line>` has no test that would go red
|
|
93
|
+
if it regressed — cite the test that *should* cover it and show what it misses. No general
|
|
94
|
+
advice; a gap you can't point at is not a finding (the verification gate applies).
|
|
95
|
+
|
|
96
|
+
A changed behavior with no test that would fail on its regression is an **unproven gap** — the same
|
|
97
|
+
standing as an untested element or an unproven acceptance criterion. `devrites-engine test-integrity`
|
|
98
|
+
emits an advisory when a diff changes source but touches no test file; that signal is a pointer to
|
|
99
|
+
run this trace, never a verdict on its own.
|
|
100
|
+
|
|
101
|
+
## Test behavior, not implementation
|
|
102
|
+
- Assert on observable behavior and public interfaces, not private internals — so a
|
|
103
|
+
refactor that preserves behavior keeps tests green.
|
|
104
|
+
- One behavior per test; name the test for the behavior. A failure should point straight
|
|
105
|
+
at what broke.
|
|
106
|
+
- Cover the unhappy paths: empty, boundary, error, permission-denied, and concurrency
|
|
107
|
+
cases — not just the happy path.
|
|
108
|
+
- **Test state, not interactions.** Assert the outcome (the value returned, the row written,
|
|
109
|
+
the event emitted), not the sequence of internal calls that produced it. A test that asserts
|
|
110
|
+
"method X was called then Y" locks in today's implementation and breaks on every refactor.
|
|
111
|
+
|
|
112
|
+
## DAMP over DRY in tests
|
|
113
|
+
Test code optimizes for a different reader than production code: someone staring at a failure who
|
|
114
|
+
needs the whole scenario in front of them. A test should read like a spec — arrange, act, assert,
|
|
115
|
+
visible in one screen. Prefer a little repetition over a clever shared helper that hides what the
|
|
116
|
+
test actually exercises; **D**escriptive **A**nd **M**eaningful **P**hrases beat **D**on't **R**epeat **Y**ourself
|
|
117
|
+
here. (This trades against production `coding-style.md` reuse-first on purpose — a shared fixture
|
|
118
|
+
that makes the reader scroll away to understand the case has cost more than the duplication saved.)
|
|
119
|
+
|
|
120
|
+
## Test doubles — reach for the real thing first
|
|
121
|
+
Prefer, in order: **real > fake > stub > mock**. Use the real collaborator when it's fast and
|
|
122
|
+
deterministic; a **fake** (an in-memory implementation that honors the contract) when it isn't; a
|
|
123
|
+
**stub** for a canned return; a **mock** (asserting *how* it was called) only at a true boundary
|
|
124
|
+
you own. Over-mocking is the failure mode: a suite stitched from mocks passes while production
|
|
125
|
+
breaks, because it tested the stubs, not the code (see "Don't assert the mock" above).
|
|
126
|
+
|
|
127
|
+
| Double it | Leave it real |
|
|
128
|
+
|---|---|
|
|
129
|
+
| The database, network, filesystem, clock, randomness | Pure functions and business logic |
|
|
130
|
+
| A third-party API or paid/rate-limited service | Your own internal utilities and transforms |
|
|
131
|
+
| Anything non-deterministic or slow | Validation and mapping under test |
|
|
132
|
+
|
|
133
|
+
## The Beyoncé Rule — if you liked it, you should have put a test on it
|
|
134
|
+
A refactor, a dependency bump, or CI is not responsible for catching your regressions — your tests
|
|
135
|
+
are. If a behavior matters, it has an asserting test that goes red when the behavior breaks;
|
|
136
|
+
otherwise the next person to touch the area is free to break it and every gate will stay green.
|
|
137
|
+
"It worked when I ran it" is not the same as "a test holds it." This is the completeness bar above,
|
|
138
|
+
stated as the rule you'll quote when a untested behavior regresses.
|
|
139
|
+
|
|
140
|
+
## See it fail first
|
|
141
|
+
For new behavior, watch the test fail for the *expected* reason before you make it pass.
|
|
142
|
+
A green test you never saw red proves nothing.
|
|
143
|
+
|
|
144
|
+
## Determinism — no flaky tests
|
|
145
|
+
- A flaky test is a broken test. Isolate and fix it immediately; don't paper over it with
|
|
146
|
+
retries or `sleep`.
|
|
147
|
+
- Mock/stub external services so tests are predictable and fast. Use stable selectors in
|
|
148
|
+
UI tests, not brittle positional ones.
|
|
149
|
+
- No hidden shared state or order-dependence between tests.
|
|
150
|
+
- **Seam the clock; never read it raw in a tested path.** Route wall-clock reads through one
|
|
151
|
+
injectable seam (an env override like `DEVRITES_NOW`, or an injected clock) so time/date-derived
|
|
152
|
+
output is pinned in tests. A raw `time.Now()` feeding output makes a golden snapshot rot at the
|
|
153
|
+
next day boundary — green today, red tomorrow, for no code change. (Live example: `resolve
|
|
154
|
+
next-qid` did exactly this until the seam landed — see ADR-0006.)
|
|
155
|
+
- **No elapsed-time assertions.** `assert elapsed < 200ms` / `took` under a threshold tests the
|
|
156
|
+
CI runner's load, not your code — flaky by construction. Assert the *result*, not the duration;
|
|
157
|
+
for ordering or concurrency use a deterministic signal (a fake clock, a channel), never a `sleep`.
|
|
158
|
+
|
|
159
|
+
## Use the project's tooling
|
|
160
|
+
Run the project's existing test commands and framework. Don't introduce a new test runner
|
|
161
|
+
to prove one change. If a project has no tests, propose the minimal setup — ask before
|
|
162
|
+
adding a framework.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Optional tooling — code intelligence, docs, memory
|
|
2
|
+
|
|
3
|
+
Every external tool DevRites can use is **optional**. Detect what's present, use the best fit
|
|
4
|
+
for the job, and **degrade gracefully to `Read` / `Grep` / `Glob`** (always available) when
|
|
5
|
+
nothing is. Never assume a tool is installed, never require installing one to run a phase, and
|
|
6
|
+
never block on a missing tool — the fallback path is a first-class path, not a failure.
|
|
7
|
+
|
|
8
|
+
DevRites is stack-agnostic and installs into arbitrary projects; an index or MCP server that
|
|
9
|
+
exists in one repo is absent in the next. Treat the tools below as accelerators you reach for
|
|
10
|
+
*when available*, not dependencies.
|
|
11
|
+
|
|
12
|
+
## Code intelligence — structure, placement, callers, impact, blast-radius, trace
|
|
13
|
+
|
|
14
|
+
For "where is X / what calls X / what would changing X break / how does X reach Y", reach for a
|
|
15
|
+
code-intelligence index when available. The three indexes below are **recommended, not
|
|
16
|
+
mandatory** — follow this order and skip any that isn't installed:
|
|
17
|
+
|
|
18
|
+
1. **codebase-memory-mcp — primary.** When available, answer the structural question here
|
|
19
|
+
**first**: `search_graph`, `trace_path`, `detect_changes` (git-diff → affected symbols +
|
|
20
|
+
blast radius), `get_architecture`, `get_code_snippet`, `query_graph`.
|
|
21
|
+
2. **Cross-verify with codegraph *and* graphify (both, when present).** Re-ask the same
|
|
22
|
+
structural question of `codegraph` (`.codegraph/`, `codegraph_*`) **and** `graphify`
|
|
23
|
+
(`graphify-out/`), and confirm they agree with the codebase-memory-mcp answer — especially
|
|
24
|
+
for load-bearing claims (blast radius, every caller of a thing you're about to change,
|
|
25
|
+
"nothing else uses this"). A disagreement between indexes is a signal, not noise: trust a
|
|
26
|
+
fresh read of the **live code** over any index, and investigate the gap before relying on it.
|
|
27
|
+
3. **Standard methods — the always-available fallback.** When none of the three indexes is
|
|
28
|
+
present — or to pin an exact reference an index is unsure of — use **LSP** (Claude Code Code
|
|
29
|
+
Intelligence: go-to-definition, find-references, hover / signature, diagnostics, document &
|
|
30
|
+
workspace symbols) plus **`Read` / `Grep` / `Glob`**, reading comprehensively rather than
|
|
31
|
+
stopping at the first match (see `core.md` rule 1).
|
|
32
|
+
|
|
33
|
+
Use whatever subset is installed: codebase-memory-mcp alone is fine; codebase-memory-mcp plus
|
|
34
|
+
one of the others still cross-verifies; none present → standard methods. The fallback path is a
|
|
35
|
+
first-class path — never block a phase on a missing index.
|
|
36
|
+
|
|
37
|
+
### Keeping the indexes fresh
|
|
38
|
+
|
|
39
|
+
An index only helps if it matches the live code; after edits, a stale graph manufactures the
|
|
40
|
+
very index-disagreement step 2 treats as a signal. DevRites keeps the three mechanical indexes
|
|
41
|
+
current automatically — the [`devrites-refresh-indexes`](../../../devrites-refresh-indexes/SKILL.md)
|
|
42
|
+
Stop hook incrementally reindexes whichever of codebase-memory-mcp, codegraph, and graphify
|
|
43
|
+
track the repo, at end of turn, in a detached process. It self-guards on changes, no-ops when no
|
|
44
|
+
index is present, and is disabled by `DEVRITES_REFRESH_INDEXES=off`. Force a synchronous refresh
|
|
45
|
+
— or re-run graphify's semantic pass after **doc** changes (`/graphify --update`) — via that
|
|
46
|
+
skill. Still trust a fresh read of the live code over any index when they disagree.
|
|
47
|
+
|
|
48
|
+
## Up-to-date library / framework docs — context7
|
|
49
|
+
|
|
50
|
+
When implementing against, choosing, or verifying an **external** library/framework whose
|
|
51
|
+
current API or version behaviour matters, use **context7 if available**: `resolve-library-id`
|
|
52
|
+
(library name + your question) → `query-docs` (the resolved id + the question).
|
|
53
|
+
|
|
54
|
+
context7 pairs with [`devrites-source-driven`](../../../devrites-source-driven/SKILL.md), it
|
|
55
|
+
doesn't replace it: the project's **installed / pinned source still wins** for the version the
|
|
56
|
+
project actually runs. Reach for context7 when the local source/docs are missing, or when you
|
|
57
|
+
need the *current upstream* behaviour the installed copy may predate. Record the fact + its
|
|
58
|
+
source in `decisions.md` / `evidence.md` the same way — a context7 lookup is a cited source,
|
|
59
|
+
not a memory.
|
|
60
|
+
|
|
61
|
+
## Up-to-date web facts — web search
|
|
62
|
+
|
|
63
|
+
When a **material decision** turns on a fact neither the codebase nor the installed docs can
|
|
64
|
+
answer — a common UX pattern, a standard/spec, a prevailing best practice, how comparable
|
|
65
|
+
products solve it, a pricing/compatibility fact — **search the web if a search tool is
|
|
66
|
+
available**, and fold the finding into the option you present the human (below). Order of
|
|
67
|
+
preference: **brave MCP is the primary** (`mcp__brave-search__brave_web_search`, or
|
|
68
|
+
`brave_local_search` for place/region queries); **fall back to the harness's native web search
|
|
69
|
+
only when brave MCP is unavailable** — Claude Code `WebSearch` / `WebFetch`, Codex `web_search`
|
|
70
|
+
(`--search` / `web_search = "live"` for fresh pages; its default `"cached"` mode serves an
|
|
71
|
+
OpenAI-indexed snapshot); else skip and log the open question. A web fact is a **cited source**,
|
|
72
|
+
not a memory — record the claim + its URL in `decisions.md` (or the option's rationale) exactly as
|
|
73
|
+
a context7 lookup is recorded.
|
|
74
|
+
|
|
75
|
+
Graceful degradation is the rule: no search tool present is a first-class path, never a
|
|
76
|
+
blocker. Search to *inform the human's decision*, not to replace it — the finding sharpens the
|
|
77
|
+
recommended option and its trade-off; the human still picks.
|
|
78
|
+
|
|
79
|
+
**Re-fetching a doc URL is cheap.** On Claude Code a `WebFetch` is transparently cached per project
|
|
80
|
+
and, on reuse, revalidated against the origin — the cached reading is replayed **only** on an HTTP
|
|
81
|
+
304 (unchanged), so a citation stays as sound as a fresh fetch without the round trip. Fetch freely;
|
|
82
|
+
don't skip a verification to save a request. Mechanism: the `devrites-source-cache` hooks
|
|
83
|
+
(`DEVRITES_SOURCE_CACHE=off` to disable); it pairs with
|
|
84
|
+
[`devrites-source-driven`](../../../devrites-source-driven/SKILL.md). (Claude-only — Codex has no
|
|
85
|
+
`WebFetch` tool to intercept, and its `web_search` already serves from a cached index, so the same
|
|
86
|
+
caching is built in there.)
|
|
87
|
+
|
|
88
|
+
## Architecture & decision memory — codebase-memory-mcp
|
|
89
|
+
|
|
90
|
+
Where a fast codebase map or a durable decision record helps, and codebase-memory-mcp is
|
|
91
|
+
available: `get_architecture` for an overview (languages, packages, routes, hotspots, clusters)
|
|
92
|
+
during `/rite-spec`, `/rite-define`, or `/rite-zoom-out`; `manage_adr` for an ADR-style record
|
|
93
|
+
at `/rite-define` / `/rite-seal`. This complements the workspace `decisions.md`; it never
|
|
94
|
+
replaces it — the workspace files remain the canonical source of truth.
|
|
95
|
+
|
|
96
|
+
## Output hygiene
|
|
97
|
+
|
|
98
|
+
Per [`prose-style.md`](prose-style.md): don't name these tools to the user. Say what you
|
|
99
|
+
learned ("the change touches three call sites"), not which tool found it.
|