devrites 2.6.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +77 -0
- package/README.md +85 -50
- package/SECURITY.md +65 -39
- package/bin/devrites.mjs +135 -51
- package/docs/agents/domain.md +58 -0
- package/docs/agents/issue-driven-rites.md +11 -0
- package/docs/agents/issue-tracker.md +29 -0
- package/docs/agents/triage-labels.md +15 -0
- package/docs/architecture.md +60 -35
- package/docs/capability-surface-selection.md +18 -0
- package/docs/cli.md +53 -0
- package/docs/command-map.md +59 -22
- package/docs/engine/agent-contract.md +92 -0
- package/docs/engine/commands.md +323 -0
- package/docs/engine/state-schema.md +134 -0
- package/docs/engine/workspace-schema.md +150 -0
- package/docs/extensions.md +178 -0
- package/docs/flow.md +19 -16
- package/docs/harness-compliance.md +45 -0
- package/docs/orchestration.md +6 -4
- package/docs/porting-to-a-new-harness.md +27 -0
- package/docs/quick-reference.md +22 -0
- package/docs/release.md +3 -3
- package/docs/skills.md +42 -48
- package/docs/usage.md +21 -8
- package/engine/.gosec.json +5 -0
- package/engine/Makefile +64 -0
- package/engine/commands.go +195 -0
- package/engine/go.mod +5 -0
- package/engine/harnessmatrix.go +60 -0
- package/engine/harnessmatrix_test.go +59 -0
- package/engine/hookpolicy.go +114 -0
- package/engine/hookpolicy_test.go +64 -0
- package/engine/hooks.go +336 -0
- package/engine/hooks_events_test.go +106 -0
- package/engine/hooks_workspace.go +603 -0
- package/engine/internal/devritespaths/paths.go +76 -0
- package/engine/internal/doctor/doctor.go +178 -0
- package/engine/internal/doctor/doctor_test.go +150 -0
- package/engine/internal/fsutil/copy.go +101 -0
- package/engine/internal/fsutil/replace_other.go +7 -0
- package/engine/internal/fsutil/replace_windows.go +31 -0
- package/engine/internal/gate/gate.go +243 -0
- package/engine/internal/gate/gate_test.go +145 -0
- package/engine/internal/harness/compliance.go +102 -0
- package/engine/internal/harness/harness.go +304 -0
- package/engine/internal/harness/harness_test.go +104 -0
- package/engine/internal/hostpack/hostpack.go +259 -0
- package/engine/internal/hostpack/hostpack_test.go +111 -0
- package/engine/internal/hostpack/templates/alias_skill.md.tmpl +11 -0
- package/engine/internal/hostpack/templates/devrites_readme.md.tmpl +14 -0
- package/engine/internal/install/install.go +1560 -0
- package/engine/internal/install/install_test.go +564 -0
- package/engine/internal/iohooks/detach_other.go +11 -0
- package/engine/internal/iohooks/detach_unix.go +11 -0
- package/engine/internal/iohooks/iohooks.go +546 -0
- package/engine/internal/iohooks/iohooks_test.go +130 -0
- package/engine/internal/lib/adoption.go +634 -0
- package/engine/internal/lib/adoption_test.go +91 -0
- package/engine/internal/lib/analyze.go +225 -0
- package/engine/internal/lib/archivesearch.go +93 -0
- package/engine/internal/lib/archivesearch_test.go +110 -0
- package/engine/internal/lib/budget.go +172 -0
- package/engine/internal/lib/buildreadiness.go +88 -0
- package/engine/internal/lib/checkacceptance.go +176 -0
- package/engine/internal/lib/closeout.go +69 -0
- package/engine/internal/lib/command_other.go +7 -0
- package/engine/internal/lib/command_unix.go +24 -0
- package/engine/internal/lib/context.go +236 -0
- package/engine/internal/lib/conventions.go +449 -0
- package/engine/internal/lib/coverage.go +147 -0
- package/engine/internal/lib/doubtcoverage.go +88 -0
- package/engine/internal/lib/evidencefresh.go +85 -0
- package/engine/internal/lib/extensions.go +619 -0
- package/engine/internal/lib/extensions_test.go +305 -0
- package/engine/internal/lib/footprint.go +239 -0
- package/engine/internal/lib/jsonout.go +115 -0
- package/engine/internal/lib/jsonout_test.go +57 -0
- package/engine/internal/lib/lanes.go +106 -0
- package/engine/internal/lib/learnings.go +391 -0
- package/engine/internal/lib/learnings_inject_test.go +77 -0
- package/engine/internal/lib/learnings_remediation_test.go +24 -0
- package/engine/internal/lib/ledger.go +298 -0
- package/engine/internal/lib/ledger_test.go +162 -0
- package/engine/internal/lib/mutationgate.go +85 -0
- package/engine/internal/lib/overrides.go +164 -0
- package/engine/internal/lib/overrides_test.go +112 -0
- package/engine/internal/lib/packageexistence.go +175 -0
- package/engine/internal/lib/preamble.go +159 -0
- package/engine/internal/lib/progress.go +168 -0
- package/engine/internal/lib/reconcile.go +173 -0
- package/engine/internal/lib/reconcile_test.go +197 -0
- package/engine/internal/lib/resolve.go +376 -0
- package/engine/internal/lib/resolve_remediation_test.go +49 -0
- package/engine/internal/lib/reviewers.go +143 -0
- package/engine/internal/lib/reviewers_test.go +45 -0
- package/engine/internal/lib/reviewerstats.go +199 -0
- package/engine/internal/lib/reviewerstats_test.go +104 -0
- package/engine/internal/lib/reviewintegrity.go +143 -0
- package/engine/internal/lib/reviewintegrity_test.go +103 -0
- package/engine/internal/lib/runbook.go +292 -0
- package/engine/internal/lib/runbook_context_test.go +119 -0
- package/engine/internal/lib/session.go +328 -0
- package/engine/internal/lib/session_test.go +110 -0
- package/engine/internal/lib/specparse.go +125 -0
- package/engine/internal/lib/specskeleton.go +79 -0
- package/engine/internal/lib/specvalidate.go +391 -0
- package/engine/internal/lib/specvalidate_test.go +185 -0
- package/engine/internal/lib/stuck.go +206 -0
- package/engine/internal/lib/templates/conventions_drift.tmpl +6 -0
- package/engine/internal/lib/templates/conventions_ledger_header.md +6 -0
- package/engine/internal/lib/templates/conventions_orient_header.txt +1 -0
- package/engine/internal/lib/testintegrity.go +203 -0
- package/engine/internal/lib/testintegrity_test.go +72 -0
- package/engine/internal/lib/tickafk.go +99 -0
- package/engine/internal/lib/util.go +68 -0
- package/engine/internal/migrate/migrate.go +213 -0
- package/engine/internal/migrate/migrate_test.go +105 -0
- package/engine/internal/orient/firstrun.go +50 -0
- package/engine/internal/orient/firstrun_test.go +72 -0
- package/engine/internal/orient/orient.go +69 -0
- package/engine/internal/orient/orient_test.go +25 -0
- package/engine/internal/profile/profile.go +270 -0
- package/engine/internal/state/concurrency_test.go +184 -0
- package/engine/internal/state/feature.go +309 -0
- package/engine/internal/state/lock_other.go +24 -0
- package/engine/internal/state/lock_unix.go +35 -0
- package/engine/internal/state/lock_windows.go +56 -0
- package/engine/internal/state/schema.go +102 -0
- package/engine/internal/state/snapshot.go +384 -0
- package/engine/internal/state/state_test.go +260 -0
- package/engine/internal/state/status.go +90 -0
- package/engine/internal/state/write.go +59 -0
- package/engine/internal/testutil/testutil.go +66 -0
- package/engine/internal/version/version.go +57 -0
- package/engine/internal/workflow/commands.go +64 -0
- package/engine/main.go +530 -0
- package/engine/profile_test.go +76 -0
- package/engine/subagent_orient_context.txt +6 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/auth-tokens/decisions.md +4 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/auth-tokens/feature.md +8 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/auth-tokens/plan.md +5 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/auth-tokens/spec.md +6 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/auth-tokens/status.md +4 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/auth-tokens/tasks.md +1 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/search-ranking/feature.md +8 -0
- package/engine/testdata/fixtures/basic/devrites-root/features/search-ranking/spec.md +6 -0
- package/engine/testdata/golden/TestParityA1Guard/devrites-edit-allowed.golden +1 -0
- package/engine/testdata/golden/TestParityA1Guard/inline-fallback-silent.golden +1 -0
- package/engine/testdata/golden/TestParityA1Guard/no-window-silent.golden +1 -0
- package/engine/testdata/golden/TestParityA1Guard/non-edit-tool.golden +1 -0
- package/engine/testdata/golden/TestParityA1Guard/observe-mode-silent.golden +1 -0
- package/engine/testdata/golden/TestParityA1Guard/source-edit-enforce-denies.golden +2 -0
- package/engine/testdata/golden/TestParityA1Guard/subagent-allowed.golden +1 -0
- package/engine/testdata/golden/TestParityAnalyze/noactive.golden +1 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=covered.golden +15 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=dangling.golden +16 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=ghost.golden +1 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=noac.golden +15 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=order.golden +17 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=orphan.golden +16 -0
- package/engine/testdata/golden/TestParityAnalyze/slug=uncovered.golden +16 -0
- package/engine/testdata/golden/TestParityBudget/default-active.golden +4 -0
- package/engine/testdata/golden/TestParityBudget/extra-md.golden +5 -0
- package/engine/testdata/golden/TestParityBudget/no-active.golden +1 -0
- package/engine/testdata/golden/TestParityBudget/no-feature.golden +1 -0
- package/engine/testdata/golden/TestParityBudget/over-advisory.golden +6 -0
- package/engine/testdata/golden/TestParityBudget/over-strict.golden +6 -0
- package/engine/testdata/golden/TestParityBudget/within.golden +6 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=approved.golden +2 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=approvenone.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=await.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=blocked.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=emptystatus.golden +2 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=ghost.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=noapprove.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=trailhash.golden +2 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=trailpipe.golden +2 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=blank-section.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=empty.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=flat-dropped.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=flat-ok.golden +2 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=flat-unchecked.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=id-gap.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=id-ok.golden +2 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=no-seal.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=no-section.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=nonexistent.golden +1 -0
- package/engine/testdata/golden/TestParityCheckAcceptance.golden +1 -0
- package/engine/testdata/golden/TestParityCloseOut/active_pointed_elsewhere.golden +2 -0
- package/engine/testdata/golden/TestParityCloseOut/active_slug_cleared.golden +2 -0
- package/engine/testdata/golden/TestParityCloseOut/archive_clobber.golden +1 -0
- package/engine/testdata/golden/TestParityCloseOut/missing_slug.golden +1 -0
- package/engine/testdata/golden/TestParityCloseOut/missing_workspace.golden +1 -0
- package/engine/testdata/golden/TestParityCoverage/arg=flat.golden +7 -0
- package/engine/testdata/golden/TestParityCoverage/arg=full.golden +10 -0
- package/engine/testdata/golden/TestParityCoverage/arg=nonexistent.golden +1 -0
- package/engine/testdata/golden/TestParityCoverage/arg=nospec.golden +1 -0
- package/engine/testdata/golden/TestParityCoverage/arg=speconly.golden +9 -0
- package/engine/testdata/golden/TestParityCoverage.golden +1 -0
- package/engine/testdata/golden/TestParityCursor/bare.golden +3 -0
- package/engine/testdata/golden/TestParityCursor/full-afk.golden +6 -0
- package/engine/testdata/golden/TestParityCursor/full-hitl.golden +5 -0
- package/engine/testdata/golden/TestParityCursor/no-active.golden +1 -0
- package/engine/testdata/golden/TestParityCursor/red.golden +5 -0
- package/engine/testdata/golden/TestParityCursor/zerogates.golden +5 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=doubted.golden +2 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=ghost.golden +2 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=inline.golden +3 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=missing-inline.golden +3 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=missing.golden +3 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=nodoubt.golden +4 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=nolog.golden +2 -0
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=nowright.golden +2 -0
- package/engine/testdata/golden/TestParityDoubtCoverage.golden +1 -0
- package/engine/testdata/golden/TestParityLearnings/add.golden +2 -0
- package/engine/testdata/golden/TestParityLearnings/list.golden +5 -0
- package/engine/testdata/golden/TestParityLearnings/mine-no-archive.golden +2 -0
- package/engine/testdata/golden/TestParityLearnings/mine.golden +5 -0
- package/engine/testdata/golden/TestParityLearnings/nudge.golden +2 -0
- package/engine/testdata/golden/TestParityLearnings/unknown.golden +1 -0
- package/engine/testdata/golden/TestParityMutationGate/active-slug.golden +3 -0
- package/engine/testdata/golden/TestParityMutationGate/explicit-slug.golden +3 -0
- package/engine/testdata/golden/TestParityMutationGate/ghost.golden +1 -0
- package/engine/testdata/golden/TestParityOrientSilentPath.golden +1 -0
- package/engine/testdata/golden/TestParityPackageExistence/declared.golden +2 -0
- package/engine/testdata/golden/TestParityPackageExistence/default-import-subpath.golden +2 -0
- package/engine/testdata/golden/TestParityPackageExistence/ghost-workspace.golden +1 -0
- package/engine/testdata/golden/TestParityPackageExistence/no-manifest.golden +1 -0
- package/engine/testdata/golden/TestParityPackageExistence/not-git.golden +1 -0
- package/engine/testdata/golden/TestParityPackageExistence/undeclared.golden +1 -0
- package/engine/testdata/golden/TestParityPreamble/afk/a.golden +14 -0
- package/engine/testdata/golden/TestParityPreamble/hitl/active.golden +18 -0
- package/engine/testdata/golden/TestParityPreamble/hitl/bare.golden +10 -0
- package/engine/testdata/golden/TestParityPreamble/hitl/full.golden +18 -0
- package/engine/testdata/golden/TestParityPreamble/hitl/ghost.golden +2 -0
- package/engine/testdata/golden/TestParityPreamble/hitl/nonl.golden +11 -0
- package/engine/testdata/golden/TestParityPreamble/hitl/openend.golden +13 -0
- package/engine/testdata/golden/TestParityProgress/arg=allbuilt.golden +4 -0
- package/engine/testdata/golden/TestParityProgress/arg=done.golden +3 -0
- package/engine/testdata/golden/TestParityProgress/arg=ghost.golden +1 -0
- package/engine/testdata/golden/TestParityProgress/arg=mid.golden +4 -0
- package/engine/testdata/golden/TestParityProgress/arg=nophase.golden +3 -0
- package/engine/testdata/golden/TestParityProgress/arg=noslice.golden +3 -0
- package/engine/testdata/golden/TestParityProgress/arg=plan.golden +4 -0
- package/engine/testdata/golden/TestParityProgress/arg=seal.golden +3 -0
- package/engine/testdata/golden/TestParityReconcile/bad-mode.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/check-clean/snapshot.golden +2 -0
- package/engine/testdata/golden/TestParityReconcile/check-clean.golden +2 -0
- package/engine/testdata/golden/TestParityReconcile/check-no-base.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/check-no-claimed/snapshot.golden +2 -0
- package/engine/testdata/golden/TestParityReconcile/check-no-claimed.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/check-violation/snapshot.golden +2 -0
- package/engine/testdata/golden/TestParityReconcile/check-violation.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/inline-fallback/snapshot.golden +2 -0
- package/engine/testdata/golden/TestParityReconcile/inline-fallback.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/not-git.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/snapshot/snapshot.golden +2 -0
- package/engine/testdata/golden/TestParityReconcile/snapshot.golden +2 -0
- package/engine/testdata/golden/TestParityRedwatch/fail-writes-red.golden +2 -0
- package/engine/testdata/golden/TestParityRedwatch/non-bash-tool.golden +1 -0
- package/engine/testdata/golden/TestParityRedwatch/non-test-command.golden +1 -0
- package/engine/testdata/golden/TestParityRedwatch/pass-clears-red.golden +1 -0
- package/engine/testdata/golden/TestParityResolve/answer/questions.md.golden +9 -0
- package/engine/testdata/golden/TestParityResolve/answer/state.md.golden +6 -0
- package/engine/testdata/golden/TestParityResolve/answer.golden +4 -0
- package/engine/testdata/golden/TestParityResolve/batch/questions.md.golden +9 -0
- package/engine/testdata/golden/TestParityResolve/batch-unterminated/questions.md.golden +9 -0
- package/engine/testdata/golden/TestParityResolve/batch-unterminated.golden +2 -0
- package/engine/testdata/golden/TestParityResolve/batch.golden +3 -0
- package/engine/testdata/golden/TestParityResolve/drop/questions.md.golden +9 -0
- package/engine/testdata/golden/TestParityResolve/drop/state.md.golden +8 -0
- package/engine/testdata/golden/TestParityResolve/drop.golden +4 -0
- package/engine/testdata/golden/TestParityResolve/missing-answer.golden +1 -0
- package/engine/testdata/golden/TestParityResolve/next-qid.golden +2 -0
- package/engine/testdata/golden/TestParityResolve/no-workspace.golden +1 -0
- package/engine/testdata/golden/TestParityResolve/not-found.golden +1 -0
- package/engine/testdata/golden/TestParityResolve/not-open.golden +1 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/agent-required-devrites-agent-denies.golden +2 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/agent-required-non-devrites-allows.golden +1 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/agent-required-subagent-type-only-allows.golden +1 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/enforce-deny-git-commit.golden +2 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/enforce-deny-mutating.golden +2 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/non-bash-tool.golden +1 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/non-tool-input.golden +1 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/observe-mutating-silent.golden +1 -0
- package/engine/testdata/golden/TestParityReviewerReadonly/safe-bash-command.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=dup.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=empty.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=flat.golden +2 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=nonexistent.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=noscenario.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=noshall.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=nothen.golden +1 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=valid/spec.md.golden +2 -0
- package/engine/testdata/golden/TestParitySpecValidate/arg=valid.golden +2 -0
- package/engine/testdata/golden/TestParitySpecValidate.golden +1 -0
- package/engine/testdata/golden/TestParityStatusline/full-afk.golden +2 -0
- package/engine/testdata/golden/TestParityStatusline/full-hitl.golden +2 -0
- package/engine/testdata/golden/TestParityStatusline/no-active.golden +1 -0
- package/engine/testdata/golden/TestParityStatusline/nophase.golden +2 -0
- package/engine/testdata/golden/TestParityStatusline/red.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/bad-cmd.golden +1 -0
- package/engine/testdata/golden/TestParityStuckCheck/custom-window-2.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/dominant.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/few.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/ghost.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/identical.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/no-cmd.golden +1 -0
- package/engine/testdata/golden/TestParityStuckCheck/no-slug.golden +1 -0
- package/engine/testdata/golden/TestParityStuckCheck/nolog.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/pingpong.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/varied.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/window-04-identical.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/window-2.5-varied4.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/window-4x-varied4.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/window-leadspace-varied4.golden +2 -0
- package/engine/testdata/golden/TestParityStuckCheck/window-plus4-identical.golden +2 -0
- package/engine/testdata/golden/TestParitySubagentOrient/devrites-agent-subagent-type-key.golden +2 -0
- package/engine/testdata/golden/TestParitySubagentOrient/devrites-agent.golden +2 -0
- package/engine/testdata/golden/TestParitySubagentOrient/garbage-input.golden +1 -0
- package/engine/testdata/golden/TestParitySubagentOrient/non-devrites-agent.golden +1 -0
- package/engine/testdata/golden/TestParityTestIntegrity/assertion-dropped.golden +1 -0
- package/engine/testdata/golden/TestParityTestIntegrity/clean.golden +2 -0
- package/engine/testdata/golden/TestParityTestIntegrity/deleted.golden +1 -0
- package/engine/testdata/golden/TestParityTestIntegrity/ghost-workspace.golden +1 -0
- package/engine/testdata/golden/TestParityTestIntegrity/not-git.golden +1 -0
- package/engine/testdata/golden/TestParityTestIntegrity/skip-added.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/budget1/state.md.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/budget1.golden +2 -0
- package/engine/testdata/golden/TestParityTickAfk/budget3/state.md.golden +5 -0
- package/engine/testdata/golden/TestParityTickAfk/budget3.golden +2 -0
- package/engine/testdata/golden/TestParityTickAfk/bulletPipe/state.md.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/bulletPipe.golden +2 -0
- package/engine/testdata/golden/TestParityTickAfk/missingField/state.md.golden +3 -0
- package/engine/testdata/golden/TestParityTickAfk/missingField.golden +2 -0
- package/engine/testdata/golden/TestParityTickAfk/missingFile.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/nonNumeric/state.md.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/nonNumeric.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/none/state.md.golden +1 -0
- package/engine/testdata/golden/TestParityTickAfk/none.golden +2 -0
- package/engine/testdata/golden/TestParityWrightScope/agent-required-non-wright.golden +1 -0
- package/engine/testdata/golden/TestParityWrightScope/devrites-edit-allowed.golden +1 -0
- package/engine/testdata/golden/TestParityWrightScope/in-scope-allowed.golden +1 -0
- package/engine/testdata/golden/TestParityWrightScope/non-edit-tool.golden +1 -0
- package/engine/testdata/golden/TestParityWrightScope/out-of-scope-enforce-denies.golden +2 -0
- package/engine/testdata/golden/TestParityWrightScope/out-of-scope-observe-silent.golden +1 -0
- package/engine/testdata/golden/TestSpecSkeleton/missing-some.golden +2 -0
- package/engine/testdata/golden/TestSpecSkeleton/present-all.golden +2 -0
- package/engine/testdata/golden/TestStatusLiveWorkspace.golden +10 -0
- package/engine/testdata/golden/TestStuckLogHashParity.golden +1 -0
- package/engine/testdata/golden/status/auth-tokens.txt +9 -0
- package/engine/testdata/golden/status/search-ranking.txt +9 -0
- package/engine/tests/adr_0003_gate_exit_code_test.go +32 -0
- package/engine/tests/adr_0004_required_by_phase_test.go +62 -0
- package/engine/tests/adr_0006_clock_seam_test.go +36 -0
- package/engine/tests/budget_test.go +77 -0
- package/engine/tests/cli_test.go +209 -0
- package/engine/tests/concurrency_cli_test.go +125 -0
- package/engine/tests/conventions_test.go +106 -0
- package/engine/tests/doctor_cli_test.go +62 -0
- package/engine/tests/gate_test.go +235 -0
- package/engine/tests/hook_test.go +390 -0
- package/engine/tests/hooks_io_test.go +218 -0
- package/engine/tests/json_contract_test.go +99 -0
- package/engine/tests/lib_parity_test.go +942 -0
- package/engine/tests/meta_test.go +67 -0
- package/engine/tests/migrate_cli_test.go +193 -0
- package/engine/tests/parity_analyze_test.go +55 -0
- package/engine/tests/parity_buildreadiness_test.go +42 -0
- package/engine/tests/parity_closeout_test.go +102 -0
- package/engine/tests/parity_githelpers_test.go +41 -0
- package/engine/tests/parity_learnings_test.go +90 -0
- package/engine/tests/parity_mutationgate_test.go +36 -0
- package/engine/tests/parity_packageexistence_test.go +64 -0
- package/engine/tests/parity_reconcile_test.go +88 -0
- package/engine/tests/parity_resolve_test.go +144 -0
- package/engine/tests/parity_test.go +380 -0
- package/engine/tests/parity_testintegrity_test.go +65 -0
- package/engine/tests/parity_tickafk_test.go +83 -0
- package/engine/validatepack.go +192 -0
- package/engine/validatepack_test.go +79 -0
- package/engine/validatepackskills.go +181 -0
- package/engine/validatepackskills_test.go +171 -0
- package/install.sh +67 -913
- package/pack/.claude/agents/devrites-code-reviewer.md +20 -3
- package/pack/.claude/agents/devrites-devex-reviewer.md +13 -3
- package/pack/.claude/agents/devrites-doubt-reviewer.md +16 -3
- package/pack/.claude/agents/devrites-forge-judge.md +14 -4
- package/pack/.claude/agents/devrites-frontend-reviewer.md +27 -3
- package/pack/.claude/agents/devrites-performance-reviewer.md +18 -2
- package/pack/.claude/agents/devrites-plan-reviewer.md +13 -3
- package/pack/.claude/agents/devrites-retrospector.md +12 -7
- package/pack/.claude/agents/devrites-security-auditor.md +20 -4
- package/pack/.claude/agents/devrites-simplifier-reviewer.md +17 -2
- package/pack/.claude/agents/devrites-slice-wright.md +32 -16
- package/pack/.claude/agents/devrites-spec-reviewer.md +17 -2
- package/pack/.claude/agents/devrites-strategy-reviewer.md +12 -2
- package/pack/.claude/agents/devrites-test-analyst.md +20 -3
- package/pack/.claude/settings.json +58 -8
- package/pack/.claude/skills/devrites-api-interface/SKILL.md +22 -5
- package/pack/.claude/skills/devrites-audit/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-browser-proof/SKILL.md +26 -53
- package/pack/.claude/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
- package/pack/.claude/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +21 -6
- package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +11 -0
- package/pack/.claude/skills/devrites-debug-recovery/reference/regression-test.md +2 -3
- package/pack/.claude/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/.claude/skills/devrites-doubt/SKILL.md +10 -3
- package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +16 -13
- package/pack/.claude/skills/devrites-frontend-craft/reference/craft.md +15 -3
- package/pack/.claude/skills/devrites-frontend-craft/reference/quality-standards.md +19 -0
- package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/.claude/skills/devrites-interview/SKILL.md +30 -7
- package/pack/.claude/skills/devrites-lib/SKILL.md +35 -36
- package/pack/.claude/skills/devrites-lib/reference/intent-map.md +16 -0
- package/pack/.claude/skills/devrites-lib/reference/model-tiers.md +43 -0
- package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +104 -20
- package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +111 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/README.md +14 -6
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/afk-hitl.md +10 -18
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/agents.md +81 -16
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/anti-patterns.md +3 -4
- package/pack/.claude/skills/devrites-lib/reference/standards/browser-proof-checklist.md +9 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +62 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +141 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/context-hygiene.md +17 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/core.md +9 -18
- package/pack/.claude/skills/devrites-lib/reference/standards/definition-of-done.md +16 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/deprecation.md +21 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/developer-experience.md +3 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +51 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/documentation.md +9 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/edge-case-trace.md +19 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/elicitation.md +80 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/git-workflow.md +65 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/observability.md +13 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/performance.md +1 -1
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/principles.md +3 -3
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/prose-style.md +18 -2
- package/pack/.claude/skills/devrites-lib/reference/standards/release/ship-checklist.md +9 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/review-checklist.md +10 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/security-checklist.md +9 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/security.md +45 -4
- package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +105 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/spec-grammar.md +185 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/test-proof-checklist.md +9 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +162 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/tooling.md +29 -2
- package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +110 -0
- package/pack/.claude/skills/devrites-prose-craft/SKILL.md +40 -76
- package/pack/.claude/skills/devrites-prose-craft/reference/examples.md +19 -5
- package/pack/.claude/skills/devrites-refresh-indexes/SKILL.md +3 -6
- package/pack/.claude/skills/devrites-source-driven/SKILL.md +17 -1
- package/pack/.claude/skills/devrites-ux-shape/SKILL.md +20 -7
- package/pack/.claude/skills/devrites-ux-shape/reference/brief-template.md +25 -10
- package/pack/.claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +2 -2
- package/pack/.claude/skills/rite/SKILL.md +67 -42
- package/pack/.claude/skills/rite/reference/menu.md +4 -1
- package/pack/.claude/skills/rite-adopt/SKILL.md +31 -22
- package/pack/.claude/skills/rite-adopt/reference/adoption.md +6 -9
- package/pack/.claude/skills/rite-adopt/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +25 -25
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +2 -2
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +1 -1
- package/pack/.claude/skills/rite-build/SKILL.md +24 -256
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +3 -3
- package/pack/.claude/skills/rite-build/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +1 -1
- package/pack/.claude/skills/rite-build/reference/checkpoint.md +44 -0
- package/pack/.claude/skills/rite-build/reference/evidence-standard.md +10 -7
- package/pack/.claude/skills/rite-build/reference/forge.md +17 -7
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +2 -0
- package/pack/.claude/skills/rite-build/reference/output.md +41 -0
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +258 -0
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +11 -10
- package/pack/.claude/skills/rite-converge/SKILL.md +131 -0
- package/pack/.claude/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +61 -0
- package/pack/.claude/skills/rite-customize/SKILL.md +67 -0
- package/pack/.claude/skills/rite-define/SKILL.md +76 -93
- package/pack/.claude/skills/rite-define/reference/anti-patterns.md +2 -1
- package/pack/.claude/skills/rite-define/reference/gates.md +3 -3
- package/pack/.claude/skills/rite-define/reference/plan-template.md +35 -6
- package/pack/.claude/skills/rite-doctor/SKILL.md +41 -16
- package/pack/.claude/skills/rite-dogfood/SKILL.md +49 -0
- package/pack/.claude/skills/rite-explain/SKILL.md +148 -0
- package/pack/.claude/skills/rite-explain/reference/intake.md +79 -0
- package/pack/.claude/skills/rite-frame/SKILL.md +14 -15
- package/pack/.claude/skills/rite-frame/reference/failure-modes.md +1 -1
- package/pack/.claude/skills/rite-handoff/SKILL.md +19 -17
- package/pack/.claude/skills/rite-handoff/reference/handoff-template.md +16 -6
- package/pack/.claude/skills/rite-learn/SKILL.md +46 -24
- package/pack/.claude/skills/rite-plan/SKILL.md +35 -26
- package/pack/.claude/skills/rite-plan/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-plan/reference/dependency-graph.md +3 -3
- package/pack/.claude/skills/rite-plan/reference/slicing.md +20 -7
- package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +15 -16
- package/pack/.claude/skills/rite-polish/SKILL.md +18 -23
- package/pack/.claude/skills/rite-polish/reference/anti-ai-slop.md +31 -2
- package/pack/.claude/skills/rite-polish/reference/anti-patterns.md +4 -1
- package/pack/.claude/skills/rite-polish/reference/code.md +16 -5
- package/pack/.claude/skills/rite-polish/reference/design-system-discovery.md +5 -32
- package/pack/.claude/skills/rite-pov/SKILL.md +46 -0
- package/pack/.claude/skills/rite-pr-feedback/SKILL.md +49 -0
- package/pack/.claude/skills/rite-pressure-test/SKILL.md +40 -10
- package/pack/.claude/skills/rite-prototype/SKILL.md +23 -2
- package/pack/.claude/skills/rite-prove/SKILL.md +41 -96
- package/pack/.claude/skills/rite-prove/reference/acceptance-proof.md +48 -0
- package/pack/.claude/skills/rite-prove/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-prove/reference/browser-proof.md +36 -13
- package/pack/.claude/skills/rite-quick/SKILL.md +19 -12
- package/pack/.claude/skills/rite-resolve/SKILL.md +21 -25
- package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +2 -2
- package/pack/.claude/skills/rite-review/SKILL.md +43 -45
- package/pack/.claude/skills/rite-review/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-review/reference/performance-checklist.md +1 -1
- package/pack/.claude/skills/rite-review/reference/performance-review.md +4 -22
- package/pack/.claude/skills/rite-review/reference/security-review.md +2 -2
- package/pack/.claude/skills/rite-seal/SKILL.md +40 -174
- package/pack/.claude/skills/rite-seal/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-seal/reference/conventions-ledger.md +6 -9
- package/pack/.claude/skills/rite-seal/reference/final-evidence.md +6 -14
- package/pack/.claude/skills/rite-seal/reference/go-no-go.md +3 -3
- package/pack/.claude/skills/rite-seal/reference/output.md +7 -0
- package/pack/.claude/skills/rite-seal/reference/phase-contract.md +211 -0
- package/pack/.claude/skills/rite-seal/reference/seal-template.md +1 -1
- package/pack/.claude/skills/rite-ship/SKILL.md +45 -75
- package/pack/.claude/skills/rite-ship/reference/adr-promotion.md +9 -0
- package/pack/.claude/skills/rite-ship/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-ship/reference/close-out.md +12 -1
- package/pack/.claude/skills/rite-ship/reference/design-memory.md +2 -2
- package/pack/.claude/skills/rite-ship/reference/git-ship.md +32 -1
- package/pack/.claude/skills/rite-ship/reference/ledger.md +56 -0
- package/pack/.claude/skills/rite-ship/reference/rollout.md +43 -0
- package/pack/.claude/skills/rite-spec/SKILL.md +108 -60
- package/pack/.claude/skills/rite-spec/reference/ai-spec-template.md +33 -0
- package/pack/.claude/skills/rite-spec/reference/anti-patterns.md +4 -1
- package/pack/.claude/skills/rite-spec/reference/investigation.md +34 -14
- package/pack/.claude/skills/rite-spec/reference/question-protocol.md +7 -37
- package/pack/.claude/skills/rite-spec/reference/references-intake.md +23 -18
- package/pack/.claude/skills/rite-spec/reference/spec-template.md +94 -118
- package/pack/.claude/skills/rite-spec/reference/state-workspace.md +128 -139
- package/pack/.claude/skills/rite-status/SKILL.md +26 -22
- package/pack/.claude/skills/rite-temper/SKILL.md +34 -27
- package/pack/.claude/skills/rite-temper/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-temper/reference/scope-modes.md +1 -1
- package/pack/.claude/skills/rite-temper/reference/significance.md +1 -1
- package/pack/.claude/skills/rite-vet/SKILL.md +58 -70
- package/pack/.claude/skills/rite-vet/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-vet/reference/cross-model.md +7 -5
- package/pack/.claude/skills/rite-vet/reference/depth.md +1 -1
- package/pack/.claude/skills/rite-vet/reference/review-axes.md +3 -3
- package/pack/.claude/skills/rite-zoom-out/SKILL.md +16 -17
- package/pack/generated/README.md +10 -0
- package/pack/generated/claude/agents/devrites-code-reviewer.md +103 -0
- package/pack/generated/claude/agents/devrites-devex-reviewer.md +104 -0
- package/pack/generated/claude/agents/devrites-doubt-reviewer.md +68 -0
- package/pack/generated/claude/agents/devrites-forge-judge.md +102 -0
- package/pack/generated/claude/agents/devrites-frontend-reviewer.md +84 -0
- package/pack/generated/claude/agents/devrites-performance-reviewer.md +111 -0
- package/pack/generated/claude/agents/devrites-plan-reviewer.md +89 -0
- package/pack/generated/claude/agents/devrites-retrospector.md +96 -0
- package/pack/generated/claude/agents/devrites-security-auditor.md +85 -0
- package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +90 -0
- package/pack/generated/claude/agents/devrites-slice-wright.md +210 -0
- package/pack/generated/claude/agents/devrites-spec-reviewer.md +87 -0
- package/pack/generated/claude/agents/devrites-strategy-reviewer.md +72 -0
- package/pack/generated/claude/agents/devrites-test-analyst.md +64 -0
- package/pack/generated/claude/settings.json +103 -0
- package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +61 -0
- package/pack/generated/claude/skills/devrites-audit/SKILL.md +73 -0
- package/pack/generated/claude/skills/devrites-browser-proof/SKILL.md +76 -0
- package/pack/generated/claude/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
- package/pack/generated/claude/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +65 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +17 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/generated/claude/skills/devrites-doubt/SKILL.md +82 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/SKILL.md +99 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/craft.md +71 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/design-references.md +116 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/fullstack.md +45 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/quality-standards.md +234 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +59 -0
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/shape.md +60 -0
- package/pack/generated/claude/skills/devrites-interview/SKILL.md +104 -0
- package/pack/generated/claude/skills/devrites-lib/SKILL.md +82 -0
- package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +16 -0
- package/pack/generated/claude/skills/devrites-lib/reference/model-tiers.md +43 -0
- package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +165 -0
- package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +111 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +61 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +243 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +192 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/anti-patterns.md +58 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/browser-proof-checklist.md +9 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +62 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +141 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/coding-style.md +55 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +114 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +119 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/definition-of-done.md +16 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +71 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +51 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/documentation.md +35 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/edge-case-trace.md +19 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/elicitation.md +80 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/error-handling.md +33 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/git-workflow.md +65 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/hooks.md +38 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/observability.md +73 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +48 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +36 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/principles.md +158 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/prose-style.md +117 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/release/ship-checklist.md +9 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/review-checklist.md +10 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security-checklist.md +9 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +135 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +105 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/spec-grammar.md +185 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/test-proof-checklist.md +9 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +162 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +99 -0
- package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +110 -0
- package/pack/generated/claude/skills/devrites-prose-craft/SKILL.md +69 -0
- package/pack/generated/claude/skills/devrites-prose-craft/reference/banned-phrases.md +95 -0
- package/pack/generated/claude/skills/devrites-prose-craft/reference/examples.md +102 -0
- package/pack/generated/claude/skills/devrites-prose-craft/reference/structures.md +134 -0
- package/pack/generated/claude/skills/devrites-refresh-indexes/SKILL.md +51 -0
- package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +52 -0
- package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +134 -0
- package/pack/generated/claude/skills/devrites-ux-shape/reference/brief-template.md +108 -0
- package/pack/generated/claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
- package/pack/generated/claude/skills/rite/SKILL.md +142 -0
- package/pack/generated/claude/skills/rite/reference/menu.md +42 -0
- package/pack/generated/claude/skills/rite-adopt/SKILL.md +104 -0
- package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +55 -0
- package/pack/generated/claude/skills/rite-adopt/reference/anti-patterns.md +19 -0
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +98 -0
- package/pack/generated/claude/skills/rite-autocomplete/reference/decision-policy.md +35 -0
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +54 -0
- package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +59 -0
- package/pack/generated/claude/skills/rite-build/SKILL.md +84 -0
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +145 -0
- package/pack/generated/claude/skills/rite-build/reference/anti-patterns.md +37 -0
- package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +149 -0
- package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +44 -0
- package/pack/generated/claude/skills/rite-build/reference/evidence-standard.md +35 -0
- package/pack/generated/claude/skills/rite-build/reference/forge.md +181 -0
- package/pack/generated/claude/skills/rite-build/reference/frontend-trigger.md +39 -0
- package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +42 -0
- package/pack/generated/claude/skills/rite-build/reference/output.md +41 -0
- package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +258 -0
- package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +43 -0
- package/pack/generated/claude/skills/rite-build/reference/tdd.md +26 -0
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +140 -0
- package/pack/generated/claude/skills/rite-converge/SKILL.md +131 -0
- package/pack/generated/claude/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/generated/claude/skills/rite-converge/reference/convergence-assessment.md +61 -0
- package/pack/generated/claude/skills/rite-customize/SKILL.md +67 -0
- package/pack/generated/claude/skills/rite-define/SKILL.md +153 -0
- package/pack/generated/claude/skills/rite-define/reference/anti-patterns.md +26 -0
- package/pack/generated/claude/skills/rite-define/reference/gates.md +152 -0
- package/pack/generated/claude/skills/rite-define/reference/plan-template.md +94 -0
- package/pack/generated/claude/skills/rite-doctor/SKILL.md +76 -0
- package/pack/generated/claude/skills/rite-dogfood/SKILL.md +49 -0
- package/pack/generated/claude/skills/rite-explain/SKILL.md +148 -0
- package/pack/generated/claude/skills/rite-explain/reference/intake.md +79 -0
- package/pack/generated/claude/skills/rite-frame/SKILL.md +120 -0
- package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +68 -0
- package/pack/generated/claude/skills/rite-handoff/SKILL.md +97 -0
- package/pack/generated/claude/skills/rite-handoff/reference/handoff-template.md +44 -0
- package/pack/generated/claude/skills/rite-learn/SKILL.md +117 -0
- package/pack/generated/claude/skills/rite-plan/SKILL.md +95 -0
- package/pack/generated/claude/skills/rite-plan/reference/anti-patterns.md +24 -0
- package/pack/generated/claude/skills/rite-plan/reference/dependency-graph.md +33 -0
- package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +42 -0
- package/pack/generated/claude/skills/rite-plan/reference/slicing.md +65 -0
- package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +33 -0
- package/pack/generated/claude/skills/rite-polish/SKILL.md +87 -0
- package/pack/generated/claude/skills/rite-polish/reference/anti-ai-slop.md +206 -0
- package/pack/generated/claude/skills/rite-polish/reference/anti-patterns.md +30 -0
- package/pack/generated/claude/skills/rite-polish/reference/backend-polish.md +80 -0
- package/pack/generated/claude/skills/rite-polish/reference/browser-polish-evidence.md +31 -0
- package/pack/generated/claude/skills/rite-polish/reference/code.md +100 -0
- package/pack/generated/claude/skills/rite-polish/reference/design-system-discovery.md +8 -0
- package/pack/generated/claude/skills/rite-polish/reference/harden-checklist.md +109 -0
- package/pack/generated/claude/skills/rite-polish/reference/ui.md +136 -0
- package/pack/generated/claude/skills/rite-pov/SKILL.md +46 -0
- package/pack/generated/claude/skills/rite-pr-feedback/SKILL.md +49 -0
- package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +74 -0
- package/pack/generated/claude/skills/rite-prototype/SKILL.md +110 -0
- package/pack/generated/claude/skills/rite-prove/SKILL.md +104 -0
- package/pack/generated/claude/skills/rite-prove/reference/acceptance-proof.md +48 -0
- package/pack/generated/claude/skills/rite-prove/reference/anti-patterns.md +25 -0
- package/pack/generated/claude/skills/rite-prove/reference/browser-proof.md +49 -0
- package/pack/generated/claude/skills/rite-prove/reference/failure-triage.md +25 -0
- package/pack/generated/claude/skills/rite-prove/reference/proof-ladder.md +28 -0
- package/pack/generated/claude/skills/rite-prove/reference/test-command-discovery.md +30 -0
- package/pack/generated/claude/skills/rite-quick/SKILL.md +93 -0
- package/pack/generated/claude/skills/rite-resolve/SKILL.md +109 -0
- package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +115 -0
- package/pack/generated/claude/skills/rite-review/SKILL.md +171 -0
- package/pack/generated/claude/skills/rite-review/reference/anti-patterns.md +32 -0
- package/pack/generated/claude/skills/rite-review/reference/cognitive-load.md +92 -0
- package/pack/generated/claude/skills/rite-review/reference/feature-scoped-review.md +26 -0
- package/pack/generated/claude/skills/rite-review/reference/five-axis-review.md +60 -0
- package/pack/generated/claude/skills/rite-review/reference/nielsen-heuristics.md +130 -0
- package/pack/generated/claude/skills/rite-review/reference/performance-checklist.md +80 -0
- package/pack/generated/claude/skills/rite-review/reference/performance-review.md +14 -0
- package/pack/generated/claude/skills/rite-review/reference/security-review.md +37 -0
- package/pack/generated/claude/skills/rite-seal/SKILL.md +101 -0
- package/pack/generated/claude/skills/rite-seal/reference/anti-patterns.md +29 -0
- package/pack/generated/claude/skills/rite-seal/reference/conventions-ledger.md +60 -0
- package/pack/generated/claude/skills/rite-seal/reference/final-evidence.md +64 -0
- package/pack/generated/claude/skills/rite-seal/reference/go-no-go.md +53 -0
- package/pack/generated/claude/skills/rite-seal/reference/output.md +7 -0
- package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +211 -0
- package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +30 -0
- package/pack/generated/claude/skills/rite-seal/reference/seal-template.md +36 -0
- package/pack/generated/claude/skills/rite-ship/SKILL.md +111 -0
- package/pack/generated/claude/skills/rite-ship/reference/adr-promotion.md +9 -0
- package/pack/generated/claude/skills/rite-ship/reference/anti-patterns.md +25 -0
- package/pack/generated/claude/skills/rite-ship/reference/close-out.md +42 -0
- package/pack/generated/claude/skills/rite-ship/reference/design-memory.md +120 -0
- package/pack/generated/claude/skills/rite-ship/reference/git-ship.md +73 -0
- package/pack/generated/claude/skills/rite-ship/reference/ledger.md +56 -0
- package/pack/generated/claude/skills/rite-ship/reference/rollout.md +43 -0
- package/pack/generated/claude/skills/rite-ship/reference/ship-template.md +33 -0
- package/pack/generated/claude/skills/rite-spec/SKILL.md +217 -0
- package/pack/generated/claude/skills/rite-spec/reference/acceptance-criteria.md +31 -0
- package/pack/generated/claude/skills/rite-spec/reference/ai-spec-template.md +33 -0
- package/pack/generated/claude/skills/rite-spec/reference/anti-patterns.md +28 -0
- package/pack/generated/claude/skills/rite-spec/reference/interview-patterns.md +56 -0
- package/pack/generated/claude/skills/rite-spec/reference/investigation.md +84 -0
- package/pack/generated/claude/skills/rite-spec/reference/question-protocol.md +31 -0
- package/pack/generated/claude/skills/rite-spec/reference/references-intake.md +62 -0
- package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +73 -0
- package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +110 -0
- package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +156 -0
- package/pack/generated/claude/skills/rite-status/SKILL.md +107 -0
- package/pack/generated/claude/skills/rite-temper/SKILL.md +126 -0
- package/pack/generated/claude/skills/rite-temper/reference/anti-patterns.md +29 -0
- package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +65 -0
- package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +53 -0
- package/pack/generated/claude/skills/rite-temper/reference/significance.md +46 -0
- package/pack/generated/claude/skills/rite-temper/reference/strategy-template.md +90 -0
- package/pack/generated/claude/skills/rite-vet/SKILL.md +175 -0
- package/pack/generated/claude/skills/rite-vet/reference/anti-patterns.md +29 -0
- package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +135 -0
- package/pack/generated/claude/skills/rite-vet/reference/cross-model.md +43 -0
- package/pack/generated/claude/skills/rite-vet/reference/depth.md +53 -0
- package/pack/generated/claude/skills/rite-vet/reference/eng-lenses.md +48 -0
- package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +167 -0
- package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +75 -0
- package/pack/generated/codex/AGENTS.md +23 -0
- package/pack/generated/codex/agents/devrites-code-reviewer.toml +101 -0
- package/pack/generated/codex/agents/devrites-devex-reviewer.toml +102 -0
- package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +66 -0
- package/pack/generated/codex/agents/devrites-forge-judge.toml +100 -0
- package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +80 -0
- package/pack/generated/codex/agents/devrites-performance-reviewer.toml +109 -0
- package/pack/generated/codex/agents/devrites-plan-reviewer.toml +93 -0
- package/pack/generated/codex/agents/devrites-retrospector.toml +94 -0
- package/pack/generated/codex/agents/devrites-security-auditor.toml +83 -0
- package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +88 -0
- package/pack/generated/codex/agents/devrites-slice-wright.toml +207 -0
- package/pack/generated/codex/agents/devrites-spec-reviewer.toml +85 -0
- package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +76 -0
- package/pack/generated/codex/agents/devrites-test-analyst.toml +62 -0
- package/pack/generated/codex/hooks.json +151 -0
- package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +73 -0
- package/pack/generated/codex/skills/devrites-api-interface/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-audit/SKILL.md +85 -0
- package/pack/generated/codex/skills/devrites-audit/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +88 -0
- package/pack/generated/codex/skills/devrites-browser-proof/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
- package/pack/generated/codex/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +77 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +17 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/generated/codex/skills/devrites-doubt/SKILL.md +94 -0
- package/pack/generated/codex/skills/devrites-doubt/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +111 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/craft.md +71 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/design-references.md +116 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/fullstack.md +45 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/quality-standards.md +234 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +59 -0
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/shape.md +60 -0
- package/pack/generated/codex/skills/devrites-interview/SKILL.md +116 -0
- package/pack/generated/codex/skills/devrites-interview/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-lib/SKILL.md +94 -0
- package/pack/generated/codex/skills/devrites-lib/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +16 -0
- package/pack/generated/codex/skills/devrites-lib/reference/model-tiers.md +43 -0
- package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +165 -0
- package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +111 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +61 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +243 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +192 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/anti-patterns.md +58 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/browser-proof-checklist.md +9 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +62 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +141 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/coding-style.md +55 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +114 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +119 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/definition-of-done.md +16 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +71 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +51 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/documentation.md +35 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/edge-case-trace.md +19 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/elicitation.md +80 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/error-handling.md +33 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/git-workflow.md +65 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/hooks.md +38 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/observability.md +73 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +48 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +36 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/principles.md +158 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/prose-style.md +117 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/release/ship-checklist.md +9 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/review-checklist.md +10 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security-checklist.md +9 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +135 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +105 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/spec-grammar.md +185 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/test-proof-checklist.md +9 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +162 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +99 -0
- package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +110 -0
- package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +81 -0
- package/pack/generated/codex/skills/devrites-prose-craft/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-prose-craft/reference/banned-phrases.md +95 -0
- package/pack/generated/codex/skills/devrites-prose-craft/reference/examples.md +102 -0
- package/pack/generated/codex/skills/devrites-prose-craft/reference/structures.md +134 -0
- package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +63 -0
- package/pack/generated/codex/skills/devrites-refresh-indexes/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +64 -0
- package/pack/generated/codex/skills/devrites-source-driven/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +146 -0
- package/pack/generated/codex/skills/devrites-ux-shape/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/devrites-ux-shape/reference/brief-template.md +108 -0
- package/pack/generated/codex/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
- package/pack/generated/codex/skills/rite/SKILL.md +154 -0
- package/pack/generated/codex/skills/rite/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite/reference/menu.md +42 -0
- package/pack/generated/codex/skills/rite-adopt/SKILL.md +116 -0
- package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +55 -0
- package/pack/generated/codex/skills/rite-adopt/reference/anti-patterns.md +19 -0
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +110 -0
- package/pack/generated/codex/skills/rite-autocomplete/reference/decision-policy.md +35 -0
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +54 -0
- package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +59 -0
- package/pack/generated/codex/skills/rite-build/SKILL.md +96 -0
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +145 -0
- package/pack/generated/codex/skills/rite-build/reference/anti-patterns.md +37 -0
- package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +149 -0
- package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +44 -0
- package/pack/generated/codex/skills/rite-build/reference/evidence-standard.md +35 -0
- package/pack/generated/codex/skills/rite-build/reference/forge.md +181 -0
- package/pack/generated/codex/skills/rite-build/reference/frontend-trigger.md +39 -0
- package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +42 -0
- package/pack/generated/codex/skills/rite-build/reference/output.md +41 -0
- package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +258 -0
- package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +43 -0
- package/pack/generated/codex/skills/rite-build/reference/tdd.md +26 -0
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +140 -0
- package/pack/generated/codex/skills/rite-converge/SKILL.md +143 -0
- package/pack/generated/codex/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +61 -0
- package/pack/generated/codex/skills/rite-customize/SKILL.md +79 -0
- package/pack/generated/codex/skills/rite-customize/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-define/SKILL.md +165 -0
- package/pack/generated/codex/skills/rite-define/reference/anti-patterns.md +26 -0
- package/pack/generated/codex/skills/rite-define/reference/gates.md +152 -0
- package/pack/generated/codex/skills/rite-define/reference/plan-template.md +94 -0
- package/pack/generated/codex/skills/rite-doctor/SKILL.md +88 -0
- package/pack/generated/codex/skills/rite-dogfood/SKILL.md +61 -0
- package/pack/generated/codex/skills/rite-dogfood/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-explain/SKILL.md +160 -0
- package/pack/generated/codex/skills/rite-explain/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-explain/reference/intake.md +79 -0
- package/pack/generated/codex/skills/rite-frame/SKILL.md +132 -0
- package/pack/generated/codex/skills/rite-frame/reference/failure-modes.md +68 -0
- package/pack/generated/codex/skills/rite-handoff/SKILL.md +109 -0
- package/pack/generated/codex/skills/rite-handoff/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-handoff/reference/handoff-template.md +44 -0
- package/pack/generated/codex/skills/rite-learn/SKILL.md +129 -0
- package/pack/generated/codex/skills/rite-learn/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-plan/SKILL.md +107 -0
- package/pack/generated/codex/skills/rite-plan/reference/anti-patterns.md +24 -0
- package/pack/generated/codex/skills/rite-plan/reference/dependency-graph.md +33 -0
- package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +42 -0
- package/pack/generated/codex/skills/rite-plan/reference/slicing.md +65 -0
- package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +33 -0
- package/pack/generated/codex/skills/rite-polish/SKILL.md +99 -0
- package/pack/generated/codex/skills/rite-polish/reference/anti-ai-slop.md +206 -0
- package/pack/generated/codex/skills/rite-polish/reference/anti-patterns.md +30 -0
- package/pack/generated/codex/skills/rite-polish/reference/backend-polish.md +80 -0
- package/pack/generated/codex/skills/rite-polish/reference/browser-polish-evidence.md +31 -0
- package/pack/generated/codex/skills/rite-polish/reference/code.md +100 -0
- package/pack/generated/codex/skills/rite-polish/reference/design-system-discovery.md +8 -0
- package/pack/generated/codex/skills/rite-polish/reference/harden-checklist.md +109 -0
- package/pack/generated/codex/skills/rite-polish/reference/ui.md +136 -0
- package/pack/generated/codex/skills/rite-pov/SKILL.md +58 -0
- package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +61 -0
- package/pack/generated/codex/skills/rite-pr-feedback/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +86 -0
- package/pack/generated/codex/skills/rite-prototype/SKILL.md +122 -0
- package/pack/generated/codex/skills/rite-prototype/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-prove/SKILL.md +116 -0
- package/pack/generated/codex/skills/rite-prove/reference/acceptance-proof.md +48 -0
- package/pack/generated/codex/skills/rite-prove/reference/anti-patterns.md +25 -0
- package/pack/generated/codex/skills/rite-prove/reference/browser-proof.md +49 -0
- package/pack/generated/codex/skills/rite-prove/reference/failure-triage.md +25 -0
- package/pack/generated/codex/skills/rite-prove/reference/proof-ladder.md +28 -0
- package/pack/generated/codex/skills/rite-prove/reference/test-command-discovery.md +30 -0
- package/pack/generated/codex/skills/rite-quick/SKILL.md +105 -0
- package/pack/generated/codex/skills/rite-resolve/SKILL.md +121 -0
- package/pack/generated/codex/skills/rite-resolve/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +115 -0
- package/pack/generated/codex/skills/rite-review/SKILL.md +183 -0
- package/pack/generated/codex/skills/rite-review/reference/anti-patterns.md +32 -0
- package/pack/generated/codex/skills/rite-review/reference/cognitive-load.md +92 -0
- package/pack/generated/codex/skills/rite-review/reference/feature-scoped-review.md +26 -0
- package/pack/generated/codex/skills/rite-review/reference/five-axis-review.md +60 -0
- package/pack/generated/codex/skills/rite-review/reference/nielsen-heuristics.md +130 -0
- package/pack/generated/codex/skills/rite-review/reference/performance-checklist.md +80 -0
- package/pack/generated/codex/skills/rite-review/reference/performance-review.md +14 -0
- package/pack/generated/codex/skills/rite-review/reference/security-review.md +37 -0
- package/pack/generated/codex/skills/rite-seal/SKILL.md +113 -0
- package/pack/generated/codex/skills/rite-seal/reference/anti-patterns.md +29 -0
- package/pack/generated/codex/skills/rite-seal/reference/conventions-ledger.md +60 -0
- package/pack/generated/codex/skills/rite-seal/reference/final-evidence.md +64 -0
- package/pack/generated/codex/skills/rite-seal/reference/go-no-go.md +53 -0
- package/pack/generated/codex/skills/rite-seal/reference/output.md +7 -0
- package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +211 -0
- package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +30 -0
- package/pack/generated/codex/skills/rite-seal/reference/seal-template.md +36 -0
- package/pack/generated/codex/skills/rite-ship/SKILL.md +123 -0
- package/pack/generated/codex/skills/rite-ship/reference/adr-promotion.md +9 -0
- package/pack/generated/codex/skills/rite-ship/reference/anti-patterns.md +25 -0
- package/pack/generated/codex/skills/rite-ship/reference/close-out.md +42 -0
- package/pack/generated/codex/skills/rite-ship/reference/design-memory.md +120 -0
- package/pack/generated/codex/skills/rite-ship/reference/git-ship.md +73 -0
- package/pack/generated/codex/skills/rite-ship/reference/ledger.md +56 -0
- package/pack/generated/codex/skills/rite-ship/reference/rollout.md +43 -0
- package/pack/generated/codex/skills/rite-ship/reference/ship-template.md +33 -0
- package/pack/generated/codex/skills/rite-spec/SKILL.md +229 -0
- package/pack/generated/codex/skills/rite-spec/reference/acceptance-criteria.md +31 -0
- package/pack/generated/codex/skills/rite-spec/reference/ai-spec-template.md +33 -0
- package/pack/generated/codex/skills/rite-spec/reference/anti-patterns.md +28 -0
- package/pack/generated/codex/skills/rite-spec/reference/interview-patterns.md +56 -0
- package/pack/generated/codex/skills/rite-spec/reference/investigation.md +84 -0
- package/pack/generated/codex/skills/rite-spec/reference/question-protocol.md +31 -0
- package/pack/generated/codex/skills/rite-spec/reference/references-intake.md +62 -0
- package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +73 -0
- package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +110 -0
- package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +156 -0
- package/pack/generated/codex/skills/rite-status/SKILL.md +119 -0
- package/pack/generated/codex/skills/rite-status/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-temper/SKILL.md +138 -0
- package/pack/generated/codex/skills/rite-temper/reference/anti-patterns.md +29 -0
- package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +65 -0
- package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +53 -0
- package/pack/generated/codex/skills/rite-temper/reference/significance.md +46 -0
- package/pack/generated/codex/skills/rite-temper/reference/strategy-template.md +90 -0
- package/pack/generated/codex/skills/rite-vet/SKILL.md +187 -0
- package/pack/generated/codex/skills/rite-vet/reference/anti-patterns.md +29 -0
- package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +135 -0
- package/pack/generated/codex/skills/rite-vet/reference/cross-model.md +43 -0
- package/pack/generated/codex/skills/rite-vet/reference/depth.md +53 -0
- package/pack/generated/codex/skills/rite-vet/reference/eng-lenses.md +48 -0
- package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +167 -0
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +87 -0
- package/pack/generated/codex/skills/rite-zoom-out/agents/openai.yaml +2 -0
- package/package.json +8 -4
- package/scripts/build-binaries.sh +75 -0
- package/scripts/build-host-artifacts.sh +100 -0
- package/scripts/build-release-tarball.sh +16 -2
- package/scripts/check-cross-refs.py +17 -3
- package/scripts/check-generated-skill-budget.mjs +41 -0
- package/scripts/check-instruction-size-baseline.mjs +79 -0
- package/scripts/check-invocation-integrity.py +113 -0
- package/scripts/check-no-global-writes.sh +22 -0
- package/scripts/check-no-personal-paths.py +50 -0
- package/scripts/check-reference-governance.mjs +82 -0
- package/scripts/check-reply-contract.sh +64 -0
- package/scripts/check-rule-uniqueness.sh +4 -32
- package/scripts/codex-generate.sh +300 -0
- package/scripts/devrites-detect.sh +2 -1
- package/scripts/eval-runner.py +4 -2
- package/scripts/eval-scorer.mjs +46 -0
- package/scripts/grade-feature.sh +24 -7
- package/scripts/install-lib.sh +112 -19
- package/scripts/pin.sh +4 -4
- package/scripts/release-check.sh +71 -0
- package/scripts/run-behavioral-evals.sh +34 -2
- package/scripts/run-evals.sh +45 -30
- package/scripts/run-live-behavioral-evals.py +180 -0
- package/scripts/run-outcome-evals.sh +27 -0
- package/scripts/run-routing-evals.py +342 -0
- package/scripts/run-tests.mjs +203 -0
- package/scripts/skill-pruning-audit.mjs +120 -0
- package/scripts/skills-inventory.mjs +107 -0
- package/scripts/validate-agent-composition.py +57 -0
- package/scripts/validate-command-parity.py +70 -0
- package/scripts/validate-frontmatter.py +43 -7
- package/scripts/validate-skill-anatomy.py +139 -0
- package/scripts/validate-workflow-security.py +22 -3
- package/scripts/validate-workspace-schema.py +512 -0
- package/scripts/validate.sh +174 -34
- package/uninstall.sh +22 -183
- package/update.sh +29 -185
- package/docs/cli-mcp.md +0 -62
- package/mcp/devrites-mcp.mjs +0 -105
- package/pack/.claude/hooks/devrites-a1-guard.sh +0 -99
- package/pack/.claude/hooks/devrites-allow.sh +0 -44
- package/pack/.claude/hooks/devrites-cursor.sh +0 -28
- package/pack/.claude/hooks/devrites-orient.sh +0 -53
- package/pack/.claude/hooks/devrites-redwatch.sh +0 -39
- package/pack/.claude/hooks/devrites-refresh-indexes.sh +0 -127
- package/pack/.claude/hooks/devrites-reviewer-readonly.sh +0 -37
- package/pack/.claude/hooks/devrites-statusline.sh +0 -18
- package/pack/.claude/hooks/devrites-stop-gate.sh +0 -45
- package/pack/.claude/hooks/devrites-wright-scope.sh +0 -64
- package/pack/.claude/hooks/hooks.json +0 -52
- package/pack/.claude/rules/code-review.md +0 -48
- package/pack/.claude/rules/development-workflow.md +0 -40
- package/pack/.claude/rules/git-workflow.md +0 -35
- package/pack/.claude/rules/spec-grammar.md +0 -106
- package/pack/.claude/rules/testing.md +0 -88
- package/pack/.claude/skills/devrites-lib/scripts/analyze.sh +0 -78
- package/pack/.claude/skills/devrites-lib/scripts/check-acceptance.sh +0 -75
- package/pack/.claude/skills/devrites-lib/scripts/close-out.sh +0 -47
- package/pack/.claude/skills/devrites-lib/scripts/conventions.py +0 -273
- package/pack/.claude/skills/devrites-lib/scripts/coverage.sh +0 -51
- package/pack/.claude/skills/devrites-lib/scripts/devrites.sh +0 -77
- package/pack/.claude/skills/devrites-lib/scripts/doctor.sh +0 -156
- package/pack/.claude/skills/devrites-lib/scripts/doubt-coverage.sh +0 -59
- package/pack/.claude/skills/devrites-lib/scripts/evidence-fresh.sh +0 -63
- package/pack/.claude/skills/devrites-lib/scripts/footprint.sh +0 -45
- package/pack/.claude/skills/devrites-lib/scripts/learnings.sh +0 -74
- package/pack/.claude/skills/devrites-lib/scripts/mutation-gate.sh +0 -52
- package/pack/.claude/skills/devrites-lib/scripts/package-existence.sh +0 -68
- package/pack/.claude/skills/devrites-lib/scripts/preamble.sh +0 -76
- package/pack/.claude/skills/devrites-lib/scripts/progress.sh +0 -103
- package/pack/.claude/skills/devrites-lib/scripts/readiness.sh +0 -62
- package/pack/.claude/skills/devrites-lib/scripts/reconcile.sh +0 -123
- package/pack/.claude/skills/devrites-lib/scripts/resolve.sh +0 -279
- package/pack/.claude/skills/devrites-lib/scripts/rites.sh +0 -41
- package/pack/.claude/skills/devrites-lib/scripts/spec-validate.sh +0 -130
- package/pack/.claude/skills/devrites-lib/scripts/stuck.sh +0 -67
- package/pack/.claude/skills/devrites-lib/scripts/test-integrity.sh +0 -87
- package/pack/.claude/skills/devrites-lib/scripts/tick-afk.sh +0 -52
- package/scripts/merge-codex-hooks.mjs +0 -78
- /package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/coding-style.md +0 -0
- /package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/error-handling.md +0 -0
- /package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/hooks.md +0 -0
- /package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/patterns.md +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# One-slice cycle
|
|
2
|
+
|
|
3
|
+
The discipline that makes large features manageable: build one thin slice, leave it
|
|
4
|
+
working and proven, stop. Never implement the whole feature in one pass.
|
|
5
|
+
|
|
6
|
+
## The cycle
|
|
7
|
+
The orchestrator (`$rite-build`) gates and records; the **wright** writes. See
|
|
8
|
+
[`wright-dispatch.md`](wright-dispatch.md).
|
|
9
|
+
```
|
|
10
|
+
SELECT → orchestrator: restate slice goal + acceptance + scope boundary; HITL gate (pause pre-code)
|
|
11
|
+
(SHAPE) → orchestrator: if UI and no design-brief.md, shape it (devrites-ux-shape) before dispatch
|
|
12
|
+
(FORGE) → orchestrator: if slice is Forge: yes, compete K=2–3 isolated candidate wrights →
|
|
13
|
+
devrites-forge-judge → land one winner → forge-report.md, then continue at DOUBT (forge.md)
|
|
14
|
+
DISPATCH → hand the slice contract to devrites-slice-wright (fresh context). Inside the wright:
|
|
15
|
+
ORIENT → load only the files this slice touches; learn the project's idiom; reuse-first
|
|
16
|
+
(RED) → if behavior change: write the failing test first
|
|
17
|
+
IMPLEMENT → smallest complete version; match conventions; devrites-frontend-craft for UI
|
|
18
|
+
VERIFY → targeted tests (+ types/lint/build); fail-on-red; return artifact — code + tests only
|
|
19
|
+
(DOUBT) → orchestrator, on return: devrites-doubt each non-trivial decision the wright stood up
|
|
20
|
+
PROVE → orchestrator: fail-on-red check on the wright's gates; browser proof for UI
|
|
21
|
+
RECORD → orchestrator: state.md, evidence.md, touched-files.md (the canonical writer)
|
|
22
|
+
(CHECKPOINT) → orchestrator: if .devrites/CHECKPOINT is set, commit the proven slice
|
|
23
|
+
local-only as WIP(<slug>) with a [devrites-context] body → survives a crash (checkpoint.md)
|
|
24
|
+
STOP → report + recommend next; do not start slice N+1
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Why stop after one slice
|
|
28
|
+
- Keeps the diff reviewable (~one capability, roughly ≤100 lines of meaningful change).
|
|
29
|
+
- Surfaces integration/drift problems while they're cheap.
|
|
30
|
+
- Gives the user a decision point — they may reprioritize, reslice, or polish now.
|
|
31
|
+
- Prevents the "90% done" pile-up where nothing is actually proven.
|
|
32
|
+
|
|
33
|
+
## Restate the scope boundary
|
|
34
|
+
Before coding, write what this slice will and will **not** touch. This is the contract
|
|
35
|
+
you check yourself against — anything outside it is scope creep or a drift event.
|
|
36
|
+
|
|
37
|
+
## When the slice can't be completed cleanly
|
|
38
|
+
- Discovered the plan is wrong → **Spec Drift Guard** (stop, record, classify, maybe
|
|
39
|
+
ask, `$rite-plan` repair).
|
|
40
|
+
- Slice is bigger than one cycle → stop and `$rite-plan reslice`.
|
|
41
|
+
- Blocked on a failing dependency → record in `state.md`, `$rite-plan unblock`.
|
|
42
|
+
Never power through by guessing.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# rite-build output
|
|
2
|
+
|
|
3
|
+
This is the normative output contract for `$rite-build`. `../SKILL.md` points
|
|
4
|
+
here so the root skill can stay focused without weakening response shape.
|
|
5
|
+
|
|
6
|
+
Run `devrites-engine progress` first. It prints the deterministic header, slice
|
|
7
|
+
meter, and flow ribbon. Put the compact fact lines below it using the shared
|
|
8
|
+
completion reply contract
|
|
9
|
+
([`devrites-lib/reference/reply-contract.md`](../../devrites-lib/reference/reply-contract.md)).
|
|
10
|
+
|
|
11
|
+
**Slice built; slices remain:**
|
|
12
|
+
```text
|
|
13
|
+
Done: built slice <n> — <name>.
|
|
14
|
+
Changed: <files touched>; state.md, touched-files.md, evidence.md
|
|
15
|
+
Evidence: acceptance met; tests <cmd -> pass>; browser <summary | n/a>; drift <none|handled>
|
|
16
|
+
Open: <none | blockers | questions>
|
|
17
|
+
Next: $rite-build
|
|
18
|
+
Record: .devrites/work/<slug>/evidence.md
|
|
19
|
+
↻ Hygiene: /clear between slices; $rite-handoff if away > a few hours
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Slice built; all slices built:**
|
|
23
|
+
```text
|
|
24
|
+
Done: built slice <n> — <name>; all slices built.
|
|
25
|
+
Changed: <files touched>; state.md, touched-files.md, evidence.md
|
|
26
|
+
Evidence: acceptance met; tests <cmd -> pass>; browser <summary | n/a>; drift <none|handled>
|
|
27
|
+
Open: <none | blockers | questions>
|
|
28
|
+
Next: $rite-prove
|
|
29
|
+
Record: .devrites/work/<slug>/evidence.md
|
|
30
|
+
↻ Hygiene: /clear before $rite-prove; $rite-handoff if away > a few hours
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
For awaiting-human or stopped states, use the typed templates from the reply contract.
|
|
34
|
+
Keep fact lines terse. The meter and ribbon carry progress; don't duplicate them in
|
|
35
|
+
prose.
|
|
36
|
+
|
|
37
|
+
For a **forged slice**, the `Built` line names the competition and points at the record, e.g.
|
|
38
|
+
`Done: built slice 3 — csv-streaming (forged: 3 candidates, winner B).` and
|
|
39
|
+
`Record: .devrites/work/<slug>/forge-report.md`.
|
|
40
|
+
|
|
41
|
+
**DO NOT continue to the next slice automatically** — even at `✅ ALL BUILT`, `$rite-prove` is the user's call.
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
# rite-build phase contract
|
|
2
|
+
|
|
3
|
+
See also [`one-slice-cycle.md`](one-slice-cycle.md).
|
|
4
|
+
|
|
5
|
+
## Execution spine
|
|
6
|
+
|
|
7
|
+
Run the engine gates at these moments:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
devrites-engine preamble
|
|
11
|
+
devrites-engine snapshot
|
|
12
|
+
devrites-engine build-readiness; echo "readiness rc=$?"
|
|
13
|
+
|
|
14
|
+
devrites-engine reconcile snapshot
|
|
15
|
+
devrites-engine stuck log "$(cat .devrites/ACTIVE 2>/dev/null)" dispatch "<slice id>"
|
|
16
|
+
|
|
17
|
+
devrites-engine footprint log <slug> doubt "<decision id>"
|
|
18
|
+
|
|
19
|
+
devrites-engine reconcile check; echo "reconcile rc=$?"
|
|
20
|
+
devrites-engine test-integrity; echo "test-integrity rc=$?"
|
|
21
|
+
devrites-engine package-existence; echo "package-existence rc=$?"
|
|
22
|
+
|
|
23
|
+
devrites-engine conventions contradict --key <key> --slug <slug> \
|
|
24
|
+
--evidence "<what the live code does>" --drift-file .devrites/work/<slug>/drift.md
|
|
25
|
+
devrites-engine footprint log <slug> wright "<slice id>"
|
|
26
|
+
devrites-engine tick-afk <state.md path>
|
|
27
|
+
|
|
28
|
+
devrites-engine progress
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Conditional calls still obey the detailed rules below: doubt logging runs for
|
|
32
|
+
each stood decision; convention contradiction runs only when the wright reports
|
|
33
|
+
or exposes a contradiction; `tick-afk` runs only under AFK; forge follows
|
|
34
|
+
[`forge.md`](forge.md) and still returns to the same doubt, record, and stop
|
|
35
|
+
gates.
|
|
36
|
+
|
|
37
|
+
> **Running the gate helpers.** Each gated `bash` block calls the installed engine
|
|
38
|
+
> directly: `devrites-engine <command> [args]`. It **propagates its exit code**,
|
|
39
|
+
> so the `rc=$?` checks below still hold; host hooks fail open when the binary is absent,
|
|
40
|
+
> but phase gates should treat a missing engine as a setup problem.
|
|
41
|
+
|
|
42
|
+
0. **Rules + AFK + readiness check.** Read `.agents/skills/devrites-lib/reference/standards/core.md` first. Then **run the
|
|
43
|
+
shared orientation preamble** — it prints `state.md`, the artifacts present, the run
|
|
44
|
+
mode (HITL/AFK), and the open-question tally by gate, deterministically:
|
|
45
|
+
```bash
|
|
46
|
+
devrites-engine preamble
|
|
47
|
+
devrites-engine snapshot
|
|
48
|
+
```
|
|
49
|
+
Treat the snapshot as the canonical machine-readable status; if you need to tell the
|
|
50
|
+
user the next command, use `nextCommands.claude` in Claude Code or `nextCommands.codex`
|
|
51
|
+
in Codex. Then **run the readiness gate** — it enforces the step-0 stop conditions by exit code,
|
|
52
|
+
not by memory:
|
|
53
|
+
```bash
|
|
54
|
+
devrites-engine build-readiness; echo "readiness rc=$?"
|
|
55
|
+
```
|
|
56
|
+
A non-zero `rc` is a hard STOP: `2` → `$rite-define` (plan not approved), `3` →
|
|
57
|
+
`$rite-resolve` (awaiting human), `4` → `$rite-plan` (blocked). The prose below is the
|
|
58
|
+
same gate for installs without the script.
|
|
59
|
+
Orient from its digest. If `Status == awaiting_human` → **STOP**, tell the user to run
|
|
60
|
+
`$rite-resolve <qid> "<answer>"`. If `state.md` has no `Plan approved: <iso>` field
|
|
61
|
+
→ **STOP**, tell the user the plan isn't approved yet (`$rite-define` writes it when
|
|
62
|
+
the human confirms). If `.devrites/AFK` is present, re-derive the remaining AFK budget
|
|
63
|
+
from `state.md`'s `AFK slices remaining: <n>` field (initialized from `.devrites/AFK`
|
|
64
|
+
`max_slices` on the first AFK build); if it is `0` → **STOP** (forced HITL stop; raise
|
|
65
|
+
the count in `state.md` or remove the sentinel to continue). See
|
|
66
|
+
[`afk-discipline.md`](afk-discipline.md).
|
|
67
|
+
1. Read `spec.md`, `plan.md`, `tasks.md`, `assumptions.md`, `drift.md`, and `test-plan.md`
|
|
68
|
+
if present (the vetted coverage target from `$rite-vet` — the slice's tests come from
|
|
69
|
+
here when it exists). `state.md` and the open-`questions.md` tally are already in the
|
|
70
|
+
preamble digest from step 0 — re-read `questions.md` only for the full text of a flagged
|
|
71
|
+
blocking question.
|
|
72
|
+
If a **blocking `[NEEDS CLARIFICATION]`** remains or the spec/plan readiness gates
|
|
73
|
+
don't pass, stop → `$rite-spec` (to resolve) or `$rite-plan` (to repair). Don't build
|
|
74
|
+
on an unresolved spec.
|
|
75
|
+
2. Select the next pending slice (or the one in `$ARGUMENTS`). **Restate its goal,
|
|
76
|
+
acceptance criteria, and scope boundary** in one short block. Confirm it's still the
|
|
77
|
+
right next slice. Write the slice's `Mode` to `state.md` as `Slice mode: <HITL|AFK>` on
|
|
78
|
+
**every** selection (not only on the HITL pause path); `$rite-resolve` clears or updates
|
|
79
|
+
it on resume.
|
|
80
|
+
2a. **HITL gate (pre-action pause).** Read the slice's `Mode`. If `HITL`, surface the
|
|
81
|
+
checkpoint as a ranked **option set** and resolve it **before** any code lands, per
|
|
82
|
+
[`checkpoint-protocol.md`](checkpoint-protocol.md). Branch on whether
|
|
83
|
+
a human is here:
|
|
84
|
+
- **Human present (interactive — no `.devrites/AFK`) → ask inline via `AskUserQuestion`.**
|
|
85
|
+
This is the default for an interactive build. Render 2-4 options, the recommended one
|
|
86
|
+
**first and labelled `(Recommended)`**, each with its dimension-tagged rationale + the
|
|
87
|
+
trade-off it accepts, plus the `Something else — I'll describe it` escape hatch. The
|
|
88
|
+
human picks; record the pick to `questions.md` (`answered`) + `decisions.md` (through the
|
|
89
|
+
`devrites-engine resolve` writer), clear the gate, and **continue to step 3 in place** — do **not**
|
|
90
|
+
STOP, do **not** route through `$rite-resolve`.
|
|
91
|
+
- **Human absent / AFK (`.devrites/AFK` present) → auto-pick or persist + STOP.** For a gate
|
|
92
|
+
in `allow_gates`, auto-pick the recommended option (option 1) and proceed; otherwise
|
|
93
|
+
append the `questions.md` entry, write the `Awaiting human` block to `state.md`, set
|
|
94
|
+
`Status: awaiting_human`, fire the `notify:` hook, then **STOP** — resume when the user
|
|
95
|
+
runs `$rite-resolve <qid> "<answer>"`. `blocking` / `escalating` / irreversible-risk gates
|
|
96
|
+
always take this stop path, never the AFK auto-pick.
|
|
97
|
+
3. **Snapshot the tree, then dispatch the build core to `devrites-slice-wright`** — one `Task`
|
|
98
|
+
call, fresh context. **First**, capture the pre-dispatch tree so the reconcile gate (step 6)
|
|
99
|
+
can prove you never touched source — run this immediately before the `Task` call:
|
|
100
|
+
```bash
|
|
101
|
+
devrites-engine reconcile snapshot
|
|
102
|
+
```
|
|
103
|
+
Then log the dispatch so the stuck-loop detector can catch a slice that keeps being
|
|
104
|
+
re-dispatched without progress (it pauses the build even under AFK):
|
|
105
|
+
```bash
|
|
106
|
+
devrites-engine stuck log "$(cat .devrites/ACTIVE 2>/dev/null)" dispatch "<slice id>"
|
|
107
|
+
```
|
|
108
|
+
**Forge branch — only if the selected slice is `Forge: yes`.** Instead of the single dispatch
|
|
109
|
+
below, run the competitive build per [`forge.md`](forge.md): K=2-3 candidate
|
|
110
|
+
wrights, each in an **isolated git worktree** on the distinct strategy `$rite-vet` named, then a
|
|
111
|
+
fresh-context [`devrites-forge-judge`](.codex/agents/devrites-forge-judge.toml) scores them against
|
|
112
|
+
acceptance + `test-plan.md` + `.devrites/principles.md` + the anti-slop charter, and you land
|
|
113
|
+
exactly **one** winner's diff in the working tree, graft any cheap runner-up improvement by
|
|
114
|
+
continuing the winning wright once, and write `forge-report.md`. Forge returns the **same shape**
|
|
115
|
+
a single wright does (one structured artifact, for the winner), so steps 4-7 (doubt, fail-on-red,
|
|
116
|
+
reconcile against the winner's claimed set, record, stop) run **unchanged**. If you cannot give
|
|
117
|
+
the judge an objective scorecard (the slice lacks acceptance / `test-plan.md` coverage) or cannot
|
|
118
|
+
name two genuinely different strategies, the flag is stale — clear it and build single-path. The
|
|
119
|
+
single-writer invariant is intact: each candidate owns its own tree, exactly one author's diff
|
|
120
|
+
lands. Then **stop** here for this slice; the steps below are the default single-path dispatch.
|
|
121
|
+
|
|
122
|
+
Then assemble the slice contract and send it per
|
|
123
|
+
[`wright-dispatch.md`](wright-dispatch.md): the slice goal, acceptance
|
|
124
|
+
criteria, and **scope boundary**; the paths it may touch (`touched-files.md`); the context
|
|
125
|
+
paths to read (`spec.md`, `plan.md`, `decisions.md`, `assumptions.md`, `.devrites/principles.md`
|
|
126
|
+
when present — the binding invariants the slice must honor — plus `test-plan.md`
|
|
127
|
+
when present — its per-gap test requirements + regression-criticals for this slice are the
|
|
128
|
+
coverage the wright must write — and `design-brief.md`
|
|
129
|
+
when the slice touches UI per [`frontend-trigger.md`](frontend-trigger.md)); and the
|
|
130
|
+
`.agents/skills/devrites-lib/reference/standards/` files in scope. The wright **orients** on the project's idiom (using a
|
|
131
|
+
code-intelligence index **if available** — `codebase-memory-mcp` first, cross-checked with
|
|
132
|
+
`codegraph` (`.codegraph/` / `codegraph_*`) + `graphify` (`graphify-out/`), else standard
|
|
133
|
+
methods (LSP / `Read`/`Grep`/`Glob`); see `.agents/skills/devrites-lib/reference/standards/tooling.md` — for
|
|
134
|
+
placement/callers/impact), writes the **failing test first** when
|
|
135
|
+
behaviour changes ([`tdd.md`](tdd.md)), implements the **smallest complete** version in
|
|
136
|
+
the project's style (applying `devrites-frontend-craft` to `design-brief.md` for UI, and
|
|
137
|
+
`devrites-source-driven` — with context7 if available — for uncertain framework facts), runs the slice's **targeted tests**
|
|
138
|
+
(plus typecheck / lint / build where the project has them), and returns a structured artifact
|
|
139
|
+
— **code + tests only; it does not write the workspace files.** If the slice is UI but no `design-brief.md` exists (e.g. a spec written before
|
|
140
|
+
shaping), shape it via `devrites-ux-shape` before the wright codes. If the `Task` tool is
|
|
141
|
+
unavailable, run the wright's discipline **inline** as a flagged fallback (see the reference)
|
|
142
|
+
— same one-slice cycle, no isolation; in that case write
|
|
143
|
+
`.devrites/work/<slug>/.reconcile-inline` so the reconcile gate skips (you are legitimately
|
|
144
|
+
the writer in this fallback).
|
|
145
|
+
4. **Doubt the decisions it stood up.** For each entry in the wright's `Decisions stood`
|
|
146
|
+
(branching, boundary crossing, data model, auth, public API, migration, user-flow change,
|
|
147
|
+
"this is safe/scales") apply `devrites-doubt` **before accepting the slice** — the writer
|
|
148
|
+
doesn't grade its own decisions. Each `devrites-doubt` invocation **dispatches the
|
|
149
|
+
`devrites-doubt-reviewer` subagent** (doing the adversarial pass inline is the writer grading
|
|
150
|
+
itself — the thing this step exists to forbid). **Completion criterion (checkable):** step 4
|
|
151
|
+
is done only when **every** `Decisions stood` entry carries a recorded `devrites-doubt`
|
|
152
|
+
verdict — `accept`, or `reject` + the required changes — in `decisions.md` (accepted
|
|
153
|
+
trade-offs) / `questions.md` (open gates). A `Decisions stood` entry with **no verdict on
|
|
154
|
+
record** means doubt did not run for it: **do not enter step 5 and do not mark the slice
|
|
155
|
+
`built`.** Log each dispatch so the seal can prove doubt ran (the footprint already counts a
|
|
156
|
+
`doubt` kind):
|
|
157
|
+
```bash
|
|
158
|
+
devrites-engine footprint log <slug> doubt "<decision id>"
|
|
159
|
+
```
|
|
160
|
+
The doubt loop honours `.devrites/AFK` (see its AFK exception): findings below the slice's gate ceiling become advisory entries in `questions.md`;
|
|
161
|
+
destructive / auth / public-API concerns always pause regardless. A non-empty `Escalation` in
|
|
162
|
+
the artifact is handled here too: irreversible-risk / blockers → blocking question + set
|
|
163
|
+
`Status: awaiting_human`; a scope-changing answer → `$rite-plan repair` (Spec Drift Guard),
|
|
164
|
+
never silently into the slice. **If an irreversible-risk item shows up under the wright's
|
|
165
|
+
`Decisions stood` rather than `Escalation`**, treat that misclassification as itself a
|
|
166
|
+
blocking protocol violation — pause and re-dispatch with the item flagged out-of-bounds, do
|
|
167
|
+
**not** doubt-and-accept it. (The wright's return is the not-yet-load-bearing moment — the
|
|
168
|
+
slice isn't `built` or merged yet — so this post-return doubt is still pre-commit.)
|
|
169
|
+
**Principle check (same standing):** a wright return that breaks a declared principle
|
|
170
|
+
(reported in its `Principles` field, or that you detect against `.devrites/principles.md`) is
|
|
171
|
+
handled here like an irreversible-risk item — block, route to a human-approved scoped
|
|
172
|
+
exception in the register or stop; never doubt-and-accept a principle violation into the slice.
|
|
173
|
+
5. **Fail-on-red.** If the wright's `Gates` were red (targeted tests / types / lint) or it
|
|
174
|
+
couldn't verify: do **not** mark the slice `built`, and **do not fix the code yourself**.
|
|
175
|
+
First remedy — **continue the same wright once** (`SendMessage` to it, carrying the failing
|
|
176
|
+
gate + its real output) so it fixes in its own context. This retry is for **objective
|
|
177
|
+
failures only** — red gate / type / lint / missing test coverage / UI browser-proof fail —
|
|
178
|
+
never a contested decision (that routes to `$rite-plan repair`). **Still red after the one
|
|
179
|
+
retry** → escalate: AFK → append a blocking question to `questions.md` (gate=blocking,
|
|
180
|
+
slice's SLA) + set `Status: awaiting_human`; HITL → pause as a blocking gate. Either way,
|
|
181
|
+
`Next step: $rite-plan unblock` until resolved.
|
|
182
|
+
6. **Record — you are the canonical writer.** **First, run the reconcile gate (A1):** write the
|
|
183
|
+
wright's reported `Files changed` paths (one per line) to
|
|
184
|
+
`.devrites/work/<slug>/.reconcile-claimed` (or the active legacy
|
|
185
|
+
`.devrites/features/<slug>/` workspace during migration), then:
|
|
186
|
+
```bash
|
|
187
|
+
devrites-engine reconcile check; echo "reconcile rc=$?"
|
|
188
|
+
```
|
|
189
|
+
**Exit 5 → hard STOP:** a source file changed outside the wright's claimed set — code was
|
|
190
|
+
edited by something other than the wright (A1 breach). Revert it and re-dispatch the wright;
|
|
191
|
+
do **not** mark the slice `built`.
|
|
192
|
+
|
|
193
|
+
**Then run the test-integrity gate (anti-reward-hacking)** — prove the slice didn't reach
|
|
194
|
+
green by weakening its tests:
|
|
195
|
+
```bash
|
|
196
|
+
devrites-engine test-integrity; echo "test-integrity rc=$?"
|
|
197
|
+
```
|
|
198
|
+
**Exit 3 → hard STOP:** a test was deleted, skipped, or de-asserted since the slice base — the
|
|
199
|
+
slice went green by weakening its tests, a Critical protocol violation. Revert the weakening and
|
|
200
|
+
re-dispatch the wright; do **not** mark the slice `built`.
|
|
201
|
+
|
|
202
|
+
**Then run the package-existence gate (anti-hallucination)** — every new third-party import must
|
|
203
|
+
be declared in a project manifest, not just imported:
|
|
204
|
+
```bash
|
|
205
|
+
devrites-engine package-existence; echo "package-existence rc=$?"
|
|
206
|
+
```
|
|
207
|
+
**Exit 3 → STOP:** an imported package is not declared in any manifest (`package.json`, `go.mod`,
|
|
208
|
+
`requirements.txt`, `pyproject.toml`, `Pipfile`, `Cargo.toml`) — the classic shape of a
|
|
209
|
+
hallucinated or typo-squatted dependency. Confirm the name on the registry and declare it via the
|
|
210
|
+
package manager, or remove the import; do **not** mark the slice `built`. The gate is deterministic
|
|
211
|
+
and fail-open (not a git repo / no manifest / stdlib-only import → rc 0).
|
|
212
|
+
|
|
213
|
+
Then, from the wright's artifact, update `state.md`,
|
|
214
|
+
`evidence.md`, `touched-files.md` (and `browser-evidence.md` for UI). Add a `## Review trail`
|
|
215
|
+
to `touched-files.md`: group the slice's important `path:line` stops by concern (design intent,
|
|
216
|
+
not file order), 1–5 concerns, each stop under 15 words. This is for a later human walkthrough;
|
|
217
|
+
keep it factual and skip invented rationale. **Persist every
|
|
218
|
+
`Decisions stood` entry from the wright's artifact to a `## Decisions stood` section in
|
|
219
|
+
`decisions.md`, one line each ending `— doubt: <accept | reject-resolved | MISSING>`** — the
|
|
220
|
+
verdict from step 4, or `MISSING` if step 4 was skipped for that entry. Write this ledger at
|
|
221
|
+
record-time **independent of the doubt step**, so a stood decision lands on disk even when it
|
|
222
|
+
was never doubted: `$rite-seal` cross-checks the ledger, and a `doubt: MISSING` entry is the
|
|
223
|
+
skipped-doubt finding that would otherwise leave no trace (the per-slice skip the footprint
|
|
224
|
+
count alone can't catch). If the wright stood no decisions, write `## Decisions stood` with
|
|
225
|
+
`- none` so the absence is recorded, not assumed. If the wright reported
|
|
226
|
+
an approach it tried and backed out of, record it under a `## Dead ends` section in
|
|
227
|
+
`decisions.md` so a retry or the next agent doesn't repeat it.
|
|
228
|
+
**If the wright's `Conventions` field reports a contradiction** (the live code now
|
|
229
|
+
disagrees with a held convention), record the drift — you own this bookkeeping:
|
|
230
|
+
```bash
|
|
231
|
+
devrites-engine conventions contradict --key <key> --slug <slug> \
|
|
232
|
+
--evidence "<what the live code does>" --drift-file .devrites/work/<slug>/drift.md
|
|
233
|
+
```
|
|
234
|
+
It lowers the convention's band (or retires it) and appends a `convention-drift` entry to
|
|
235
|
+
`drift.md`. The ledger is **promoted only at `$rite-seal` on GO** — build only records
|
|
236
|
+
contradictions, never new conventions. **Evidence is the
|
|
237
|
+
wright's real command output, not its say-so.** Capture per
|
|
238
|
+
[`evidence-standard.md`](evidence-standard.md). Append a footprint record for this
|
|
239
|
+
slice's wright dispatch (deterministic run-weight bookkeeping the seal reports):
|
|
240
|
+
```bash
|
|
241
|
+
devrites-engine footprint log <slug> wright "<slice id>"
|
|
242
|
+
```
|
|
243
|
+
If `.devrites/AFK` is present, decrement
|
|
244
|
+
the budget by running `devrites-engine tick-afk <state.md path>` —
|
|
245
|
+
it decrements `state.md`'s `AFK slices remaining` field, prints the new value, and exits `3`
|
|
246
|
+
when it hits 0. **Exit 3 → STOP** (forced HITL stop; the cap is exhausted). Never rewrite
|
|
247
|
+
`.devrites/AFK` `max_slices` in place — it is read-only initial budget.
|
|
248
|
+
7. **STOP.** Render the progress footer, then report and recommend the next step. Run the
|
|
249
|
+
shared footer (mirror of the step-0 preamble) so the slice meter + flow ribbon are
|
|
250
|
+
deterministic, not model-typed:
|
|
251
|
+
```bash
|
|
252
|
+
devrites-engine progress
|
|
253
|
+
```
|
|
254
|
+
It reads `state.md` (already updated in step 6), so the meter reflects the slice you
|
|
255
|
+
just built. **When every slice is built** (`✅ ALL BUILT`) say so explicitly — the build
|
|
256
|
+
phase is complete, the next phase is `$rite-prove` — don't leave completion implicit.
|
|
257
|
+
|
|
258
|
+
> **Mid-flight discipline.** The wright (or you, in the inline fallback) must resist doing two slices, skipping TDD, adding a defensive check, or wandering outside `touched-files.md`; you must resist skipping the post-return `devrites-doubt` because the wright "seems confident" — see [`anti-patterns.md`](anti-patterns.md). Load it the moment you reach for the excuse.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Spec Drift Guard (build phase)
|
|
2
|
+
|
|
3
|
+
Active throughout `$rite-build`. The spec is living, not sacred — but you may not
|
|
4
|
+
silently code against a plan you know is wrong. This is the canonical Spec Drift Guard;
|
|
5
|
+
other phases reference it here.
|
|
6
|
+
|
|
7
|
+
## Drift has occurred when
|
|
8
|
+
- the spec says X but the code makes X impossible/wrong;
|
|
9
|
+
- the plan assumes a file/API/component/route/model/command that doesn't exist;
|
|
10
|
+
- tests show the acceptance criteria are incomplete or wrong;
|
|
11
|
+
- browser evidence shows the intended UX doesn't work as described;
|
|
12
|
+
- an official doc contradicts the planned approach;
|
|
13
|
+
- the design system / existing UX pattern contradicts the planned UI;
|
|
14
|
+
- a missing user decision that affects product behavior surfaces.
|
|
15
|
+
|
|
16
|
+
## Workflow
|
|
17
|
+
```
|
|
18
|
+
1. STOP coding.
|
|
19
|
+
2. Record in drift.md (assumed vs observed, when).
|
|
20
|
+
3. Classify: requirement ambiguity | implementation-plan error | codebase reality
|
|
21
|
+
mismatch | design-system mismatch | test/evidence mismatch | external-doc mismatch
|
|
22
|
+
| user-decision required.
|
|
23
|
+
4. Local repair that preserves behavior/scope/architecture/data/UX/security/migration?
|
|
24
|
+
YES → log in drift.md + decisions.md, $rite-plan repair, resume.
|
|
25
|
+
NO → ask the user (format below). Don't continue on the old plan.
|
|
26
|
+
5. Run $rite-plan repair before resuming.
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## User question format
|
|
30
|
+
```
|
|
31
|
+
I hit spec drift:
|
|
32
|
+
- Spec/plan assumed: ...
|
|
33
|
+
- Code/evidence shows: ...
|
|
34
|
+
- Why it matters: ...
|
|
35
|
+
|
|
36
|
+
Which direction should DevRites take?
|
|
37
|
+
1. Keep the requirement, change architecture by ...
|
|
38
|
+
2. Adjust the requirement to match existing behavior ...
|
|
39
|
+
3. Split into a follow-up feature ...
|
|
40
|
+
4. Custom: describe the intended behavior
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Never continue coding on a known-wrong plan. Always re-plan before resuming.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# TDD / Prove-It pattern
|
|
2
|
+
|
|
3
|
+
When a slice changes behavior, prove the change with a test that fails first — so you
|
|
4
|
+
know the test can fail, and that your code is what makes it pass.
|
|
5
|
+
|
|
6
|
+
## Red → Green → Refactor
|
|
7
|
+
1. **Red** — write the smallest test that expresses the new behavior. Run it; watch it
|
|
8
|
+
fail for the *expected* reason (not a typo/import error).
|
|
9
|
+
2. **Green** — write the minimum code to pass. Resist gold-plating.
|
|
10
|
+
3. **Refactor** — clean up with the test as a safety net. Re-run; stay green.
|
|
11
|
+
|
|
12
|
+
## Prove-It (when strict TDD doesn't fit)
|
|
13
|
+
For code where a test-first flow is awkward (exploratory glue, config, some UI), still
|
|
14
|
+
produce evidence:
|
|
15
|
+
- Capture the current (wrong/absent) behavior — a failing assertion, a screenshot, a
|
|
16
|
+
log line.
|
|
17
|
+
- Make the change.
|
|
18
|
+
- Capture the new behavior the same way. The before/after pair *is* the proof.
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
- Use the project's existing test framework and commands (discovered in `spec.md` →
|
|
22
|
+
"Commands discovered"). Don't introduce a new test runner to prove a slice.
|
|
23
|
+
- One behavior per test; name it for the behavior, not the function.
|
|
24
|
+
- A green test you never saw fail proves nothing — always see red first.
|
|
25
|
+
- Don't delete or weaken a failing test to "pass". If it's wrong, that may be drift.
|
|
26
|
+
- Record the test command + result in `evidence.md`.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Slice-wright dispatch
|
|
2
|
+
|
|
3
|
+
How `$rite-build` hands the **build core** of one slice to `devrites-slice-wright` — the
|
|
4
|
+
fresh-context, **write-capable** executor under `.codex/agents/`. Loaded on demand by
|
|
5
|
+
`$rite-build`; not a skill itself. Sibling of
|
|
6
|
+
[`../../devrites-lib/reference/parallel-dispatch.md`](../../devrites-lib/reference/parallel-dispatch.md)
|
|
7
|
+
(the read-only reviewer fan-out) — same isolation principle, opposite direction: this one
|
|
8
|
+
**writes**.
|
|
9
|
+
|
|
10
|
+
Pattern: the orchestrator owns the **gates and the workspace**; the wright owns the **writing**.
|
|
11
|
+
Brief it precisely, in a clean context, with only the slice contract — then doubt, record, and
|
|
12
|
+
gate its return.
|
|
13
|
+
|
|
14
|
+
## Why a fresh context writes the slice
|
|
15
|
+
The orchestrator's window is full of spec investigation, planning, prior slices, and tool
|
|
16
|
+
output — the exact "lost-in-the-middle" load that degrades instruction-following and pulls the
|
|
17
|
+
model toward generic code. The wright starts clean and sees only the contract, so it holds the
|
|
18
|
+
slice boundary strictly and writes to the *project's* idiom instead of drifting. Single-threaded
|
|
19
|
+
by design: **one** wright per slice, never a parallel fan-out of writers *sharing a tree* —
|
|
20
|
+
concurrent writers on one working tree make conflicting implicit decisions and produce incoherent
|
|
21
|
+
code. The one sanctioned exception is a **forge** slice, which competes K candidates in *isolated*
|
|
22
|
+
worktrees and lands exactly one — no tree ever has two authors, so the invariant holds (see
|
|
23
|
+
[Forge](#forge--competing-candidates-the-deliberate-exception)).
|
|
24
|
+
|
|
25
|
+
## The contract `$rite-build` sends
|
|
26
|
+
One `Task` call to `devrites-slice-wright` carrying everything the writer needs and nothing it
|
|
27
|
+
doesn't:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
Build one slice of the active DevRites feature. You have a clean context — this contract is
|
|
31
|
+
the whole job.
|
|
32
|
+
|
|
33
|
+
Workspace: .devrites/work/<slug>/
|
|
34
|
+
Slice: <id — name>
|
|
35
|
+
Goal: <one or two sentences>
|
|
36
|
+
Acceptance criteria: <the slice's criteria, verbatim>
|
|
37
|
+
UI visual acceptance: <if UI — state × viewport × input + target R-id/brief rule, verbatim from tasks.md>
|
|
38
|
+
Scope boundary: <what it WILL and will NOT touch>
|
|
39
|
+
Mode: <HITL | AFK> (+ AFK budget note if a cap is set)
|
|
40
|
+
|
|
41
|
+
Targets (stay inside these — from touched-files.md): <paths>
|
|
42
|
+
Interfaces / signatures to match: <if any>
|
|
43
|
+
Read yourself: spec.md, plan.md, decisions.md, assumptions.md, rite-polish/reference/anti-ai-slop.md<, design-brief.md if UI>
|
|
44
|
+
Rules in scope (.agents/skills/devrites-lib/reference/standards/): coding-style, error-handling, testing, patterns<, security if input/auth/data><, performance if hot path / query / large payload>
|
|
45
|
+
Test completeness: write ≥1 asserting test for EVERY interactive element + user flow in this
|
|
46
|
+
slice's test-plan.md interaction inventory, each at the right level (fields/elements →
|
|
47
|
+
unit/component; critical journeys → one E2E; never one-per-field). No element ships
|
|
48
|
+
unverified — testing.md "Completeness". If the slice has no test-plan inventory, derive the
|
|
49
|
+
element/flow list from the slice's own UI surface and cover it the same way.
|
|
50
|
+
|
|
51
|
+
Apply your documented discipline (orient → RED → implement smallest complete → verify →
|
|
52
|
+
return). Frontend slice → build to design-brief.md with devrites-frontend-craft and close
|
|
53
|
+
the slice's visual-acceptance deltas before returning. Uncertain
|
|
54
|
+
framework fact → verify at the source. Code + tests only — do NOT write the workspace
|
|
55
|
+
bookkeeping files; return that data. Return your structured artifact, not your transcript.
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Rules:
|
|
59
|
+
- **One `Task` call, one wright.** Never dispatch two writers on the same slice.
|
|
60
|
+
- **No author reasoning beyond the contract.** Give the slice spec, not your analysis of *how*
|
|
61
|
+
to code it — a clean, undirected read is the point.
|
|
62
|
+
- **Name the boundary explicitly.** The scope boundary is the single most load-bearing field; an
|
|
63
|
+
underspecified one is the main cause of drift.
|
|
64
|
+
|
|
65
|
+
## On return — the orchestrator's job (don't delegate these)
|
|
66
|
+
**You never edit source here.** The wright is the only writer of code + tests; you write only
|
|
67
|
+
`.devrites/` bookkeeping. Every remedy below is **continue the same wright once** or **stop +
|
|
68
|
+
escalate** — never an inline patch. You snapshotted the tree before dispatch (`devrites-engine reconcile snapshot`); the reconcile check in step 4 proves no source changed outside the wright's claimed
|
|
69
|
+
set.
|
|
70
|
+
|
|
71
|
+
1. **Doubt the surfaced decisions.** For each entry in the wright's `Decisions stood`, apply
|
|
72
|
+
`devrites-doubt` (→ `devrites-doubt-reviewer`) before accepting — the writer must not grade
|
|
73
|
+
its own decisions. The wright's return is the not-yet-load-bearing moment (slice not `built`,
|
|
74
|
+
not merged), so this post-return doubt is still pre-commit. Irreversible-risk items always
|
|
75
|
+
pause — and an irreversible item that the wright filed under `Decisions stood` instead of
|
|
76
|
+
`Escalation` is a protocol violation: pause and re-dispatch with it flagged out-of-bounds,
|
|
77
|
+
don't doubt-and-accept.
|
|
78
|
+
2. **Honor escalations.** A non-empty `Escalation` → do **not** mark the slice built. Write the
|
|
79
|
+
`questions.md` entry + `state.md` `Awaiting human` (blocking gate), or route a scope change
|
|
80
|
+
through `$rite-plan repair` (Spec Drift Guard). You are the canonical writer of these files.
|
|
81
|
+
3. **Fail-on-red.** If `Gates` show red (or the wright couldn't verify), the slice is **not
|
|
82
|
+
built** — and you do **not** fix the code. First remedy: **continue the same wright once**
|
|
83
|
+
(`SendMessage`, carrying the failing gate + real output) so it fixes in its own context —
|
|
84
|
+
objective failures only (red gate / type / lint / missing coverage / UI browser-proof fail),
|
|
85
|
+
never a contested decision. Still red after that one retry → blocking question (AFK) or
|
|
86
|
+
blocking gate (HITL); `Next: $rite-plan unblock`.
|
|
87
|
+
An interactive element or user flow in the slice's test-plan interaction inventory left with
|
|
88
|
+
**no asserting test** has the same standing as red: an unverified-element gap blocks the
|
|
89
|
+
slice (don't mark it built). Continue the same wright to cover it, or record a blocker.
|
|
90
|
+
4. **Reconcile, then record.** First prove A1 held: write the wright's `Files changed` paths
|
|
91
|
+
(one per line) to `.devrites/work/<slug>/.reconcile-claimed` and run `devrites-engine reconcile check`.
|
|
92
|
+
**Exit 5 → STOP** — a source file changed outside the wright's claimed set (A1 breach); revert
|
|
93
|
+
it and re-dispatch, don't mark the slice built. Then persist the wright's artifact to
|
|
94
|
+
`state.md`, `evidence.md`, `touched-files.md` (and `browser-evidence.md` for UI) per
|
|
95
|
+
[`evidence-standard.md`](evidence-standard.md). Evidence is the wright's real command output,
|
|
96
|
+
not its say-so. Add a concern-ordered `## Review trail` to `touched-files.md` from the wright's changed paths and summary so a human can review by design intent instead of file order. **Persist every `Decisions stood` entry to a `## Decisions stood` section in
|
|
97
|
+
`decisions.md`, one line each ending `— doubt: <accept | reject-resolved | MISSING>`** —
|
|
98
|
+
independent of the doubt step (step 1 above), so a skipped decision still lands on record for
|
|
99
|
+
the seal's doubt-coverage cross-check (`- none` when the wright stood nothing). Then tick AFK if
|
|
100
|
+
`.devrites/AFK` is present (`devrites-engine tick-afk`; exit 3 → STOP).
|
|
101
|
+
|
|
102
|
+
## Forge — competing candidates (the deliberate exception)
|
|
103
|
+
|
|
104
|
+
The single-writer rule forbids parallel writers **sharing one tree**. A `Forge: yes` slice
|
|
105
|
+
(flagged by `$rite-vet` as a genuine architecture fork at Complexity ≥4) is the one sanctioned
|
|
106
|
+
fan-out, and it keeps the rule intact by **isolation**: each candidate wright works in its own
|
|
107
|
+
`git worktree`, sees the identical slice contract plus one **distinct strategy**, and never
|
|
108
|
+
touches another candidate's tree. A read-only [`devrites-forge-judge`](.codex/agents/devrites-forge-judge.toml)
|
|
109
|
+
then scores the finished candidates against acceptance + `test-plan.md` + `.devrites/principles.md`
|
|
110
|
+
+ the anti-slop charter, and the orchestrator lands **exactly one** winner's diff in the working
|
|
111
|
+
tree. No tree ever has two authors; exactly one author's work ships. Everything downstream (doubt,
|
|
112
|
+
fail-on-red, reconcile against the winner's claimed set, record) runs on the winner as if a single
|
|
113
|
+
wright had built it.
|
|
114
|
+
|
|
115
|
+
Full mechanics — strategy derivation, worktree setup, the judge contract, landing + grafting the
|
|
116
|
+
winner, `forge-report.md`, AFK budgeting, and the worktree-unavailable fallback — live in
|
|
117
|
+
[`forge.md`](forge.md).
|
|
118
|
+
|
|
119
|
+
## Fallback
|
|
120
|
+
If the `Task` tool / sub-agent dispatch is unavailable, `$rite-build` runs the wright's
|
|
121
|
+
discipline **inline** in its own context and flags it as a fallback (no clean-context benefit).
|
|
122
|
+
The slice still gets the full one-slice cycle — orient → RED → implement → verify — under the
|
|
123
|
+
same anti-slop charter; it just doesn't get the isolation. In this path the orchestrator is
|
|
124
|
+
legitimately the writer, so write `.devrites/work/<slug>/.reconcile-inline` before editing — the
|
|
125
|
+
reconcile gate (step 4) skips when that sentinel is present. Mirrors the reviewer-dispatch
|
|
126
|
+
fallback in
|
|
127
|
+
[`../../devrites-lib/reference/parallel-dispatch.md`](../../devrites-lib/reference/parallel-dispatch.md).
|
|
128
|
+
|
|
129
|
+
## Optional pre-block hook (defense in depth)
|
|
130
|
+
`devrites-engine reconcile` is the **post-hoc** gate — it always runs and catches an A1 breach at record time.
|
|
131
|
+
A companion **pre-block** hook, `devrites-engine hook a1-guard` (a `PreToolUse` matcher on
|
|
132
|
+
`Edit|Write|MultiEdit`), stops the breach *before* the write lands. It is armed only inside the
|
|
133
|
+
mid-build window (between `devrites-engine reconcile snapshot` and a clean `check`, keyed on `.reconcile-base`),
|
|
134
|
+
allows the wright (subagent calls carry `agent_id`), the inline fallback (`.reconcile-inline`),
|
|
135
|
+
and any `.devrites/` write — so it never touches `$rite-polish`, `$rite-quick`, or ordinary
|
|
136
|
+
manual edits. It ships **observe-only** (logs would-be blocks to `.a1-guard.log`, never blocks);
|
|
137
|
+
flip to enforce with `DEVRITES_A1_HOOK=enforce` or a `.devrites/work/<slug>/.a1-enforce` file once
|
|
138
|
+
the log confirms it never flags the wright's own edits (older Claude Code builds may not populate
|
|
139
|
+
`agent_id` — the log is the proof before you enforce). The post-hoc gate stands on its own; the
|
|
140
|
+
hook is belt-and-suspenders.
|