devrites 6.4.1 → 6.4.3
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 +12 -0
- package/README.md +1 -1
- package/docs/engine/commands.md +1 -1
- package/engine/internal/lib/context.go +14 -4
- package/pack/.claude/agents/devrites-slice-wright.md +4 -0
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +3 -1
- package/pack/generated/claude/agents/devrites-slice-wright.md +4 -0
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +3 -1
- package/pack/generated/codex/agents/devrites-slice-wright.toml +4 -0
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +3 -1
- package/pack/generated/devin/agents/devrites-slice-wright.md +4 -0
- package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +3 -1
- package/pack/generated/omp/agents/devrites-slice-wright.md +4 -0
- package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +3 -1
- package/pack/generated/pi/agents/devrites-slice-wright.md +4 -0
- package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +3 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
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
|
+
## [6.4.3](https://github.com/ViktorsBaikers/DevRites/compare/v6.4.2...v6.4.3) (2026-10-16)
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
* **devrites:** wrights use mktemp scratch and the edit tool ([#117](https://github.com/ViktorsBaikers/DevRites/issues/117)) ([0b274e8](https://github.com/ViktorsBaikers/DevRites/commit/0b274e8375445c61421390c5e69105695a8f9fad))
|
|
10
|
+
|
|
11
|
+
## [6.4.2](https://github.com/ViktorsBaikers/DevRites/compare/v6.4.1...v6.4.2) (2026-10-16)
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
* **devrites:** slim slice bundles; keep verdicts out of contracts ([#116](https://github.com/ViktorsBaikers/DevRites/issues/116)) ([d4cffbe](https://github.com/ViktorsBaikers/DevRites/commit/d4cffbe8a7980ec937ce0f8040bf9df10ae90065))
|
|
16
|
+
|
|
5
17
|
## [6.4.1](https://github.com/ViktorsBaikers/DevRites/compare/v6.4.0...v6.4.1) (2026-10-16)
|
|
6
18
|
|
|
7
19
|
### Fixed
|
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ history can't lose it. After you clear the conversation, switch hosts, or hand
|
|
|
31
31
|
the feature to another engineer, the next session reads the same plan,
|
|
32
32
|
decisions, and evidence before it continues.
|
|
33
33
|
|
|
34
|
-
**Status:** [`v6.4.
|
|
34
|
+
**Status:** [`v6.4.3`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v6.4.3): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
|
|
35
35
|
|
|
36
36
|
This is the latest published release; `main` may contain unreleased work.
|
|
37
37
|
|
package/docs/engine/commands.md
CHANGED
|
@@ -33,7 +33,7 @@ workflow strategy.
|
|
|
33
33
|
| `next [slug]` | Print the minimal remaining lifecycle path plus advisory skips. |
|
|
34
34
|
| `handoff [slug]` | Emit the deterministic resume record: cursor fields, `awaiting_human`, open `questions.md` gate kinds, the `gates.md` reduction with unmet/stale/abandoned ids, `decisions.md` dead ends, missing required files, and the canonical read-next order. Read-only; the `/rite-handoff` spine and the compaction-fallback entry point. |
|
|
35
35
|
| `recall --paths <p1,p2,...> [--limit n]` | Read-time query over `.devrites/archive/`: list archived features whose `touched-files.md` candidate manifest covers a queried project-relative path (exact or directory prefix, case-folded), ranked by overlap count, then newest archive-directory mtime, then slug (default 10 features). Each feature prints up to 8 `archive/<slug>/<file>:<line>` pointers, then `+N more`: `decisions.md` `DEC-###` entries and `## Carry-forward constraints` bullets whose `Files:` overlap (or a constraint naming no files), plus `review.md`/`seal.md`/`drift.md` lines that mention a queried path; fenced examples are ignored. Never writes, caches, or indexes (no metric either); symlinked archive entries are refused. An unreadable archive file prints `unreadable:` and the scan continues. Exit `0` (including `recall: no archive`), `1` invalid archive directory, `2` usage. |
|
|
36
|
-
| `context [slug] (--phase <p>\|--skill <name>) [--role <r>] [--slice <SLICE-ID>] [--trigger a,b]` | Emit one deduplicated read-set bundle per phase/role/skill from each skill's `loads:` manifest; `--skill` works without a workspace when `--out` is given. A bundle without `--role` (the root's own read) gives over-budget artifacts as by-reference indexes; a `--role` bundle leads with the role's agent contract and names the manifest's `rootOnly` paths instead of inlining them. `--slice` inlines that slice's `tasks.md` block and turns each over-budget artifact into a by-reference index (path, SHA-256, headings, line hits for every ID the block cites); repeat `--slice` for several slices; an unknown slice exits `3`. |
|
|
36
|
+
| `context [slug] (--phase <p>\|--skill <name>) [--role <r>] [--slice <SLICE-ID>] [--trigger a,b]` | Emit one deduplicated read-set bundle per phase/role/skill from each skill's `loads:` manifest; `--skill` works without a workspace when `--out` is given. A bundle without `--role` (the root's own read) gives over-budget artifacts as by-reference indexes; a `--role` bundle leads with the role's agent contract and names the manifest's `rootOnly` paths instead of inlining them. `--slice` inlines that slice's `tasks.md` block and turns each over-budget artifact, and each artifact over 16 KiB except `spec.md`, into a by-reference index (path, SHA-256, headings, line hits for every ID the block cites); repeat `--slice` for several slices; an unknown slice exits `3`. |
|
|
37
37
|
| `dispatch <slug> <open\|start\|seal\|return\|status\|abandon>` | Launch-wave barrier for parallel dispatch: seal needs a handle per role, return needs seal; start/return auto-record metrics. A build wave with a wright role needs `--slice <SLICE-ID>` per slice, and a slice-bound vet wave takes it too; every 5 rounds of either kind on one slice, `open` exits `3` until `--reslice-review <DRIFT-ID>` names an unused `drift.md` `## <DRIFT-ID>` heading for that slice. `open` also warns when an earlier wave for the same slice never returned. |
|
|
38
38
|
| `metrics record <slug> --phase <p> --event <e> [--role r] [--bytes n] [--note s]` | Append an event to the workspace's `metrics.jsonl` ledger. |
|
|
39
39
|
| `metrics summary [slug] [--by-slice]` | Reduce `metrics.jsonl` into a per-phase roll-up. `--by-slice` reads `dispatch.json` instead: per slice, build wright rounds, slice-bound Vet rechecks, and agent-minutes (role start to `returned_at`; abandoned waves excluded). |
|
|
@@ -46,8 +46,9 @@ Emits one deduplicated context bundle for a phase or standalone skill
|
|
|
46
46
|
reads a single file. With --skill, slug may be omitted; then --out is
|
|
47
47
|
required and no workspace section is included. --slice scopes the
|
|
48
48
|
workspace section to one slice: tasks.md contributes that slice's block,
|
|
49
|
-
and an artifact over its line/byte budget
|
|
50
|
-
(path, SHA-256, headings, and line hits for
|
|
49
|
+
and an artifact over its line/byte budget or over 16 KiB (spec.md excepted)
|
|
50
|
+
becomes a by-reference index (path, SHA-256, headings, and line hits for
|
|
51
|
+
every ID the block cites).
|
|
51
52
|
Repeat --slice for a recheck that spans several slices.
|
|
52
53
|
`
|
|
53
54
|
|
|
@@ -348,9 +349,16 @@ func expandIncludes(abs string, data []byte) []byte {
|
|
|
348
349
|
})
|
|
349
350
|
}
|
|
350
351
|
|
|
352
|
+
// sliceInlineMaxBytes caps a workspace artifact inlined whole into a --slice
|
|
353
|
+
// bundle. Planning budgets size a whole feature, not one slice's read; a
|
|
354
|
+
// larger artifact goes by reference so the slice's agent reads only the
|
|
355
|
+
// sections its block cites. spec.md, the acceptance source, stays whole.
|
|
356
|
+
const sliceInlineMaxBytes = 16 << 10
|
|
357
|
+
|
|
351
358
|
// writeSliceEntry writes one workspace artifact of a --slice or root bundle:
|
|
352
|
-
// with a slice, tasks.md as the slice block plus a by-reference index
|
|
353
|
-
//
|
|
359
|
+
// with a slice, tasks.md as the slice block plus a by-reference index and any
|
|
360
|
+
// other artifact but spec.md over sliceInlineMaxBytes as a by-reference index;
|
|
361
|
+
// any canonical artifact over its line/byte budget as a by-reference index;
|
|
354
362
|
// everything else whole.
|
|
355
363
|
func writeSliceEntry(bundle *strings.Builder, project, abs, label, slice, block string, ids []citedID, seen map[string]bool) (loaded, byRef bool) {
|
|
356
364
|
if seen[abs] {
|
|
@@ -361,6 +369,8 @@ func writeSliceEntry(bundle *strings.Builder, project, abs, label, slice, block
|
|
|
361
369
|
if err == nil && name == "tasks.md" && slice != "" {
|
|
362
370
|
seen[abs] = true
|
|
363
371
|
fmt.Fprintf(bundle, "===== %s (%s block) =====\n%s\n", label, slice, block)
|
|
372
|
+
} else if err == nil && slice != "" && name != "spec.md" && len(data) > sliceInlineMaxBytes {
|
|
373
|
+
seen[abs] = true
|
|
364
374
|
} else if status, ok := state.ArtifactBudget(name, data); err != nil || !ok || !status.Over {
|
|
365
375
|
return writeContextEntry(bundle, abs, label, seen, false), false
|
|
366
376
|
} else {
|
|
@@ -119,6 +119,10 @@ unclear boundary is underspecified: return `Escalation` without proceeding.
|
|
|
119
119
|
loosening an assertion. A test that genuinely must change is an **Escalation**,
|
|
120
120
|
not a quiet edit. The root inspects the returned diff and dedicated test
|
|
121
121
|
analysis treats a weakened test as a Critical STOP.
|
|
122
|
+
**Scratch** for probes and copies is one fresh `mktemp -d` directory you own,
|
|
123
|
+
never a fixed name such as `/tmp/x`: writing a path you did not create is an
|
|
124
|
+
unproven overwrite and stops the run for the owner. Edit allowlisted files with
|
|
125
|
+
the edit tool; a blocked edit is a gap to report, never routed around.
|
|
122
126
|
For non-trivial failure, invoke `devrites-debug-recovery` with the exact error,
|
|
123
127
|
hypotheses, and dead ends. Caller and recovery share three no-progress attempts per
|
|
124
128
|
exact causal fingerprint. Count only corrections whose recheck preserves the same
|
|
@@ -95,7 +95,9 @@ live foreign session releases the retained claim and stops the dispatch, per
|
|
|
95
95
|
[`agents.md`](../../devrites-lib/reference/standards/agents.md). `.devrites/**`
|
|
96
96
|
is never a task path; see [Workflow Artifact admission](../../devrites-lib/reference/standards/workflow-artifacts.md).
|
|
97
97
|
Write the exact contract, with its `Writer-safe checks:` line, to
|
|
98
|
-
`packets/<wave>.contract.md` and hand the wright that text verbatim.
|
|
98
|
+
`packets/<wave>.contract.md` and hand the wright that text verbatim. Reviewers read
|
|
99
|
+
that file, so it states each defect to fix with its anchor, never a reviewer's verdict,
|
|
100
|
+
count, or pass status ("code review is no-findings" voids the next review). Ask the host
|
|
99
101
|
for the exact writer in fresh context; a repair round on the same slice whose
|
|
100
102
|
returned wright the host can still continue goes to that wright on its existing
|
|
101
103
|
handle instead, so it does not re-read the slice from scratch. Wait, and track it
|
|
@@ -119,6 +119,10 @@ unclear boundary is underspecified: return `Escalation` without proceeding.
|
|
|
119
119
|
loosening an assertion. A test that genuinely must change is an **Escalation**,
|
|
120
120
|
not a quiet edit. The root inspects the returned diff and dedicated test
|
|
121
121
|
analysis treats a weakened test as a Critical STOP.
|
|
122
|
+
**Scratch** for probes and copies is one fresh `mktemp -d` directory you own,
|
|
123
|
+
never a fixed name such as `/tmp/x`: writing a path you did not create is an
|
|
124
|
+
unproven overwrite and stops the run for the owner. Edit allowlisted files with
|
|
125
|
+
the edit tool; a blocked edit is a gap to report, never routed around.
|
|
122
126
|
For non-trivial failure, invoke `devrites-debug-recovery` with the exact error,
|
|
123
127
|
hypotheses, and dead ends. Caller and recovery share three no-progress attempts per
|
|
124
128
|
exact causal fingerprint. Count only corrections whose recheck preserves the same
|
|
@@ -95,7 +95,9 @@ live foreign session releases the retained claim and stops the dispatch, per
|
|
|
95
95
|
[`agents.md`](../../devrites-lib/reference/standards/agents.md). `.devrites/**`
|
|
96
96
|
is never a task path; see [Workflow Artifact admission](../../devrites-lib/reference/standards/workflow-artifacts.md).
|
|
97
97
|
Write the exact contract, with its `Writer-safe checks:` line, to
|
|
98
|
-
`packets/<wave>.contract.md` and hand the wright that text verbatim.
|
|
98
|
+
`packets/<wave>.contract.md` and hand the wright that text verbatim. Reviewers read
|
|
99
|
+
that file, so it states each defect to fix with its anchor, never a reviewer's verdict,
|
|
100
|
+
count, or pass status ("code review is no-findings" voids the next review). Ask the host
|
|
99
101
|
for the exact writer in fresh context; a repair round on the same slice whose
|
|
100
102
|
returned wright the host can still continue goes to that wright on its existing
|
|
101
103
|
handle instead, so it does not re-read the slice from scratch. Wait, and track it
|
|
@@ -117,6 +117,10 @@ unclear boundary is underspecified: return `Escalation` without proceeding.
|
|
|
117
117
|
loosening an assertion. A test that genuinely must change is an **Escalation**,
|
|
118
118
|
not a quiet edit. The root inspects the returned diff and dedicated test
|
|
119
119
|
analysis treats a weakened test as a Critical STOP.
|
|
120
|
+
**Scratch** for probes and copies is one fresh `mktemp -d` directory you own,
|
|
121
|
+
never a fixed name such as `/tmp/x`: writing a path you did not create is an
|
|
122
|
+
unproven overwrite and stops the run for the owner. Edit allowlisted files with
|
|
123
|
+
the edit tool; a blocked edit is a gap to report, never routed around.
|
|
120
124
|
For non-trivial failure, invoke `devrites-debug-recovery` with the exact error,
|
|
121
125
|
hypotheses, and dead ends. Caller and recovery share three no-progress attempts per
|
|
122
126
|
exact causal fingerprint. Count only corrections whose recheck preserves the same
|
|
@@ -95,7 +95,9 @@ live foreign session releases the retained claim and stops the dispatch, per
|
|
|
95
95
|
[`agents.md`](../../devrites-lib/reference/standards/agents.md). `.devrites/**`
|
|
96
96
|
is never a task path; see [Workflow Artifact admission](../../devrites-lib/reference/standards/workflow-artifacts.md).
|
|
97
97
|
Write the exact contract, with its `Writer-safe checks:` line, to
|
|
98
|
-
`packets/<wave>.contract.md` and hand the wright that text verbatim.
|
|
98
|
+
`packets/<wave>.contract.md` and hand the wright that text verbatim. Reviewers read
|
|
99
|
+
that file, so it states each defect to fix with its anchor, never a reviewer's verdict,
|
|
100
|
+
count, or pass status ("code review is no-findings" voids the next review). Ask the host
|
|
99
101
|
for the exact writer in fresh context; a repair round on the same slice whose
|
|
100
102
|
returned wright the host can still continue goes to that wright on its existing
|
|
101
103
|
handle instead, so it does not re-read the slice from scratch. Wait, and track it
|
|
@@ -124,6 +124,10 @@ unclear boundary is underspecified: return `Escalation` without proceeding.
|
|
|
124
124
|
loosening an assertion. A test that genuinely must change is an **Escalation**,
|
|
125
125
|
not a quiet edit. The root inspects the returned diff and dedicated test
|
|
126
126
|
analysis treats a weakened test as a Critical STOP.
|
|
127
|
+
**Scratch** for probes and copies is one fresh `mktemp -d` directory you own,
|
|
128
|
+
never a fixed name such as `/tmp/x`: writing a path you did not create is an
|
|
129
|
+
unproven overwrite and stops the run for the owner. Edit allowlisted files with
|
|
130
|
+
the edit tool; a blocked edit is a gap to report, never routed around.
|
|
127
131
|
For non-trivial failure, invoke `devrites-debug-recovery` with the exact error,
|
|
128
132
|
hypotheses, and dead ends. Caller and recovery share three no-progress attempts per
|
|
129
133
|
exact causal fingerprint. Count only corrections whose recheck preserves the same
|
|
@@ -95,7 +95,9 @@ live foreign session releases the retained claim and stops the dispatch, per
|
|
|
95
95
|
[`agents.md`](../../devrites-lib/reference/standards/agents.md). `.devrites/**`
|
|
96
96
|
is never a task path; see [Workflow Artifact admission](../../devrites-lib/reference/standards/workflow-artifacts.md).
|
|
97
97
|
Write the exact contract, with its `Writer-safe checks:` line, to
|
|
98
|
-
`packets/<wave>.contract.md` and hand the wright that text verbatim.
|
|
98
|
+
`packets/<wave>.contract.md` and hand the wright that text verbatim. Reviewers read
|
|
99
|
+
that file, so it states each defect to fix with its anchor, never a reviewer's verdict,
|
|
100
|
+
count, or pass status ("code review is no-findings" voids the next review). Ask the host
|
|
99
101
|
for the exact writer in fresh context; a repair round on the same slice whose
|
|
100
102
|
returned wright the host can still continue goes to that wright on its existing
|
|
101
103
|
handle instead, so it does not re-read the slice from scratch. Wait, and track it
|
|
@@ -117,6 +117,10 @@ unclear boundary is underspecified: return `Escalation` without proceeding.
|
|
|
117
117
|
loosening an assertion. A test that genuinely must change is an **Escalation**,
|
|
118
118
|
not a quiet edit. The root inspects the returned diff and dedicated test
|
|
119
119
|
analysis treats a weakened test as a Critical STOP.
|
|
120
|
+
**Scratch** for probes and copies is one fresh `mktemp -d` directory you own,
|
|
121
|
+
never a fixed name such as `/tmp/x`: writing a path you did not create is an
|
|
122
|
+
unproven overwrite and stops the run for the owner. Edit allowlisted files with
|
|
123
|
+
the edit tool; a blocked edit is a gap to report, never routed around.
|
|
120
124
|
For non-trivial failure, invoke `devrites-debug-recovery` with the exact error,
|
|
121
125
|
hypotheses, and dead ends. Caller and recovery share three no-progress attempts per
|
|
122
126
|
exact causal fingerprint. Count only corrections whose recheck preserves the same
|
|
@@ -95,7 +95,9 @@ live foreign session releases the retained claim and stops the dispatch, per
|
|
|
95
95
|
[`agents.md`](skill://devrites-lib/reference/standards/agents.md). `.devrites/**`
|
|
96
96
|
is never a task path; see [Workflow Artifact admission](skill://devrites-lib/reference/standards/workflow-artifacts.md).
|
|
97
97
|
Write the exact contract, with its `Writer-safe checks:` line, to
|
|
98
|
-
`packets/<wave>.contract.md` and hand the wright that text verbatim.
|
|
98
|
+
`packets/<wave>.contract.md` and hand the wright that text verbatim. Reviewers read
|
|
99
|
+
that file, so it states each defect to fix with its anchor, never a reviewer's verdict,
|
|
100
|
+
count, or pass status ("code review is no-findings" voids the next review). Ask the host
|
|
99
101
|
for the exact writer in fresh context; a repair round on the same slice whose
|
|
100
102
|
returned wright the host can still continue goes to that wright on its existing
|
|
101
103
|
handle instead, so it does not re-read the slice from scratch. Wait, and track it
|
|
@@ -118,6 +118,10 @@ unclear boundary is underspecified: return `Escalation` without proceeding.
|
|
|
118
118
|
loosening an assertion. A test that genuinely must change is an **Escalation**,
|
|
119
119
|
not a quiet edit. The root inspects the returned diff and dedicated test
|
|
120
120
|
analysis treats a weakened test as a Critical STOP.
|
|
121
|
+
**Scratch** for probes and copies is one fresh `mktemp -d` directory you own,
|
|
122
|
+
never a fixed name such as `/tmp/x`: writing a path you did not create is an
|
|
123
|
+
unproven overwrite and stops the run for the owner. Edit allowlisted files with
|
|
124
|
+
the edit tool; a blocked edit is a gap to report, never routed around.
|
|
121
125
|
For non-trivial failure, invoke `devrites-debug-recovery` with the exact error,
|
|
122
126
|
hypotheses, and dead ends. Caller and recovery share three no-progress attempts per
|
|
123
127
|
exact causal fingerprint. Count only corrections whose recheck preserves the same
|
|
@@ -95,7 +95,9 @@ live foreign session releases the retained claim and stops the dispatch, per
|
|
|
95
95
|
[`agents.md`](../../devrites-lib/reference/standards/agents.md). `.devrites/**`
|
|
96
96
|
is never a task path; see [Workflow Artifact admission](../../devrites-lib/reference/standards/workflow-artifacts.md).
|
|
97
97
|
Write the exact contract, with its `Writer-safe checks:` line, to
|
|
98
|
-
`packets/<wave>.contract.md` and hand the wright that text verbatim.
|
|
98
|
+
`packets/<wave>.contract.md` and hand the wright that text verbatim. Reviewers read
|
|
99
|
+
that file, so it states each defect to fix with its anchor, never a reviewer's verdict,
|
|
100
|
+
count, or pass status ("code review is no-findings" voids the next review). Ask the host
|
|
99
101
|
for the exact writer in fresh context; a repair round on the same slice whose
|
|
100
102
|
returned wright the host can still continue goes to that wright on its existing
|
|
101
103
|
handle instead, so it does not re-read the slice from scratch. Wait, and track it
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devrites",
|
|
3
|
-
"version": "6.4.
|
|
3
|
+
"version": "6.4.3",
|
|
4
4
|
"description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code, Codex, omp, pi, and Devin CLI",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"homepage": "https://github.com/ViktorsBaikers/DevRites#readme",
|