devrites 3.2.5 → 3.2.6

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.
Files changed (34) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -1
  3. package/docs/cli.md +0 -1
  4. package/docs/command-map.md +1 -1
  5. package/docs/orchestration.md +1 -2
  6. package/engine/commands.go +1 -1
  7. package/engine/internal/lib/reconcile.go +1 -1
  8. package/engine/internal/lib/reconcile_test.go +4 -12
  9. package/engine/internal/lib/util.go +2 -2
  10. package/engine/main.go +0 -3
  11. package/engine/root_routing_test.go +0 -1
  12. package/pack/.claude/skills/rite-build/reference/forge.md +2 -2
  13. package/pack/.claude/skills/rite-build/reference/phase-contract.md +11 -20
  14. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +2 -5
  15. package/pack/.claude/skills/rite-prove/reference/acceptance-proof.md +0 -1
  16. package/pack/.claude/skills/rite-seal/reference/final-evidence.md +0 -1
  17. package/pack/generated/claude/skills/rite-build/reference/forge.md +2 -2
  18. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +11 -20
  19. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +2 -5
  20. package/pack/generated/claude/skills/rite-prove/reference/acceptance-proof.md +0 -1
  21. package/pack/generated/claude/skills/rite-seal/reference/final-evidence.md +0 -1
  22. package/pack/generated/codex/skills/rite-build/reference/forge.md +2 -2
  23. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +11 -20
  24. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +2 -5
  25. package/pack/generated/codex/skills/rite-prove/reference/acceptance-proof.md +0 -1
  26. package/pack/generated/codex/skills/rite-seal/reference/final-evidence.md +0 -1
  27. package/package.json +1 -1
  28. package/scripts/build-release-tarball.sh +1 -0
  29. package/scripts/validate.sh +0 -1
  30. package/engine/internal/lib/packageexistence.go +0 -968
  31. package/engine/internal/lib/packageexistence_test.go +0 -506
  32. package/engine/testdata/golden/TestParityPackageExistence/declared.golden +0 -2
  33. package/engine/testdata/golden/TestParityPackageExistence/default-import-subpath.golden +0 -2
  34. package/engine/tests/parity_packageexistence_test.go +0 -64
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to DevRites are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and DevRites adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Releases are generated automatically by [semantic-release](https://semantic-release.gitbook.io/) from Conventional Commits on `main`.
4
4
 
5
+ ## [3.2.6](https://github.com/ViktorsBaikers/DevRites/compare/v3.2.5...v3.2.6) (2026-07-25)
6
+
7
+ ### Changed
8
+
9
+ * **devrites:** remove package-existence gate ([4cbcbe9](https://github.com/ViktorsBaikers/DevRites/commit/4cbcbe9002eaf97f8f921e13e97b4dcfc6b61b34))
10
+
5
11
  ## [3.2.5](https://github.com/ViktorsBaikers/DevRites/compare/v3.2.4...v3.2.5) (2026-07-25)
6
12
 
7
13
  ### Fixed
package/README.md CHANGED
@@ -25,7 +25,7 @@ final commit, push, and tag, and it requires a typed `GO` confirmation.
25
25
  Unattended runs may create local WIP checkpoint commits along the way, but only
26
26
  Ship collapses and pushes them.
27
27
 
28
- **Status:** [`v3.2.5`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v3.2.5): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
28
+ **Status:** [`v3.2.6`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v3.2.6): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
29
29
 
30
30
  ## Quick start
31
31
 
package/docs/cli.md CHANGED
@@ -21,7 +21,6 @@ devrites-engine recovery route <class> # typed owner/action; JSON re
21
21
  devrites-engine recovery check|record|clear ... # durable three-failure budget; record/clear accept --class
22
22
  devrites-engine reconcile snapshot|check|close [slug] # retained writer baseline
23
23
  devrites-engine test-integrity [slug] # reject weakened tests against that baseline
24
- devrites-engine package-existence [slug] # verify new imports are declared
25
24
  devrites-engine evidence-fresh [slug] # proof freshness gate (exit 0 fresh · 3 stale)
26
25
  devrites-engine check-acceptance <dir> # acceptance gate (exit 0 proven · 1 gap)
27
26
  devrites-engine ledger sync <dir> # fold a feature's spec deltas into the living capability ledger
@@ -41,7 +41,7 @@ these lanes so its owner is clear:
41
41
 
42
42
  | Lane | Commands | Owner |
43
43
  |---|---|---|
44
- | Workflow gates | `preamble`, `build-readiness`, `readiness-digest`, `spec-skeleton`, `spec-validate`, `check-acceptance`, `evidence-fresh`, `coverage`, `doubt-coverage`, `budget`, `test-integrity`, `mutation-gate`, `package-existence`, `review-integrity`, `footprint`, `reconcile`, `conventions`, `learnings`, `review-fingerprints`, `timeline`, `health`, `progress` | Called by the relevant `rite-*` workflow or shared reply contract. |
44
+ | Workflow gates | `preamble`, `build-readiness`, `readiness-digest`, `spec-skeleton`, `spec-validate`, `check-acceptance`, `evidence-fresh`, `coverage`, `doubt-coverage`, `budget`, `test-integrity`, `mutation-gate`, `review-integrity`, `footprint`, `reconcile`, `conventions`, `learnings`, `review-fingerprints`, `timeline`, `health`, `progress` | Called by the relevant `rite-*` workflow or shared reply contract. |
45
45
  | Workspace utilities | `status`, `snapshot`, `analyze`, `archive-search`, `clarify-return`, `recovery`, `resolve`, `close-out`, `stuck`, `tick-afk`, `ledger`, `profile` | Called by a specific utility/phase when its condition is met. |
46
46
  | Low-level completeness API | `readiness`, `seal` | Available for scripts/CI and documented engine use. Feature rites use stricter phase-specific gates (`build-readiness`, `/rite-seal` phase contract) instead of auto-running these weaker aggregate checks. |
47
47
  | Install / operator / CI | `install`, `update`, `uninstall`, `doctor`, `migrate`, `validate-pack`, `harness-matrix`, `extensions`, `overrides`, `reviewers`, `hook`, `version` | Called by `npx devrites ...`, `/rite-doctor`, hooks, CI, or a human operator; do not auto-run during feature work just because the command exists. |
@@ -65,8 +65,7 @@ Each dispatch follows the retained-baseline sequence:
65
65
  2. The sole wright returns code/tests; the root validates its typed identity and
66
66
  exact changed-file set.
67
67
  3. `reconcile check` rejects anything outside the root allowlist.
68
- 4. `test-integrity` and `package-existence` run against the same retained
69
- baseline.
68
+ 4. `test-integrity` runs against the retained baseline.
70
69
  5. After proof and decision checks pass, `reconcile close` retires the private
71
70
  window; only then does the root write canonical records.
72
71
 
@@ -34,7 +34,7 @@ func rootModeFor(command string, args []string) rootMode {
34
34
  case "first-task", "spec-dedupe", "evidence-fresh", "coverage",
35
35
  "doubt-coverage", "budget", "preamble", "progress",
36
36
  "build-readiness", "readiness-digest", "analyze", "mutation-gate",
37
- "test-integrity", "review-integrity", "package-existence",
37
+ "test-integrity", "review-integrity",
38
38
  "archive-search", "config", "reviewers", "outside-voice", "docs-stale",
39
39
  "secret-scan", "lanes", "overrides":
40
40
  return rootLenient
@@ -34,7 +34,7 @@ const (
34
34
  // clean check, another snapshot re-arms only the dispatch state for a retry while
35
35
  // retaining the original source baseline.
36
36
  // `check` compares the captured state with the current state and retains the
37
- // immutable baseline for the later test-integrity and package-existence gates.
37
+ // immutable baseline for the later test-integrity gate.
38
38
  // `close` explicitly ends the window and removes its private artifacts.
39
39
  //
40
40
  // 0 clean check, snapshot/close completed, or skipped (not a git repo)
@@ -408,15 +408,13 @@ func TestReconcileCheckFailsClosedWhenObjectDatabaseIsCorrupt(t *testing.T) {
408
408
  }
409
409
  }
410
410
 
411
- func TestPostSliceGatesShareBaselineUntilClose(t *testing.T) {
411
+ func TestPostSliceTestIntegrityUsesBaselineUntilClose(t *testing.T) {
412
412
  gitRoot := newGitRepo(t)
413
413
  root := workspace(t, "feat")
414
- writeFile(t, filepath.Join(gitRoot, "package.json"), "{}\n")
415
- commitAll(t, gitRoot, "manifest")
414
+ writeFile(t, filepath.Join(gitRoot, "README.md"), "fixture\n")
415
+ commitAll(t, gitRoot, "baseline")
416
416
 
417
- // These user deltas predate the slice. In particular, the undeclared import
418
- // must not be blamed on the wright by package-existence.
419
- writeFile(t, filepath.Join(gitRoot, "src/user-delta.ts"), `import ghost from "preexisting-user-package";`+"\n")
417
+ // This user delta predates the slice and must not be blamed on the wright.
420
418
  writeFile(t, filepath.Join(gitRoot, "tests/user_delta_test.go"), "package tests\n\nfunc TestUserDelta(t *testing.T) { t.Fatal(\"baseline\") }\n")
421
419
  writeWrightAllowlist(t, root, "feat", "seed.go")
422
420
 
@@ -432,12 +430,6 @@ func TestPostSliceGatesShareBaselineUntilClose(t *testing.T) {
432
430
  if code := TestIntegrity(root, []string{"feat"}, &stdout, &stderr); code != 0 {
433
431
  t.Fatalf("test-integrity = %d, want 0\nstdout: %s\nstderr: %s", code, stdout.String(), stderr.String())
434
432
  }
435
- stdout.Reset()
436
- stderr.Reset()
437
- if code := PackageExistence(root, []string{"feat"}, &stdout, &stderr); code != 0 {
438
- t.Fatalf("package-existence = %d, want 0\nstdout: %s\nstderr: %s", code, stdout.String(), stderr.String())
439
- }
440
-
441
433
  if code, out := runReconcile(t, root, "close", "feat"); code != 0 {
442
434
  t.Fatalf("close = %d, want 0\n%s", code, out)
443
435
  }
@@ -7,8 +7,8 @@ import (
7
7
  )
8
8
 
9
9
  // gitToplevel returns the absolute path of the git working tree containing dir,
10
- // or "" when dir is not inside a repository. The git-backed gates (test-integrity,
11
- // package-existence, reconcile) skip rather than block when it is empty.
10
+ // or "" when dir is not inside a repository. The git-backed gates
11
+ // (test-integrity and reconcile) skip rather than block when it is empty.
12
12
  func gitToplevel(dir string) string {
13
13
  out, err := exec.Command("git", "-C", dir, "rev-parse", "--show-toplevel").Output()
14
14
  if err != nil {
package/engine/main.go CHANGED
@@ -56,7 +56,6 @@ Usage:
56
56
  devrites-engine mutation-gate [slug] Advisory: detect the mutation runner and scope it
57
57
  devrites-engine test-integrity [slug] Gate: no test deleted, skipped, or de-asserted
58
58
  devrites-engine review-integrity [slug] Gate: no adversarial review axis is silent (zero findings, no justification)
59
- devrites-engine package-existence [slug] Gate: every new import is declared in a manifest
60
59
  devrites-engine reconcile <sub> [slug] A1 gate: snapshot|check|close the wright's source writes
61
60
  devrites-engine resolve <qid> "<ans>" Resolve an open question; keep state.md consistent
62
61
  devrites-engine close-out <slug> Archive a shipped feature and clear ACTIVE
@@ -239,8 +238,6 @@ func run(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
239
238
  return lib.TestIntegrity(root, args[1:], stdout, stderr)
240
239
  case "review-integrity":
241
240
  return lib.ReviewIntegrity(root, args[1:], stdout, stderr)
242
- case "package-existence":
243
- return lib.PackageExistence(root, args[1:], stdout, stderr)
244
241
  case "reconcile":
245
242
  return lib.Reconcile(root, args[1:], stdout, stderr)
246
243
  case "resolve":
@@ -45,7 +45,6 @@ func TestRootModeForCoversReadAndWriteSurfaces(t *testing.T) {
45
45
  {name: "mutation gate", command: "mutation-gate", want: rootLenient},
46
46
  {name: "test integrity", command: "test-integrity", want: rootLenient},
47
47
  {name: "review integrity", command: "review-integrity", want: rootLenient},
48
- {name: "package existence", command: "package-existence", want: rootLenient},
49
48
  {name: "reconcile snapshot", command: "reconcile", args: []string{"snapshot"}, want: rootStrict},
50
49
  {name: "reconcile check", command: "reconcile", args: []string{"check"}, want: rootStrict},
51
50
  {name: "reconcile close", command: "reconcile", args: []string{"close"}, want: rootStrict},
@@ -166,8 +166,8 @@ decision.
166
166
 
167
167
  Hand the winner's structured artifact to the normal cycle. Run immediate
168
168
  reconciliation, doubt every stood decision, and complete test-integrity,
169
- package-existence, targeted, browser, and other slice proof. Only after every
170
- required gate is green:
169
+ targeted, browser, and other slice proof. Only after every required gate is
170
+ green:
171
171
 
172
172
  ```bash
173
173
  devrites-engine forge record "$RUN_ID" verification verified \
@@ -73,14 +73,13 @@ See also [`one-slice-cycle.md`](one-slice-cycle.md).
73
73
  (reported in its `Principles` field, or that you detect against `.devrites/principles.md`) is
74
74
  handled here like an irreversible-risk item: block, route to a human-approved scoped
75
75
  exception in the register or stop; never doubt-and-accept a principle violation into the slice.
76
- 5. **Run retained-baseline integrity gates, then recover any objective red.**
76
+ 5. **Run the retained-baseline integrity gate, then recover any objective red.**
77
77
  ```bash
78
78
  devrites-engine test-integrity; echo "test-integrity rc=$?"
79
- devrites-engine package-existence; echo "package-existence rc=$?"
80
79
  ```
81
- If the wright's `Gates` were red (targeted tests / types / lint), either integrity gate
82
- failed, or it
83
- couldn't verify: do **not** mark the slice `built`, and **do not fix the code yourself**.
80
+ If the wright's `Gates` were red (targeted tests / types / lint), `test-integrity`
81
+ failed, or proof could not be verified: do **not** mark the slice `built`, and **do not
82
+ fix the code yourself**.
84
83
  Classify each causal fingerprint through
85
84
  [`cleanup-and-classify.md`](../../devrites-debug-recovery/reference/cleanup-and-classify.md),
86
85
  run `devrites-engine recovery route <class>`, and follow the `recovery-route/v1`
@@ -95,9 +94,9 @@ See also [`one-slice-cycle.md`](one-slice-cycle.md).
95
94
  `recovery clear --class <class> "<root cause>" <slug>` only after green. Before every
96
95
  re-dispatch, update the root-owned allowlist only for an accepted in-slice path and run
97
96
  `reconcile snapshot`: after a clean check this refreshes canonical-state scope while
98
- retaining the original source baseline. Repeat reconcile and both integrity gates on every
99
- return. This owns red
100
- gates, missing coverage, browser/runtime failures, and workflow-tool defects.
97
+ retaining the original source baseline. Repeat reconcile and the integrity gate on every
98
+ return. This owns red gates, missing coverage, browser/runtime failures, and
99
+ workflow-tool defects.
101
100
  After recovery:
102
101
  - green → continue to record;
103
102
  - product-contract/acceptance ambiguity or irreversible risk → open the genuine human gate
@@ -106,22 +105,14 @@ See also [`one-slice-cycle.md`](one-slice-cycle.md).
106
105
  - exhausted objective failure → preserve reproduction/dead ends, set `Status: blocked` and
107
106
  `Next step: /rite-plan unblock`, then STOP without a question or `/rite-resolve`.
108
107
  6. **Close the retained baseline, then record. You are the canonical writer.**
109
- Reconciliation ran immediately on return and the two integrity gates ran in step 5.
108
+ Reconciliation ran immediately on return and `test-integrity` ran in step 5.
110
109
  **Exit 3 → hard STOP:** a test was deleted, skipped, or de-asserted since the slice base: the
111
110
  slice went green by weakening its tests, a Critical protocol violation. Revert the weakening and
112
111
  re-dispatch the wright; do **not** mark the slice `built`.
113
112
 
114
- The package-existence gate (anti-hallucination) requires every new third-party import
115
- to appear in a project manifest:
116
- **Exit 3 → STOP:** an imported package is not declared in any manifest (`package.json`, `go.mod`,
117
- `requirements.txt`, `pyproject.toml`, `Pipfile`, `Cargo.toml`): the classic shape of a
118
- hallucinated or typo-squatted dependency. Confirm the name on the registry and declare it via the
119
- package manager, or remove the import; do **not** mark the slice `built`. The gate is deterministic
120
- and fail-open (not a git repo / no manifest / stdlib-only import → rc 0). If the nearest
121
- manifest declares the package, treat the mismatch as a workflow-tool defect under bounded
122
- recovery, not a plan repair or retry-authorization question. Once every gate and doubt
123
- verdict is accepted, a forged slice records successful verification and runs
124
- manifest-only cleanup per [`forge.md`](forge.md). Then close the private window:
113
+ Once every gate and doubt verdict is accepted, a forged slice records successful
114
+ verification and runs manifest-only cleanup per [`forge.md`](forge.md). Then close the
115
+ private window:
125
116
  ```bash
126
117
  devrites-engine reconcile close
127
118
  ```
@@ -66,15 +66,12 @@ and exact changed-file set. Before the root writes any canonical record, run:
66
66
  ```bash
67
67
  devrites-engine reconcile check; echo "reconcile rc=$?"
68
68
  devrites-engine test-integrity; echo "test-integrity rc=$?"
69
- devrites-engine package-existence; echo "package-existence rc=$?"
70
69
  ```
71
70
 
72
71
  - Reconcile `5`: reject the result. Preserve pre-snapshot user work; restore only the
73
72
  unauthorized slice delta; never widen scope from the writer's self-report.
74
73
  - Test integrity `3`: a test was deleted, muted, focused, or de-asserted. Treat it as a
75
74
  Critical protocol failure and correct it through the wright.
76
- - Package existence `3`: verify the exact package/version and fix the bounded workflow
77
- or dependency defect through recovery. It is not a reason to ask for retry approval.
78
75
  - A setup/corrupt-baseline error blocks acceptance; never fall back silently to `HEAD`.
79
76
 
80
77
  The clean reconcile check records that source has not changed since inspection. The
@@ -105,13 +102,13 @@ Before every retry:
105
102
 
106
103
  That refresh requires the prior clean check, re-fingerprints root-owned state, and keeps
107
104
  the original source baseline. Re-dispatch with the exact output, attempt count, and dead
108
- ends. Then repeat reconcile and both integrity gates from zero. Clear recovery only after
105
+ ends. Then repeat reconcile and `test-integrity` from zero. Clear recovery only after
109
106
  green with `recovery clear --class <class> "<root cause>" <slug>`. An exhausted objective
110
107
  failure becomes a technical blocker with its reproduction, not a `rite-resolve` question.
111
108
 
112
109
  ## Close and record
113
110
 
114
- When reconciliation, integrity, package, proof, and doubt gates all pass:
111
+ When reconciliation, integrity, proof, and doubt gates all pass:
115
112
 
116
113
  ```bash
117
114
  devrites-engine reconcile close
@@ -21,7 +21,6 @@ mutation tool when present. Run:
21
21
  ```bash
22
22
  devrites-engine test-integrity
23
23
  devrites-engine mutation-gate
24
- devrites-engine package-existence
25
24
  ```
26
25
 
27
26
  A test that stays green on broken code is unproven. Pure transforms also get a
@@ -53,7 +53,6 @@ gates:
53
53
  ```bash
54
54
  devrites-engine test-integrity; echo "test-integrity rc=$?" # exit 3 = a test deleted/skipped/loosened → Critical NO-GO
55
55
  devrites-engine mutation-gate # changed-files mutation score — band the verdict; survivors are unproven behaviours
56
- devrites-engine package-existence; echo "package-existence rc=$?" # exit 3 = a new import isn't declared in any manifest (hallucinated/typo-squatted dep) → Critical NO-GO
57
56
  ```
58
57
  A test weakened since the slice base is a **Critical NO-GO**: the suite went green by lowering the
59
58
  bar, not by the code being right. Record the mutation score in `seal.md`; under
@@ -166,8 +166,8 @@ decision.
166
166
 
167
167
  Hand the winner's structured artifact to the normal cycle. Run immediate
168
168
  reconciliation, doubt every stood decision, and complete test-integrity,
169
- package-existence, targeted, browser, and other slice proof. Only after every
170
- required gate is green:
169
+ targeted, browser, and other slice proof. Only after every required gate is
170
+ green:
171
171
 
172
172
  ```bash
173
173
  devrites-engine forge record "$RUN_ID" verification verified \
@@ -73,14 +73,13 @@ See also [`one-slice-cycle.md`](one-slice-cycle.md).
73
73
  (reported in its `Principles` field, or that you detect against `.devrites/principles.md`) is
74
74
  handled here like an irreversible-risk item: block, route to a human-approved scoped
75
75
  exception in the register or stop; never doubt-and-accept a principle violation into the slice.
76
- 5. **Run retained-baseline integrity gates, then recover any objective red.**
76
+ 5. **Run the retained-baseline integrity gate, then recover any objective red.**
77
77
  ```bash
78
78
  devrites-engine test-integrity; echo "test-integrity rc=$?"
79
- devrites-engine package-existence; echo "package-existence rc=$?"
80
79
  ```
81
- If the wright's `Gates` were red (targeted tests / types / lint), either integrity gate
82
- failed, or it
83
- couldn't verify: do **not** mark the slice `built`, and **do not fix the code yourself**.
80
+ If the wright's `Gates` were red (targeted tests / types / lint), `test-integrity`
81
+ failed, or proof could not be verified: do **not** mark the slice `built`, and **do not
82
+ fix the code yourself**.
84
83
  Classify each causal fingerprint through
85
84
  [`cleanup-and-classify.md`](../../devrites-debug-recovery/reference/cleanup-and-classify.md),
86
85
  run `devrites-engine recovery route <class>`, and follow the `recovery-route/v1`
@@ -95,9 +94,9 @@ See also [`one-slice-cycle.md`](one-slice-cycle.md).
95
94
  `recovery clear --class <class> "<root cause>" <slug>` only after green. Before every
96
95
  re-dispatch, update the root-owned allowlist only for an accepted in-slice path and run
97
96
  `reconcile snapshot`: after a clean check this refreshes canonical-state scope while
98
- retaining the original source baseline. Repeat reconcile and both integrity gates on every
99
- return. This owns red
100
- gates, missing coverage, browser/runtime failures, and workflow-tool defects.
97
+ retaining the original source baseline. Repeat reconcile and the integrity gate on every
98
+ return. This owns red gates, missing coverage, browser/runtime failures, and
99
+ workflow-tool defects.
101
100
  After recovery:
102
101
  - green → continue to record;
103
102
  - product-contract/acceptance ambiguity or irreversible risk → open the genuine human gate
@@ -106,22 +105,14 @@ See also [`one-slice-cycle.md`](one-slice-cycle.md).
106
105
  - exhausted objective failure → preserve reproduction/dead ends, set `Status: blocked` and
107
106
  `Next step: /rite-plan unblock`, then STOP without a question or `/rite-resolve`.
108
107
  6. **Close the retained baseline, then record. You are the canonical writer.**
109
- Reconciliation ran immediately on return and the two integrity gates ran in step 5.
108
+ Reconciliation ran immediately on return and `test-integrity` ran in step 5.
110
109
  **Exit 3 → hard STOP:** a test was deleted, skipped, or de-asserted since the slice base: the
111
110
  slice went green by weakening its tests, a Critical protocol violation. Revert the weakening and
112
111
  re-dispatch the wright; do **not** mark the slice `built`.
113
112
 
114
- The package-existence gate (anti-hallucination) requires every new third-party import
115
- to appear in a project manifest:
116
- **Exit 3 → STOP:** an imported package is not declared in any manifest (`package.json`, `go.mod`,
117
- `requirements.txt`, `pyproject.toml`, `Pipfile`, `Cargo.toml`): the classic shape of a
118
- hallucinated or typo-squatted dependency. Confirm the name on the registry and declare it via the
119
- package manager, or remove the import; do **not** mark the slice `built`. The gate is deterministic
120
- and fail-open (not a git repo / no manifest / stdlib-only import → rc 0). If the nearest
121
- manifest declares the package, treat the mismatch as a workflow-tool defect under bounded
122
- recovery, not a plan repair or retry-authorization question. Once every gate and doubt
123
- verdict is accepted, a forged slice records successful verification and runs
124
- manifest-only cleanup per [`forge.md`](forge.md). Then close the private window:
113
+ Once every gate and doubt verdict is accepted, a forged slice records successful
114
+ verification and runs manifest-only cleanup per [`forge.md`](forge.md). Then close the
115
+ private window:
125
116
  ```bash
126
117
  devrites-engine reconcile close
127
118
  ```
@@ -66,15 +66,12 @@ and exact changed-file set. Before the root writes any canonical record, run:
66
66
  ```bash
67
67
  devrites-engine reconcile check; echo "reconcile rc=$?"
68
68
  devrites-engine test-integrity; echo "test-integrity rc=$?"
69
- devrites-engine package-existence; echo "package-existence rc=$?"
70
69
  ```
71
70
 
72
71
  - Reconcile `5`: reject the result. Preserve pre-snapshot user work; restore only the
73
72
  unauthorized slice delta; never widen scope from the writer's self-report.
74
73
  - Test integrity `3`: a test was deleted, muted, focused, or de-asserted. Treat it as a
75
74
  Critical protocol failure and correct it through the wright.
76
- - Package existence `3`: verify the exact package/version and fix the bounded workflow
77
- or dependency defect through recovery. It is not a reason to ask for retry approval.
78
75
  - A setup/corrupt-baseline error blocks acceptance; never fall back silently to `HEAD`.
79
76
 
80
77
  The clean reconcile check records that source has not changed since inspection. The
@@ -105,13 +102,13 @@ Before every retry:
105
102
 
106
103
  That refresh requires the prior clean check, re-fingerprints root-owned state, and keeps
107
104
  the original source baseline. Re-dispatch with the exact output, attempt count, and dead
108
- ends. Then repeat reconcile and both integrity gates from zero. Clear recovery only after
105
+ ends. Then repeat reconcile and `test-integrity` from zero. Clear recovery only after
109
106
  green with `recovery clear --class <class> "<root cause>" <slug>`. An exhausted objective
110
107
  failure becomes a technical blocker with its reproduction, not a `rite-resolve` question.
111
108
 
112
109
  ## Close and record
113
110
 
114
- When reconciliation, integrity, package, proof, and doubt gates all pass:
111
+ When reconciliation, integrity, proof, and doubt gates all pass:
115
112
 
116
113
  ```bash
117
114
  devrites-engine reconcile close
@@ -21,7 +21,6 @@ mutation tool when present. Run:
21
21
  ```bash
22
22
  devrites-engine test-integrity
23
23
  devrites-engine mutation-gate
24
- devrites-engine package-existence
25
24
  ```
26
25
 
27
26
  A test that stays green on broken code is unproven. Pure transforms also get a
@@ -53,7 +53,6 @@ gates:
53
53
  ```bash
54
54
  devrites-engine test-integrity; echo "test-integrity rc=$?" # exit 3 = a test deleted/skipped/loosened → Critical NO-GO
55
55
  devrites-engine mutation-gate # changed-files mutation score — band the verdict; survivors are unproven behaviours
56
- devrites-engine package-existence; echo "package-existence rc=$?" # exit 3 = a new import isn't declared in any manifest (hallucinated/typo-squatted dep) → Critical NO-GO
57
56
  ```
58
57
  A test weakened since the slice base is a **Critical NO-GO**: the suite went green by lowering the
59
58
  bar, not by the code being right. Record the mutation score in `seal.md`; under
@@ -166,8 +166,8 @@ decision.
166
166
 
167
167
  Hand the winner's structured artifact to the normal cycle. Run immediate
168
168
  reconciliation, doubt every stood decision, and complete test-integrity,
169
- package-existence, targeted, browser, and other slice proof. Only after every
170
- required gate is green:
169
+ targeted, browser, and other slice proof. Only after every required gate is
170
+ green:
171
171
 
172
172
  ```bash
173
173
  devrites-engine forge record "$RUN_ID" verification verified \
@@ -73,14 +73,13 @@ See also [`one-slice-cycle.md`](one-slice-cycle.md).
73
73
  (reported in its `Principles` field, or that you detect against `.devrites/principles.md`) is
74
74
  handled here like an irreversible-risk item: block, route to a human-approved scoped
75
75
  exception in the register or stop; never doubt-and-accept a principle violation into the slice.
76
- 5. **Run retained-baseline integrity gates, then recover any objective red.**
76
+ 5. **Run the retained-baseline integrity gate, then recover any objective red.**
77
77
  ```bash
78
78
  devrites-engine test-integrity; echo "test-integrity rc=$?"
79
- devrites-engine package-existence; echo "package-existence rc=$?"
80
79
  ```
81
- If the wright's `Gates` were red (targeted tests / types / lint), either integrity gate
82
- failed, or it
83
- couldn't verify: do **not** mark the slice `built`, and **do not fix the code yourself**.
80
+ If the wright's `Gates` were red (targeted tests / types / lint), `test-integrity`
81
+ failed, or proof could not be verified: do **not** mark the slice `built`, and **do not
82
+ fix the code yourself**.
84
83
  Classify each causal fingerprint through
85
84
  [`cleanup-and-classify.md`](../../devrites-debug-recovery/reference/cleanup-and-classify.md),
86
85
  run `devrites-engine recovery route <class>`, and follow the `recovery-route/v1`
@@ -95,9 +94,9 @@ See also [`one-slice-cycle.md`](one-slice-cycle.md).
95
94
  `recovery clear --class <class> "<root cause>" <slug>` only after green. Before every
96
95
  re-dispatch, update the root-owned allowlist only for an accepted in-slice path and run
97
96
  `reconcile snapshot`: after a clean check this refreshes canonical-state scope while
98
- retaining the original source baseline. Repeat reconcile and both integrity gates on every
99
- return. This owns red
100
- gates, missing coverage, browser/runtime failures, and workflow-tool defects.
97
+ retaining the original source baseline. Repeat reconcile and the integrity gate on every
98
+ return. This owns red gates, missing coverage, browser/runtime failures, and
99
+ workflow-tool defects.
101
100
  After recovery:
102
101
  - green → continue to record;
103
102
  - product-contract/acceptance ambiguity or irreversible risk → open the genuine human gate
@@ -106,22 +105,14 @@ See also [`one-slice-cycle.md`](one-slice-cycle.md).
106
105
  - exhausted objective failure → preserve reproduction/dead ends, set `Status: blocked` and
107
106
  `Next step: $rite-plan unblock`, then STOP without a question or `$rite-resolve`.
108
107
  6. **Close the retained baseline, then record. You are the canonical writer.**
109
- Reconciliation ran immediately on return and the two integrity gates ran in step 5.
108
+ Reconciliation ran immediately on return and `test-integrity` ran in step 5.
110
109
  **Exit 3 → hard STOP:** a test was deleted, skipped, or de-asserted since the slice base: the
111
110
  slice went green by weakening its tests, a Critical protocol violation. Revert the weakening and
112
111
  re-dispatch the wright; do **not** mark the slice `built`.
113
112
 
114
- The package-existence gate (anti-hallucination) requires every new third-party import
115
- to appear in a project manifest:
116
- **Exit 3 → STOP:** an imported package is not declared in any manifest (`package.json`, `go.mod`,
117
- `requirements.txt`, `pyproject.toml`, `Pipfile`, `Cargo.toml`): the classic shape of a
118
- hallucinated or typo-squatted dependency. Confirm the name on the registry and declare it via the
119
- package manager, or remove the import; do **not** mark the slice `built`. The gate is deterministic
120
- and fail-open (not a git repo / no manifest / stdlib-only import → rc 0). If the nearest
121
- manifest declares the package, treat the mismatch as a workflow-tool defect under bounded
122
- recovery, not a plan repair or retry-authorization question. Once every gate and doubt
123
- verdict is accepted, a forged slice records successful verification and runs
124
- manifest-only cleanup per [`forge.md`](forge.md). Then close the private window:
113
+ Once every gate and doubt verdict is accepted, a forged slice records successful
114
+ verification and runs manifest-only cleanup per [`forge.md`](forge.md). Then close the
115
+ private window:
125
116
  ```bash
126
117
  devrites-engine reconcile close
127
118
  ```
@@ -66,15 +66,12 @@ and exact changed-file set. Before the root writes any canonical record, run:
66
66
  ```bash
67
67
  devrites-engine reconcile check; echo "reconcile rc=$?"
68
68
  devrites-engine test-integrity; echo "test-integrity rc=$?"
69
- devrites-engine package-existence; echo "package-existence rc=$?"
70
69
  ```
71
70
 
72
71
  - Reconcile `5`: reject the result. Preserve pre-snapshot user work; restore only the
73
72
  unauthorized slice delta; never widen scope from the writer's self-report.
74
73
  - Test integrity `3`: a test was deleted, muted, focused, or de-asserted. Treat it as a
75
74
  Critical protocol failure and correct it through the wright.
76
- - Package existence `3`: verify the exact package/version and fix the bounded workflow
77
- or dependency defect through recovery. It is not a reason to ask for retry approval.
78
75
  - A setup/corrupt-baseline error blocks acceptance; never fall back silently to `HEAD`.
79
76
 
80
77
  The clean reconcile check records that source has not changed since inspection. The
@@ -105,13 +102,13 @@ Before every retry:
105
102
 
106
103
  That refresh requires the prior clean check, re-fingerprints root-owned state, and keeps
107
104
  the original source baseline. Re-dispatch with the exact output, attempt count, and dead
108
- ends. Then repeat reconcile and both integrity gates from zero. Clear recovery only after
105
+ ends. Then repeat reconcile and `test-integrity` from zero. Clear recovery only after
109
106
  green with `recovery clear --class <class> "<root cause>" <slug>`. An exhausted objective
110
107
  failure becomes a technical blocker with its reproduction, not a `rite-resolve` question.
111
108
 
112
109
  ## Close and record
113
110
 
114
- When reconciliation, integrity, package, proof, and doubt gates all pass:
111
+ When reconciliation, integrity, proof, and doubt gates all pass:
115
112
 
116
113
  ```bash
117
114
  devrites-engine reconcile close
@@ -21,7 +21,6 @@ mutation tool when present. Run:
21
21
  ```bash
22
22
  devrites-engine test-integrity
23
23
  devrites-engine mutation-gate
24
- devrites-engine package-existence
25
24
  ```
26
25
 
27
26
  A test that stays green on broken code is unproven. Pure transforms also get a
@@ -53,7 +53,6 @@ gates:
53
53
  ```bash
54
54
  devrites-engine test-integrity; echo "test-integrity rc=$?" # exit 3 = a test deleted/skipped/loosened → Critical NO-GO
55
55
  devrites-engine mutation-gate # changed-files mutation score — band the verdict; survivors are unproven behaviours
56
- devrites-engine package-existence; echo "package-existence rc=$?" # exit 3 = a new import isn't declared in any manifest (hallucinated/typo-squatted dep) → Critical NO-GO
57
56
  ```
58
57
  A test weakened since the slice base is a **Critical NO-GO**: the suite went green by lowering the
59
58
  bar, not by the code being right. Record the mutation score in `seal.md`; under
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devrites",
3
- "version": "3.2.5",
3
+ "version": "3.2.6",
4
4
  "description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code and Codex",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://github.com/ViktorsBaikers/DevRites#readme",
@@ -59,6 +59,7 @@ for item in "${PAYLOAD[@]}"; do
59
59
  if [[ -e "$item" ]]; then
60
60
  if [[ "$item" == "engine" ]] && git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
61
61
  while IFS= read -r -d '' path; do
62
+ [[ -e "$path" ]] || continue
62
63
  if [[ "$path" == engine/testdata/golden/* ]]; then
63
64
  continue
64
65
  fi
@@ -302,7 +302,6 @@ DELETED_HELPER_HITS="$(grep -rnI \
302
302
  -e 'footprint\.sh' \
303
303
  -e 'learnings\.sh' \
304
304
  -e 'mutation-gate\.sh' \
305
- -e 'package-existence\.sh' \
306
305
  -e 'progress\.sh' \
307
306
  -e 'reconcile\.sh' \
308
307
  -e 'tick-afk\.sh' \