devrites 2.6.1 → 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 +71 -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 -912
- package/pack/.claude/agents/devrites-code-reviewer.md +20 -3
- package/pack/.claude/agents/devrites-devex-reviewer.md +13 -3
- package/pack/.claude/agents/devrites-doubt-reviewer.md +16 -3
- package/pack/.claude/agents/devrites-forge-judge.md +14 -4
- package/pack/.claude/agents/devrites-frontend-reviewer.md +27 -3
- package/pack/.claude/agents/devrites-performance-reviewer.md +18 -2
- package/pack/.claude/agents/devrites-plan-reviewer.md +13 -3
- package/pack/.claude/agents/devrites-retrospector.md +12 -7
- package/pack/.claude/agents/devrites-security-auditor.md +20 -4
- package/pack/.claude/agents/devrites-simplifier-reviewer.md +17 -2
- package/pack/.claude/agents/devrites-slice-wright.md +32 -16
- package/pack/.claude/agents/devrites-spec-reviewer.md +17 -2
- package/pack/.claude/agents/devrites-strategy-reviewer.md +12 -2
- package/pack/.claude/agents/devrites-test-analyst.md +20 -3
- package/pack/.claude/settings.json +58 -8
- package/pack/.claude/skills/devrites-api-interface/SKILL.md +22 -5
- package/pack/.claude/skills/devrites-audit/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-browser-proof/SKILL.md +26 -53
- package/pack/.claude/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
- package/pack/.claude/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +21 -6
- package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +11 -0
- package/pack/.claude/skills/devrites-debug-recovery/reference/regression-test.md +2 -3
- package/pack/.claude/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/.claude/skills/devrites-doubt/SKILL.md +10 -3
- package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +16 -13
- package/pack/.claude/skills/devrites-frontend-craft/reference/craft.md +15 -3
- package/pack/.claude/skills/devrites-frontend-craft/reference/quality-standards.md +19 -0
- package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/.claude/skills/devrites-interview/SKILL.md +30 -7
- package/pack/.claude/skills/devrites-lib/SKILL.md +35 -36
- package/pack/.claude/skills/devrites-lib/reference/intent-map.md +16 -0
- package/pack/.claude/skills/devrites-lib/reference/model-tiers.md +43 -0
- package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +104 -20
- package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +111 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/README.md +14 -6
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/afk-hitl.md +10 -18
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/agents.md +81 -16
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/anti-patterns.md +3 -4
- package/pack/.claude/skills/devrites-lib/reference/standards/browser-proof-checklist.md +9 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +62 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +141 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/context-hygiene.md +17 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/core.md +9 -18
- package/pack/.claude/skills/devrites-lib/reference/standards/definition-of-done.md +16 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/deprecation.md +21 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/developer-experience.md +3 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +51 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/documentation.md +9 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/edge-case-trace.md +19 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/elicitation.md +80 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/git-workflow.md +65 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/observability.md +13 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/performance.md +1 -1
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/principles.md +3 -3
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/prose-style.md +18 -2
- package/pack/.claude/skills/devrites-lib/reference/standards/release/ship-checklist.md +9 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/review-checklist.md +10 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/security-checklist.md +9 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/security.md +45 -4
- package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +105 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/spec-grammar.md +185 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/test-proof-checklist.md +9 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +162 -0
- package/pack/.claude/{rules → skills/devrites-lib/reference/standards}/tooling.md +29 -2
- package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +110 -0
- package/pack/.claude/skills/devrites-prose-craft/SKILL.md +40 -76
- package/pack/.claude/skills/devrites-prose-craft/reference/examples.md +19 -5
- package/pack/.claude/skills/devrites-refresh-indexes/SKILL.md +3 -6
- package/pack/.claude/skills/devrites-source-driven/SKILL.md +17 -1
- package/pack/.claude/skills/devrites-ux-shape/SKILL.md +20 -7
- package/pack/.claude/skills/devrites-ux-shape/reference/brief-template.md +25 -10
- package/pack/.claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +2 -2
- package/pack/.claude/skills/rite/SKILL.md +67 -42
- package/pack/.claude/skills/rite/reference/menu.md +4 -1
- package/pack/.claude/skills/rite-adopt/SKILL.md +31 -22
- package/pack/.claude/skills/rite-adopt/reference/adoption.md +6 -9
- package/pack/.claude/skills/rite-adopt/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +25 -25
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +2 -2
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +1 -1
- package/pack/.claude/skills/rite-build/SKILL.md +24 -256
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +3 -3
- package/pack/.claude/skills/rite-build/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +1 -1
- package/pack/.claude/skills/rite-build/reference/checkpoint.md +44 -0
- package/pack/.claude/skills/rite-build/reference/evidence-standard.md +10 -7
- package/pack/.claude/skills/rite-build/reference/forge.md +17 -7
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +2 -0
- package/pack/.claude/skills/rite-build/reference/output.md +41 -0
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +258 -0
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +11 -10
- package/pack/.claude/skills/rite-converge/SKILL.md +131 -0
- package/pack/.claude/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +61 -0
- package/pack/.claude/skills/rite-customize/SKILL.md +67 -0
- package/pack/.claude/skills/rite-define/SKILL.md +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,145 @@
|
|
|
1
|
+
# AFK discipline — running `$rite-build` unattended without burning the trunk
|
|
2
|
+
|
|
3
|
+
AFK mode is `.devrites/AFK` present. It lets `$rite-build` chain slices without per-slice
|
|
4
|
+
user input. The discipline below is what keeps an AFK loop from drifting into damage.
|
|
5
|
+
|
|
6
|
+
The core principles are borrowed from established autonomous-coding loops (Ralph Wiggum,
|
|
7
|
+
Claude Code auto mode):
|
|
8
|
+
|
|
9
|
+
1. **Feedback loops are the trust substrate.** No green tests / types / lint → no
|
|
10
|
+
"built" status. The loop can't declare victory if the lights are red.
|
|
11
|
+
2. **Always cap iterations.** Stochastic systems + infinite loops = unsafe. `max_slices`
|
|
12
|
+
is the hard counter.
|
|
13
|
+
3. **Promote pre-action gates, demote post-action gates.** Code that lands without a
|
|
14
|
+
gate is a finding; gates after the fact are review queues.
|
|
15
|
+
4. **AFK widens what's automatic, never what's irreversible.** Destructive work, auth
|
|
16
|
+
boundaries, public API breaks always pause regardless of the sentinel.
|
|
17
|
+
|
|
18
|
+
## The sentinel file
|
|
19
|
+
|
|
20
|
+
`.devrites/AFK` (presence = AFK). Optional YAML body:
|
|
21
|
+
|
|
22
|
+
```yaml
|
|
23
|
+
max_slices: 10 # read-only INITIAL budget; seeds state.md on first AFK build
|
|
24
|
+
notify: "ntfy.sh/my-topic" # shell command run on awaiting_human transition
|
|
25
|
+
allow_gates: [advisory, validating] # gate severities AFK may auto-handle
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
`.devrites/AFK` is **read-only config** — never rewritten in place. `max_slices` is the
|
|
29
|
+
initial budget; the mutable remaining count lives in `state.md` as `AFK slices remaining:
|
|
30
|
+
<n>`, seeded from `max_slices` on the first AFK build and decremented by `devrites-engine tick-afk`
|
|
31
|
+
(see "Iteration cap").
|
|
32
|
+
|
|
33
|
+
Defaults when keys are omitted:
|
|
34
|
+
- `max_slices`: unlimited (a missing cap is risky — see "Always cap iterations").
|
|
35
|
+
- `notify`: none.
|
|
36
|
+
- `allow_gates`: `[advisory]`.
|
|
37
|
+
|
|
38
|
+
To disable AFK temporarily, delete the file. The next `$rite-build` boots straight back
|
|
39
|
+
into HITL.
|
|
40
|
+
|
|
41
|
+
## Iteration cap
|
|
42
|
+
|
|
43
|
+
`$rite-build`'s **record step** (workflow step 6) decrements `state.md`'s `AFK slices
|
|
44
|
+
remaining` by 1 each time a slice is marked `built`, by running
|
|
45
|
+
`devrites-engine tick-afk <state.md path>`. The script reads the
|
|
46
|
+
field, decrements, writes it back, prints the new value, and **exits `3` when it hits 0**.
|
|
47
|
+
The cap is enforced by `devrites-engine tick-afk`, not by prose — when it exits 3:
|
|
48
|
+
|
|
49
|
+
- `$rite-build` treats exit 3 as a forced HITL stop:
|
|
50
|
+
```
|
|
51
|
+
AFK cap reached. Raise `state.md` `AFK slices remaining` or remove the sentinel to continue.
|
|
52
|
+
```
|
|
53
|
+
- The workspace stays consistent — no half-built slice, no pending question.
|
|
54
|
+
|
|
55
|
+
Step 0 re-derives the remaining budget from `state.md` (seeding it from `.devrites/AFK`
|
|
56
|
+
`max_slices` on the first AFK build); `max_slices` itself is read-only and never rewritten.
|
|
57
|
+
|
|
58
|
+
The cap is intentional: a missing or large cap **must be a conscious choice**. Ralph's
|
|
59
|
+
rule: 5-10 iterations for small tasks, 30-50 for larger ones. Don't ship "unlimited" as
|
|
60
|
+
the default for a job you haven't observed running once HITL.
|
|
61
|
+
|
|
62
|
+
## Fail-on-red
|
|
63
|
+
|
|
64
|
+
The **fail-on-red step** (workflow step 5) refuses to mark a slice `built` if targeted tests /
|
|
65
|
+
types / lint are red. The reasoning:
|
|
66
|
+
|
|
67
|
+
- A red signal means either the slice's contract is wrong or the failing code is. Neither
|
|
68
|
+
is something AFK can resolve.
|
|
69
|
+
- Marking it `built` and letting the AFK loop chain to the next slice burns the trunk —
|
|
70
|
+
the next slice builds on broken state.
|
|
71
|
+
|
|
72
|
+
The fail-on-red path:
|
|
73
|
+
|
|
74
|
+
1. Append a question to `questions.md` with `gate: blocking`, the SLA of the slice, and a
|
|
75
|
+
crisp `question:` field naming what failed.
|
|
76
|
+
2. Set `state.md` `Status: awaiting_human` and the `Awaiting human` block.
|
|
77
|
+
3. Fire the `notify:` hook if defined.
|
|
78
|
+
4. STOP.
|
|
79
|
+
|
|
80
|
+
The user resolves via `$rite-resolve` after diagnosing or re-planning.
|
|
81
|
+
|
|
82
|
+
## Irreversible-risk list (always pause)
|
|
83
|
+
|
|
84
|
+
Regardless of `allow_gates`, AFK invokes the checkpoint protocol when the slice touches
|
|
85
|
+
any of:
|
|
86
|
+
|
|
87
|
+
- Destructive data migration (drop column, drop table, irreversible backfill).
|
|
88
|
+
- Auth / authz boundary change (new role, changed permission check, new public auth endpoint).
|
|
89
|
+
- Public API break (response shape change, removed endpoint, changed status code semantics).
|
|
90
|
+
- External-service contract change (webhook payload, partner-facing schema).
|
|
91
|
+
- Filesystem destructive operation outside the workspace (`rm -rf` of project paths,
|
|
92
|
+
rewriting `.gitignore`-listed paths, deleting fixtures).
|
|
93
|
+
- Anything the slice's `Gate: blocking` plus `tasks.md` `Why HITL:` flags as irreversible.
|
|
94
|
+
|
|
95
|
+
The list is the same one Claude Code auto-mode's transcript classifier protects — adapted
|
|
96
|
+
to DevRites's workspace shape.
|
|
97
|
+
|
|
98
|
+
## The `notify:` hook contract
|
|
99
|
+
|
|
100
|
+
The hook is a single shell command run on the `awaiting_human` transition. Environment
|
|
101
|
+
the hook receives:
|
|
102
|
+
|
|
103
|
+
| Var | Value |
|
|
104
|
+
|---|---|
|
|
105
|
+
| `DEVRITES_QID` | the new qid (e.g. `q-2026-05-28-001`) |
|
|
106
|
+
| `DEVRITES_GATE` | `advisory` / `validating` / `blocking` / `escalating` |
|
|
107
|
+
| `DEVRITES_SLICE` | `<N — name>` |
|
|
108
|
+
| `DEVRITES_SLUG` | active feature slug |
|
|
109
|
+
| `DEVRITES_QUESTION` | the checkpoint text |
|
|
110
|
+
| `DEVRITES_PROPOSED` | the proposed answer |
|
|
111
|
+
|
|
112
|
+
The hook is best-effort: non-zero exit does **not** roll back the pause. Failures are
|
|
113
|
+
logged to `evidence.md` so the user sees them on return.
|
|
114
|
+
|
|
115
|
+
Example targets:
|
|
116
|
+
- `curl -d "$DEVRITES_QID: $DEVRITES_QUESTION" ntfy.sh/my-topic`
|
|
117
|
+
- `osascript -e "display notification \"$DEVRITES_QUESTION\" with title \"DevRites: $DEVRITES_GATE\""`
|
|
118
|
+
- `pb push "$DEVRITES_SLUG: $DEVRITES_QUESTION"` (via pushbullet CLI)
|
|
119
|
+
|
|
120
|
+
DevRites owns no notification logic — the hook is a seam, not a feature.
|
|
121
|
+
|
|
122
|
+
## When to leave AFK
|
|
123
|
+
|
|
124
|
+
Drop the sentinel before:
|
|
125
|
+
|
|
126
|
+
- A novel feature where you have not yet seen `$rite-build` work on this codebase HITL —
|
|
127
|
+
Ralph's progression: HITL first → refine prompt → AFK once trusted.
|
|
128
|
+
- A risky slice you marked `Mode: HITL` and want to walk through interactively even if
|
|
129
|
+
the gate is technically `validating`.
|
|
130
|
+
- Any time you'd rather review per-slice than batch-resolve afterwards.
|
|
131
|
+
|
|
132
|
+
AFK is a **bias toward continuing**, not a vow. Re-enter it whenever the next stretch of
|
|
133
|
+
work is bulk + low-stakes.
|
|
134
|
+
|
|
135
|
+
## What AFK does NOT do
|
|
136
|
+
|
|
137
|
+
- It does not bypass `$rite-prove`, `$rite-review`, or `$rite-seal`. Those gates are
|
|
138
|
+
feature-scoped and always run when their phase runs.
|
|
139
|
+
- It does not skip `$rite-plan repair` on Spec Drift Guard fires.
|
|
140
|
+
- It does not skip `devrites-source-driven` checks. Uncertain framework behavior still
|
|
141
|
+
triggers the doc lookup.
|
|
142
|
+
- It does not skip `evidence.md` writes. AFK runs that don't record evidence are
|
|
143
|
+
unproven and get rejected at `$rite-prove` regardless.
|
|
144
|
+
|
|
145
|
+
The sentinel widens *human pauses*, nothing else.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# rite-build — anti-patterns
|
|
2
|
+
|
|
3
|
+
Load this when standing a non-trivial implementation decision, or when the
|
|
4
|
+
agent feels reluctance toward stopping after one slice, applying TDD, or
|
|
5
|
+
calling `devrites-doubt`.
|
|
6
|
+
|
|
7
|
+
Pack-wide rationalizations + red flags (incl. tests-later, defensive checks,
|
|
8
|
+
generic AI naming, drive-by refactors): see
|
|
9
|
+
[standards/anti-patterns.md](../../devrites-lib/reference/standards/anti-patterns.md).
|
|
10
|
+
|
|
11
|
+
## Phase-specific rationalizations
|
|
12
|
+
|
|
13
|
+
| Excuse | Rebuttal |
|
|
14
|
+
|---|---|
|
|
15
|
+
| "Slices 1 and 2 are related; let me do both." | One slice, then stop. Full stop. The user asks for the next. |
|
|
16
|
+
| "It's faster to skip `devrites-doubt` for this small change." | Doubt is cheapest *before* the decision is standing. After is debugging. |
|
|
17
|
+
|
|
18
|
+
## Forge ([forge.md](forge.md))
|
|
19
|
+
|
|
20
|
+
| Excuse | Rebuttal |
|
|
21
|
+
|---|---|
|
|
22
|
+
| "This slice is hard — I'll forge it." | Hard ≠ forkable. Forge competes ≥2 *genuinely-different* approaches with no clear winner. One hard approach is single-path; building it K times wastes K× for one answer. |
|
|
23
|
+
| "I'm not sure which approach is right, so let me compete them and decide." | Forge is for a real fork the plan couldn't settle, not for dodging a decision you can make now. Decide from the code/docs first; forge only when the alternatives are genuinely undecidable on paper. |
|
|
24
|
+
| "Candidate A's data layer plus B's UI would be the best of both." | Don't hand-merge candidates — two authors in one tree is the incoherence the single-writer rule exists to prevent. Land one winner whole; graft a *specific* runner-up idea only by continuing the winning wright once. |
|
|
25
|
+
| "The judge already scored these, so I can skip the post-return doubt." | The judge picks *between* candidates; it doesn't replace doubting the winner's standing decisions. Steps 4–7 run on the winner unchanged. |
|
|
26
|
+
| "A fourth candidate might be even better." | K is capped at 3. A fourth rarely moves the winner and multiplies cost; if none of three is right, the plan is wrong — `$rite-plan repair`, don't add candidates. |
|
|
27
|
+
|
|
28
|
+
## Red Flags
|
|
29
|
+
|
|
30
|
+
- About to start slice N+1 without the user asking.
|
|
31
|
+
- Skipping `devrites-doubt` on a branching, boundary, data-model, auth, public-API, or migration decision.
|
|
32
|
+
- Adding a dependency or a second design system without recording rationale in `decisions.md`.
|
|
33
|
+
- Writing a `try/catch` block wider than what you actually handle.
|
|
34
|
+
- A comment that restates what the next line does.
|
|
35
|
+
- Touching files that aren't in `touched-files.md` for "tidiness".
|
|
36
|
+
- Forging a slice with no acceptance / `test-plan.md` coverage for the judge to score against.
|
|
37
|
+
- Landing more than one candidate's code, or keeping a losing worktree/branch around after F7.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Checkpoint protocol — what `$rite-build` does when a slice is HITL
|
|
2
|
+
|
|
3
|
+
When `$rite-build` reaches a slice with `Mode: HITL`, it does **not** start writing code. It
|
|
4
|
+
surfaces the checkpoint as a ranked **option set** and resolves it **before** any code lands:
|
|
5
|
+
|
|
6
|
+
- **Human present (interactive)** — ask inline via `AskUserQuestion` (the option set below).
|
|
7
|
+
The human picks; record the pick to `questions.md` (`answered`) + `decisions.md`, clear the
|
|
8
|
+
gate, and **continue building in place** — no STOP, no `$rite-resolve` round-trip.
|
|
9
|
+
- **Human absent / AFK-pausing / notify-only** — persist the checkpoint (`questions.md` open +
|
|
10
|
+
`state.md` `Awaiting human`), fire the `notify:` hook, and **stop**. Resume later via
|
|
11
|
+
`$rite-resolve` (or `--batch`).
|
|
12
|
+
|
|
13
|
+
Either way the pause is **pre-action**, not post-action: code never lands before the gate.
|
|
14
|
+
|
|
15
|
+
## Render contract
|
|
16
|
+
|
|
17
|
+
The checkpoint must be rendered in user-facing output **and** persisted to the workspace.
|
|
18
|
+
Both are required — the output is for the human in the room (or the notification target),
|
|
19
|
+
the persisted form is for the next session or the AFK observer.
|
|
20
|
+
|
|
21
|
+
### User-facing render — the option set
|
|
22
|
+
|
|
23
|
+
Present the checkpoint as an `AskUserQuestion` with a ranked **option set**
|
|
24
|
+
(`afk-hitl.md` → "Option set"): 2–4 options, **recommended first** + labelled `(Recommended)`,
|
|
25
|
+
each option's description carrying the dimension-tagged rationale + the trade-off it accepts,
|
|
26
|
+
plus the escape hatch. The header names the slice + gate:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Slice <N — name> — HITL (<gate>, SLA <SLA>). <Checkpoint text from tasks.md>
|
|
30
|
+
|
|
31
|
+
▸ 1. <recommended> (Recommended)
|
|
32
|
+
logic: … · infra: … · business: … · architecture: … (+ security/UX/risk if in scope)
|
|
33
|
+
2. <alternative> — <rationale + the trade-off it accepts>
|
|
34
|
+
3. <alternative> — <rationale>
|
|
35
|
+
4. Something else — I'll describe it
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The recommended option (#1) is **required** — a checkpoint without a recommendation is a worse
|
|
39
|
+
interrupt than one with shape; the human reacts to a ranked draft faster than to a blank prompt
|
|
40
|
+
(the "give the human something to approve" rule). The recommendation reflects *this* project
|
|
41
|
+
(its conventions, stack, scale), not a generic default. On an interactive pick, resolve in
|
|
42
|
+
place; when persisting a pause instead, the same set is written to `questions.md` `options:`
|
|
43
|
+
and the resume line is `$rite-resolve <qid> "<answer>"` (or `--drop <qid> "<reason>"`).
|
|
44
|
+
|
|
45
|
+
### Workspace mutations
|
|
46
|
+
|
|
47
|
+
In one atomic write (one `state.md` rewrite + one `questions.md` append):
|
|
48
|
+
|
|
49
|
+
1. **`questions.md` append:**
|
|
50
|
+
|
|
51
|
+
```markdown
|
|
52
|
+
## q-<YYYY-MM-DD>-<NNN>
|
|
53
|
+
status: open
|
|
54
|
+
slice: <N — name>
|
|
55
|
+
gate: <gate from tasks.md>
|
|
56
|
+
question: <Checkpoint text from tasks.md>
|
|
57
|
+
options: | # the ranked set, recommended first (matches the render)
|
|
58
|
+
1. <recommended> (Recommended) — logic: … · infra: … · business: … · architecture: …
|
|
59
|
+
2. <alternative> — <rationale>
|
|
60
|
+
proposed: <the recommended option restated; matches option 1>
|
|
61
|
+
raised_at: <iso>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
2. **`state.md` updates:**
|
|
65
|
+
|
|
66
|
+
```markdown
|
|
67
|
+
- Status: awaiting_human
|
|
68
|
+
- Active slice: <N — name>
|
|
69
|
+
- Slice mode: HITL
|
|
70
|
+
- Next step: $rite-resolve <qid> "<answer>"
|
|
71
|
+
|
|
72
|
+
## Awaiting human
|
|
73
|
+
- qid: <q-...-NNN>
|
|
74
|
+
- gate: <gate>
|
|
75
|
+
- question: <Checkpoint text>
|
|
76
|
+
- proposed: <one-paragraph best-guess>
|
|
77
|
+
- raised_at: <iso>
|
|
78
|
+
- blocking_slices: [<list, from `Blocked by` lookups>]
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
3. **`notify:` hook (if `.devrites/AFK` defines one):** export all six env vars from the
|
|
82
|
+
canonical contract in [`afk-discipline.md`](afk-discipline.md) (the `notify:` hook
|
|
83
|
+
contract table is the source of truth):
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
DEVRITES_QID="$qid" \
|
|
87
|
+
DEVRITES_GATE="$gate" \
|
|
88
|
+
DEVRITES_SLICE="$slice_id" \
|
|
89
|
+
DEVRITES_SLUG="$slug" \
|
|
90
|
+
DEVRITES_QUESTION="$question" \
|
|
91
|
+
DEVRITES_PROPOSED="$proposed" \
|
|
92
|
+
sh -c "$notify_cmd"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The hook fires after the workspace write so the notification target sees a workspace
|
|
96
|
+
that already records the pause. Failures in the hook **do not** roll back the pause —
|
|
97
|
+
the gate is authoritative; the notification is best-effort.
|
|
98
|
+
|
|
99
|
+
## qid generation
|
|
100
|
+
|
|
101
|
+
Format: `q-YYYY-MM-DD-NNN`, where `NNN` is the next sequential integer for that date in
|
|
102
|
+
`questions.md`. For the write side, call
|
|
103
|
+
`devrites-engine resolve next-qid <questions.md path>` — it
|
|
104
|
+
counts existing `## q-YYYY-MM-DD-` headers for today, prints the next zero-padded id, and
|
|
105
|
+
refuses to print an id whose header already exists. Use that id verbatim so each qid is
|
|
106
|
+
unique within the date.
|
|
107
|
+
|
|
108
|
+
## When AFK is active
|
|
109
|
+
|
|
110
|
+
If `.devrites/AFK` exists and the slice's `Gate` is in `allow_gates`, `$rite-build` does
|
|
111
|
+
**not** invoke the checkpoint protocol. Instead:
|
|
112
|
+
|
|
113
|
+
- For `advisory`: log a `gate: advisory` entry to `questions.md`, record the trade-off in
|
|
114
|
+
`decisions.md`, and **dispatch the wright** to build the slice (workflow step 3).
|
|
115
|
+
- For `validating` (only when `allow_gates` includes it): **dispatch the wright** (step 3); on
|
|
116
|
+
return, write a `gate: validating` entry to `questions.md`, mark the slice
|
|
117
|
+
`built (pending review)` in `state.md`, and continue. A slice's only states are `pending` and `built` —
|
|
118
|
+
acceptance is proven at the **feature** level by `$rite-prove` (recorded in
|
|
119
|
+
`evidence.md`), not per slice. The `built (pending review)` slice is not done until the
|
|
120
|
+
open `validating` gate resolves via `$rite-resolve`; an open `validating` gate is a
|
|
121
|
+
NO-GO at seal.
|
|
122
|
+
|
|
123
|
+
For gates in `allow_gates`, AFK **auto-picks the recommended option** (option 1 of the set)
|
|
124
|
+
instead of pausing, recording it as above. For `blocking` and `escalating` (and every
|
|
125
|
+
irreversible-risk item), AFK **always** invokes the checkpoint protocol — the sentinel does
|
|
126
|
+
not unlock these gates — **unless `allow_irreversible: true`** is set, which makes AFK
|
|
127
|
+
auto-pick the recommendation on *every* gate, irreversible included (maximal autonomy, opt-in;
|
|
128
|
+
see `afk-hitl.md`). See `afk-discipline.md` for the irreversible-risk list.
|
|
129
|
+
|
|
130
|
+
## Multi-question pauses
|
|
131
|
+
|
|
132
|
+
The current protocol is **one question per pause**. If a slice has multiple HITL
|
|
133
|
+
checkpoints, split it into sub-slices via `$rite-plan reslice` so each pause is
|
|
134
|
+
single-question. Multi-question pauses are reserved future shape; `Awaiting human` is
|
|
135
|
+
written as a single block.
|
|
136
|
+
|
|
137
|
+
## What NOT to do
|
|
138
|
+
|
|
139
|
+
- **Don't write code first and pause after.** The pre-action rule is the whole point.
|
|
140
|
+
- **Don't render the checkpoint without persisting.** Output without `state.md` + `questions.md`
|
|
141
|
+
updates means the workspace lies on `/clear`.
|
|
142
|
+
- **Don't self-answer a question that *paused* for a human.** When a gate stopped the session
|
|
143
|
+
(an AFK queue, or a HITL pause the human walked away from), `$rite-resolve` requires an
|
|
144
|
+
explicit answer — the agent doesn't confirm its own `proposed:` on resume. This is distinct
|
|
145
|
+
from the two legitimate auto-resolutions: an interactive `AskUserQuestion` pick the human
|
|
146
|
+
just made, and an AFK auto-pick of the recommended option on a gate `allow_gates` permits.
|
|
147
|
+
- **Don't bundle the `notify:` hook output into chat.** Fire-and-forget; the chat already
|
|
148
|
+
has the user-facing render.
|
|
149
|
+
- **Don't fire `notify:` on `advisory`-downgraded entries.** It's reserved for true pauses.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Checkpoint — crash-survivable WIP commits (opt-in)
|
|
2
|
+
|
|
3
|
+
`.devrites/` markdown survives compaction, but a slice's *source* stays uncommitted until
|
|
4
|
+
`$rite-ship`. A crash or killed session mid-build — the AFK / `$rite-autocomplete` case —
|
|
5
|
+
loses that source **and** the reasoning behind it. Checkpoint mode commits each proven
|
|
6
|
+
slice as a local `WIP`, so the work and its context outlive the session.
|
|
7
|
+
|
|
8
|
+
## When it's on
|
|
9
|
+
Opt-in via the `.devrites/CHECKPOINT` sentinel — the mirror of `.devrites/AFK`. Absent →
|
|
10
|
+
no checkpoints; `$rite-build` behaves exactly as before. A long unattended run
|
|
11
|
+
(`$rite-autocomplete`) is the case it earns its keep, so that path sets the sentinel for
|
|
12
|
+
the run. **Local-only by rule:** a checkpoint is never pushed — scratch work must not
|
|
13
|
+
trigger CI.
|
|
14
|
+
|
|
15
|
+
## The checkpoint commit — orchestrator, at RECORD, after gates are green
|
|
16
|
+
A checkpoint records a **proven** slice; it fires only after PROVE is green, never on a red
|
|
17
|
+
gate. Stage only the slice's `touched-files.md`, then commit locally with a
|
|
18
|
+
`[devrites-context]` body a cold reader can restore from:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
[ -f .devrites/CHECKPOINT ] || exit 0 # sentinel absent → no-op, silent
|
|
22
|
+
git commit -m "WIP(<slug>): <slice>" -m "$(cat <<'BODY'
|
|
23
|
+
[devrites-context]
|
|
24
|
+
decisions: <one-line delta this slice added to decisions.md>
|
|
25
|
+
remaining: <pending slices — count or names>
|
|
26
|
+
dead-ends: <approaches ruled out this slice, if any>
|
|
27
|
+
BODY
|
|
28
|
+
)"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Restore
|
|
32
|
+
The commit body is a durable record, not just a marker. After a crash, a fresh session —
|
|
33
|
+
or `$rite-status` — reads the last `WIP(<slug>)` body to reconstruct the decisions,
|
|
34
|
+
remaining slices, and dead-ends that in-session `.devrites/` state would have held. No
|
|
35
|
+
special tooling: it's a git log entry any agent can read.
|
|
36
|
+
|
|
37
|
+
## Collapse at ship
|
|
38
|
+
WIP commits are scratch and never reach shared history. `$rite-ship` folds them into the
|
|
39
|
+
one atomic feature commit before the Conventional-Commit ladder — see the collapse step in
|
|
40
|
+
[git-ship.md](../../rite-ship/reference/git-ship.md). Result: one clean commit, bisect
|
|
41
|
+
stays green.
|
|
42
|
+
|
|
43
|
+
## Autocomplete clean-baseline use
|
|
44
|
+
`$rite-autocomplete` may arm checkpoint mode after it verifies a clean or explicitly accepted baseline. Checkpoints are local-only crash recovery, not authorization to continue across red gates or to ship. `$rite-build` remains one-slice-at-a-time; autocomplete is the only opt-in loop that may invoke multiple builds.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Evidence standard
|
|
2
|
+
|
|
3
|
+
Evidence beats confidence. A slice isn't built until there's a record that proves it.
|
|
4
|
+
|
|
5
|
+
## What counts as evidence
|
|
6
|
+
- A **command + its output**: `npm test src/export.test.ts` → `3 passing`.
|
|
7
|
+
- A **build/typecheck/lint** result for touched code.
|
|
8
|
+
- **Runtime observation**: a request/response, a log line, a CLI output.
|
|
9
|
+
- **Browser evidence** for UI (see `devrites-browser-proof`): route, viewport,
|
|
10
|
+
screenshot path (opened and described), console state, interaction path.
|
|
11
|
+
|
|
12
|
+
## What does NOT count
|
|
13
|
+
- "It should work" / "this looks right" / "I'm confident".
|
|
14
|
+
- A green test you never saw fail (for new behavior).
|
|
15
|
+
- "No type errors" as proof that a *feature* works (it proves types, not behavior).
|
|
16
|
+
- A screenshot path you didn't open.
|
|
17
|
+
|
|
18
|
+
## Record format (`evidence.md`)
|
|
19
|
+
```markdown
|
|
20
|
+
# Evidence
|
|
21
|
+
|
|
22
|
+
## Evidence log
|
|
23
|
+
| Evidence ID | Command / action | Result | Timestamp | Related IDs | Limitation |
|
|
24
|
+
| --- | --- | --- | --- | --- | --- |
|
|
25
|
+
| EVID-001 | <command/action> | <pass/fail + key output line> | <iso if available> | AC-001, SLICE-001 | <what remains unproven, or none> |
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Honesty rules
|
|
29
|
+
- If a test fails, record the failure and the output — don't hide it.
|
|
30
|
+
- If a step was skipped (no browser available, command not found), say so and record
|
|
31
|
+
the manual verification steps instead.
|
|
32
|
+
- Unproven acceptance criteria stay unchecked. The seal will catch them.
|
|
33
|
+
- Every evidence row uses `EVID-###` and names the related `AC-###` and `SLICE-###`.
|
|
34
|
+
- UI/browser proof goes in `browser-evidence.md`; `evidence.md` links to its `EVID-###`
|
|
35
|
+
instead of copying screenshot notes.
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Forge — competing candidate builds for one slice
|
|
2
|
+
|
|
3
|
+
How `$rite-build` builds a slice that `$rite-vet` flagged `Forge: yes`: instead of one wright,
|
|
4
|
+
**K = 2–3 candidate wrights** each build the slice a genuinely different way in **isolation**, a
|
|
5
|
+
read-only judge scores them, and exactly **one** winner's diff lands in the working tree. Loaded
|
|
6
|
+
on demand by `$rite-build` step 3; the sibling of single-path
|
|
7
|
+
[`wright-dispatch.md`](wright-dispatch.md).
|
|
8
|
+
|
|
9
|
+
Forge is the **rare** path. Most slices are single-path (cheaper, and the default). A slice
|
|
10
|
+
forges only when the work is a genuine architecture fork — two or three approaches that actually
|
|
11
|
+
differ, no clear winner on paper, at high enough stakes that building the wrong one costs more
|
|
12
|
+
than building all of them. That judgment is made at `$rite-vet` and recorded as the slice's
|
|
13
|
+
`Forge:` field; build acts on the flag, it does not invent it.
|
|
14
|
+
|
|
15
|
+
## Why this doesn't break the single-writer invariant
|
|
16
|
+
|
|
17
|
+
DevRites forbids a parallel fan-out of writers **sharing one tree** — concurrent writers on one
|
|
18
|
+
working tree make conflicting implicit decisions and produce incoherent code
|
|
19
|
+
([`wright-dispatch.md`](wright-dispatch.md)). Forge keeps that invariant intact by **isolation**:
|
|
20
|
+
every candidate writes in its own worktree (or its own throwaway branch), never touching another
|
|
21
|
+
candidate's tree, and the orchestrator lands exactly one. No tree ever has two authors; exactly
|
|
22
|
+
one author's work ships. "N isolated complete attempts, winner-takes-all" is not "N writers on
|
|
23
|
+
one slice."
|
|
24
|
+
|
|
25
|
+
## Trust the flag, but clear a stale one
|
|
26
|
+
|
|
27
|
+
Before competing anything, confirm the flag still earns its cost — `$rite-vet` set it, but the
|
|
28
|
+
plan may have moved:
|
|
29
|
+
|
|
30
|
+
- **No objective scorecard** — the slice has no acceptance criteria and no `test-plan.md`
|
|
31
|
+
coverage the judge can score against → clear `Forge` to `no`, build single-path. A competition
|
|
32
|
+
with no rubric is a coin toss with K× the cost.
|
|
33
|
+
- **Can't name two genuinely different strategies** — if the candidates would be variations of
|
|
34
|
+
one approach, there is nothing to compete → single-path.
|
|
35
|
+
- **Slice shrank below the bar** (now Complexity ≤3, or a dependency landed that picks the
|
|
36
|
+
approach) → single-path.
|
|
37
|
+
|
|
38
|
+
A cleared flag is recorded in `decisions.md` (one line: why forge was dropped). Never forge a
|
|
39
|
+
slice you can't score, and never forge to avoid making a decision the plan already made.
|
|
40
|
+
|
|
41
|
+
## Mechanics
|
|
42
|
+
|
|
43
|
+
The orchestrator runs F1–F7. Steps 4–7 of the [one-slice-cycle](one-slice-cycle.md) (doubt,
|
|
44
|
+
fail-on-red, reconcile, record, stop) then run **unchanged** on the winner.
|
|
45
|
+
|
|
46
|
+
### F1 — Confirm the K strategies
|
|
47
|
+
Take the 2–3 candidate strategies `$rite-vet` named (in the slice brief). Each must be a
|
|
48
|
+
**distinct, complete approach** to the same slice contract — a different seam, data shape,
|
|
49
|
+
reuse-vs-build call, or algorithm — not a tweak of one. Name them `A`, `B`, (`C`) with a
|
|
50
|
+
one-line description each. K is capped at 3: a fourth candidate rarely changes the winner and
|
|
51
|
+
multiplies cost.
|
|
52
|
+
|
|
53
|
+
### F2 — Snapshot, then isolate each candidate
|
|
54
|
+
Snapshot the working tree first (the winner's landing is reconciled against it later), then give
|
|
55
|
+
each candidate its own isolated tree. **Prefer parallel isolated worktrees** when the harness can
|
|
56
|
+
dispatch a sub-agent with worktree isolation; the **always-available** path is one throwaway git
|
|
57
|
+
branch per candidate, built sequentially (slower, universally works — the
|
|
58
|
+
[`tooling.md`](../../devrites-lib/reference/standards/tooling.md) "fallback is first-class" discipline):
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
SLUG="$(cat .devrites/ACTIVE 2>/dev/null)"
|
|
62
|
+
git rev-parse --is-inside-work-tree >/dev/null 2>&1 || echo "(not a git repo — forge needs git for isolation; degrade to single-path)"
|
|
63
|
+
BASE="$(git rev-parse --abbrev-ref HEAD)"
|
|
64
|
+
# one isolated worktree per candidate (parallel-capable); falls back to branches if worktrees are unavailable
|
|
65
|
+
for C in A B; do
|
|
66
|
+
git worktree add ".devrites/work/$SLUG/forge/cand-$C" -b "forge/$SLUG/cand-$C" 2>/dev/null \
|
|
67
|
+
|| git branch "forge/$SLUG/cand-$C" "$BASE"
|
|
68
|
+
done
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### F3 — Dispatch K candidate wrights
|
|
72
|
+
Send **each** candidate the identical single-path slice contract from
|
|
73
|
+
[`wright-dispatch.md`](wright-dispatch.md), with **one** line added naming its assigned strategy
|
|
74
|
+
and its isolated tree:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Forge candidate <A|B|C> of <K>. Build this slice using ONLY this approach:
|
|
78
|
+
Strategy: <the distinct approach, one or two sentences — the seam / data shape / reuse call>
|
|
79
|
+
Work in your isolated tree: <worktree path | branch name>. Do not consult or merge another
|
|
80
|
+
candidate's work. Same discipline as always — orient → RED → implement smallest complete →
|
|
81
|
+
verify → return your structured artifact. Code + tests only.
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Each is still **one wright, one tree** — the invariant holds per candidate. Parallel where the
|
|
85
|
+
harness isolates them; otherwise build candidate A to green, capture its diff, reset to `BASE`,
|
|
86
|
+
then candidate B. A candidate that hits an irreversible-risk item escalates exactly as a
|
|
87
|
+
single-path wright does — **forge never bypasses a gate** (see AFK below).
|
|
88
|
+
|
|
89
|
+
### F4 — Judge (read-only, fresh context)
|
|
90
|
+
Dispatch [`devrites-forge-judge`](.codex/agents/devrites-forge-judge.toml) with the K finished
|
|
91
|
+
candidate diffs and the scorecard inputs (slice acceptance, `test-plan.md`, `.devrites/principles.md`,
|
|
92
|
+
the anti-slop charter). It scores each candidate, ranks them, names the **winner** and the
|
|
93
|
+
specific runner-up ideas worth grafting, and returns the structured verdict. The judge **never
|
|
94
|
+
writes code** — it reads the diffs and returns findings, like every reviewer agent. If sub-agent
|
|
95
|
+
dispatch is unavailable, do the judge's rubric pass yourself in a fresh read, discarding your
|
|
96
|
+
authoring reasoning (a flagged fallback, not an independent judgment).
|
|
97
|
+
|
|
98
|
+
### F5 — Land the winner, graft sparingly
|
|
99
|
+
Apply **only** the winner's diff to the working tree (merge its worktree / cherry-pick its
|
|
100
|
+
branch). If the judge named a cheap, specific improvement in a runner-up, graft it by
|
|
101
|
+
**continuing the winning wright once** with that instruction — never hand-merge two candidates'
|
|
102
|
+
code (that re-creates the incoherent-tree failure the invariant exists to prevent). The landed
|
|
103
|
+
tree has exactly one author: the winner (plus its own grafted follow-up).
|
|
104
|
+
|
|
105
|
+
### F6 — Write `forge-report.md`
|
|
106
|
+
The durable record of the competition (template below). One per forged slice; archived with the
|
|
107
|
+
feature.
|
|
108
|
+
|
|
109
|
+
### F7 — Clean up, then return to the cycle
|
|
110
|
+
Remove only clean losing worktrees / delete their candidate branches. If a losing worktree is dirty,
|
|
111
|
+
preserve it and record the path in `forge-report.md`; never `--force` away unlanded work.
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
SLUG="$(cat .devrites/ACTIVE 2>/dev/null)"
|
|
115
|
+
for C in A B; do
|
|
116
|
+
WT=".devrites/work/$SLUG/forge/cand-$C"
|
|
117
|
+
if [ -d "$WT/.git" ] || git -C "$WT" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
|
118
|
+
if git -C "$WT" diff --quiet && git -C "$WT" diff --cached --quiet; then
|
|
119
|
+
git worktree remove "$WT" 2>/dev/null || true
|
|
120
|
+
git branch -D "forge/$SLUG/cand-$C" 2>/dev/null || true
|
|
121
|
+
else
|
|
122
|
+
echo "preserved dirty forge worktree: $WT"
|
|
123
|
+
fi
|
|
124
|
+
else
|
|
125
|
+
git branch -D "forge/$SLUG/cand-$C" 2>/dev/null || true
|
|
126
|
+
fi
|
|
127
|
+
done
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Then hand the **winner's** structured artifact to [one-slice-cycle](one-slice-cycle.md) step 4 as
|
|
131
|
+
if a single wright produced it. Doubt, fail-on-red, reconcile (against the F2 snapshot, claimed =
|
|
132
|
+
the winner's files), record, and stop all run unchanged.
|
|
133
|
+
|
|
134
|
+
## `forge-report.md` template
|
|
135
|
+
|
|
136
|
+
```markdown
|
|
137
|
+
# Forge report: <slice id — name>
|
|
138
|
+
Forged on <iso>. Reason: <the architecture fork $rite-vet flagged>.
|
|
139
|
+
|
|
140
|
+
## Candidates
|
|
141
|
+
| # | Strategy | Gates | Score | Notes |
|
|
142
|
+
|---|---|---|---|---|
|
|
143
|
+
| A | <approach> | green/red | <judge score> | <one line> |
|
|
144
|
+
| B | <approach> | green/red | <judge score> | <one line> |
|
|
145
|
+
|
|
146
|
+
## Verdict
|
|
147
|
+
Winner: <A|B|C> — <why it won, in the judge's terms: acceptance coverage, simplicity, principle
|
|
148
|
+
fit, anti-slop, reuse>.
|
|
149
|
+
Grafted from runner-up: <specific idea + which candidate | none>.
|
|
150
|
+
Discarded: <the losing approaches + the one-line reason each lost — load-bearing for a later
|
|
151
|
+
slice that might be tempted to retry one>.
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
The **Discarded** section matters: it is a dead-end record at the slice level, the same role
|
|
155
|
+
`decisions.md` "Dead ends" plays for the feature — a later slice shouldn't re-litigate an
|
|
156
|
+
approach forge already rejected.
|
|
157
|
+
|
|
158
|
+
## AFK & budget
|
|
159
|
+
|
|
160
|
+
- **Cost.** Forge multiplies the build by K. Under `.devrites/AFK`, each candidate counts against
|
|
161
|
+
the slice budget (`devrites-engine tick-afk` once per candidate dispatched), so a forge slice can exhaust the
|
|
162
|
+
cap faster — that is intended back-pressure, not a bug.
|
|
163
|
+
- **Gates are unchanged.** Forge changes *how many candidates build*, never *what pauses*. An
|
|
164
|
+
irreversible-risk item, a blocking/escalating gate, or a red-on-completion in **any** candidate
|
|
165
|
+
pauses per [`afk-hitl.md`](../../devrites-lib/reference/standards/afk-hitl.md) exactly as single-path. AFK widens what is
|
|
166
|
+
automatic, never what is irreversible — forge included.
|
|
167
|
+
- **Stuck loop still applies.** Re-dispatching the same candidate without progress trips
|
|
168
|
+
`devrites-engine stuck` the same as a single wright.
|
|
169
|
+
|
|
170
|
+
## When isolation is impossible
|
|
171
|
+
|
|
172
|
+
No git, or neither worktrees nor throwaway branches are usable → **degrade to single-path** and
|
|
173
|
+
say so. Forge is an accelerator for choosing between real alternatives; it is never a requirement
|
|
174
|
+
for building the slice. A slice always has a single-path build available — the competition is the
|
|
175
|
+
optional part.
|
|
176
|
+
|
|
177
|
+
## Anti-patterns
|
|
178
|
+
|
|
179
|
+
See [`anti-patterns.md`](anti-patterns.md) § Forge — the short version: don't forge a decided or
|
|
180
|
+
trivial slice, don't forge to dodge a decision, don't hand-merge candidates, don't exceed K=3,
|
|
181
|
+
and don't let a forged slice skip the post-return doubt because "the judge already looked."
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Frontend trigger
|
|
2
|
+
|
|
3
|
+
A slice is **frontend/UI** if it touches or plans to touch any of:
|
|
4
|
+
|
|
5
|
+
- React / TSX / JSX; Vue, Svelte, Astro, Angular;
|
|
6
|
+
- Rails Slim / Haml / ERB views; any server-rendered template;
|
|
7
|
+
- CSS, SCSS, Tailwind, design tokens, theme files;
|
|
8
|
+
- components, forms, layout, navigation, dashboard, landing/marketing page;
|
|
9
|
+
- UI copy, empty states, error states, onboarding, settings;
|
|
10
|
+
- screenshots, mockups, visual direction;
|
|
11
|
+
- browser behavior, responsive behavior, accessibility, frontend performance.
|
|
12
|
+
|
|
13
|
+
## When triggered
|
|
14
|
+
- `$rite-spec` applies **`devrites-ux-shape`** (spec step 3a) to write the feature-level
|
|
15
|
+
**`design-brief.md`** before any code — design direction, key states, interaction model,
|
|
16
|
+
optional Figma/image visual-direction probe.
|
|
17
|
+
- `$rite-build` applies **`devrites-frontend-craft`**, building **to** that `design-brief.md`
|
|
18
|
+
(register detection, refine the brief per slice, existing design system, all states,
|
|
19
|
+
anti-AI-slop) before/while implementing.
|
|
20
|
+
- `$rite-prove` applies **`devrites-browser-proof`** (proof ladder + evidence schema).
|
|
21
|
+
- `$rite-polish` runs the full **normalize + polish** workflow.
|
|
22
|
+
- `$rite-review` and `$rite-seal` include frontend UX / a11y / responsive / design-
|
|
23
|
+
system checks.
|
|
24
|
+
|
|
25
|
+
## Fullstack (UI slice that also needs backend)
|
|
26
|
+
If the slice spans both layers, it's both a frontend **and** a backend slice. Define the
|
|
27
|
+
**API/data contract first** (`devrites-api-interface`), build it as one **vertical slice**
|
|
28
|
+
(DB → service → API → UI), apply the engineering rules to the backend and
|
|
29
|
+
`devrites-frontend-craft` to the UI, map each contract error to a real UI state, and
|
|
30
|
+
**prove both layers** (contract tests + browser proof). See
|
|
31
|
+
`devrites-frontend-craft/reference/fullstack.md`.
|
|
32
|
+
|
|
33
|
+
## When NOT triggered
|
|
34
|
+
Pure backend/data/CLI/infra slices skip craft and browser proof — but still get tests
|
|
35
|
+
and evidence. If unsure whether a slice is "UI enough", treat copy/empty/error states
|
|
36
|
+
and any rendered output as UI.
|
|
37
|
+
|
|
38
|
+
Mark `Frontend craft required: yes/no` and `Browser proof required: yes/no` on the
|
|
39
|
+
slice in `tasks.md` so the trigger is explicit, not rediscovered each cycle.
|