devrites 4.0.0 → 4.0.2
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 +15 -0
- package/README.md +23 -13
- package/SECURITY.md +9 -8
- package/docs/adr/0024-native-policy-offline-installer-boundary.md +1 -1
- package/docs/adr/0028-self-contained-engine-update.md +66 -0
- package/docs/adr/README.md +2 -1
- package/docs/architecture.md +17 -12
- package/docs/cli.md +31 -12
- package/docs/command-map.md +6 -4
- package/docs/engine/commands.md +14 -12
- package/docs/release.md +7 -7
- package/engine/internal/hostpack/hostpack.go +7 -0
- package/engine/internal/install/install.go +131 -9
- package/engine/internal/install/install_test.go +239 -0
- package/engine/internal/release/release.go +411 -0
- package/engine/internal/release/release_test.go +167 -0
- package/engine/tests/meta_test.go +6 -6
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
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
|
+
## [4.0.2](https://github.com/ViktorsBaikers/DevRites/compare/v4.0.1...v4.0.2) (2026-08-05)
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
* **deps:** resolve blocking npm audit advisories ([5181daa](https://github.com/ViktorsBaikers/DevRites/commit/5181daa5e93e6edc4a862caa7db5bc11b40c978c))
|
|
10
|
+
* **installer:** remove deprecated tar type check ([1ed3e0d](https://github.com/ViktorsBaikers/DevRites/commit/1ed3e0d600fc48ae020e958ea06d6cb945031994))
|
|
11
|
+
* **installer:** restore self-contained engine updates ([3d851c6](https://github.com/ViktorsBaikers/DevRites/commit/3d851c67e4d740d793695e1f7caa30fddc8d832b))
|
|
12
|
+
* **tests:** avoid flaky unknown-command pipe ([da584aa](https://github.com/ViktorsBaikers/DevRites/commit/da584aaf0d4195ed57ef6d1b21789f00ac81e390))
|
|
13
|
+
|
|
14
|
+
## [4.0.1](https://github.com/ViktorsBaikers/DevRites/compare/v4.0.0...v4.0.1) (2026-08-03)
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
* **installer:** clean legacy Codex hooks during v4 updates ([4908945](https://github.com/ViktorsBaikers/DevRites/commit/49089453ade730a9fede6c9fade180457d8ce2f9))
|
|
19
|
+
|
|
5
20
|
## [4.0.0](https://github.com/ViktorsBaikers/DevRites/compare/v3.2.28...v4.0.0) (2026-08-03)
|
|
6
21
|
|
|
7
22
|
### ⚠ BREAKING CHANGES
|
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ project-conventional push, tag, or PR action, and archive the workspace.
|
|
|
28
28
|
Unattended runs may create local WIP checkpoint commits along the way, but they
|
|
29
29
|
remain local unless Ship's disclosed plan includes an approved remote action.
|
|
30
30
|
|
|
31
|
-
**Status:** [`v4.0.
|
|
31
|
+
**Status:** [`v4.0.2`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v4.0.2): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
|
|
32
32
|
|
|
33
33
|
This is the latest published release; `main` may contain unreleased work.
|
|
34
34
|
|
|
@@ -105,8 +105,12 @@ Some work needs a different route:
|
|
|
105
105
|
cursor form alone never triggers repair; it is not a lifecycle phase.
|
|
106
106
|
- [`/rite`](pack/.claude/skills/rite/SKILL.md) shows the command menu.
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
Run `devrites-engine update` from an installed project to acquire the latest
|
|
109
|
+
stable release and update both the engine and pack. `npx devrites@latest update`
|
|
110
|
+
and the verified release `install.sh` remain equivalent adapter routes. If an
|
|
111
|
+
older engine instead reports `missing codex/hooks.json` or asks for
|
|
112
|
+
`--source-dir`, use the npm or verified shell route once to cross to a release
|
|
113
|
+
with the self-contained updater.
|
|
110
114
|
`/rite-upgrade` is the separate native, preservation-first route for reconciling
|
|
111
115
|
an unfinished workspace. It proves a current-contract defect before routing
|
|
112
116
|
Clarify, Plan repair, Converge, Vet, Prove, Polish, Review, or Seal; it never
|
|
@@ -244,6 +248,10 @@ npx devrites@latest update
|
|
|
244
248
|
npx devrites@latest update --check
|
|
245
249
|
npx devrites@latest uninstall
|
|
246
250
|
npx devrites@latest uninstall --keep-binary
|
|
251
|
+
|
|
252
|
+
# The installed engine can update itself and the project pack directly
|
|
253
|
+
devrites-engine update
|
|
254
|
+
devrites-engine update --check
|
|
247
255
|
```
|
|
248
256
|
|
|
249
257
|
Useful install flags:
|
|
@@ -331,11 +339,12 @@ path must report that version in a new process. The installer keeps a backup in
|
|
|
331
339
|
the same directory until the second check passes. On failure, it restores the
|
|
332
340
|
previous binary or removes a bad first install.
|
|
333
341
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
342
|
+
Direct `devrites-engine update` resolves the latest stable release, acquires its
|
|
343
|
+
bundle and platform binary, and hands local paths to the downloaded engine. The
|
|
344
|
+
candidate engine therefore validates its own payload before replacing the
|
|
345
|
+
installed pack and binary. npm and Bash may supply the same local candidate
|
|
346
|
+
paths directly. `update --check` resolves and compares the latest version
|
|
347
|
+
without downloading release assets.
|
|
339
348
|
|
|
340
349
|
Network acquisition resolves an exact SemVer release, permits HTTPS at every
|
|
341
350
|
redirect hop, requires an exact-filename SHA-256 sidecar, and uses private
|
|
@@ -407,11 +416,12 @@ configured engine, download the exact release binary with its mandatory checksum
|
|
|
407
416
|
build a temporary engine from package-local Go source, or use `devrites-engine`
|
|
408
417
|
on `PATH`. Remote fetches are HTTPS-only and bounded. Use
|
|
409
418
|
`--no-binary` or `DEVRITES_NO_BINARY=1` to avoid keeping a shared binary outside
|
|
410
|
-
the project. npm
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
Git. Retained safety operations such
|
|
414
|
-
read the exact Git index and staged blobs
|
|
419
|
+
the project. npm, Bash, and direct engine update all require checksummed release
|
|
420
|
+
assets. Engine network access is isolated to bounded latest-release acquisition;
|
|
421
|
+
the downloaded engine performs the local manifest-owned update. Install, update,
|
|
422
|
+
and uninstall do not inspect target-project Git. Retained safety operations such
|
|
423
|
+
as `secret-scan --staged` intentionally read the exact Git index and staged blobs
|
|
424
|
+
they validate.
|
|
415
425
|
|
|
416
426
|
Production Git subprocesses remove repository/config/object/ref/pathspec
|
|
417
427
|
retargeting `GIT_*` variables while preserving unrelated Git environment. Seal
|
package/SECURITY.md
CHANGED
|
@@ -119,8 +119,8 @@ and `.codex/config.toml` without replacing unrelated user settings. The shared
|
|
|
119
119
|
`devrites-engine` executable is the only allowed artifact outside the project.
|
|
120
120
|
It is installed to `DEVRITES_BIN_DIR`, a writable `~/.local/bin`, or a writable
|
|
121
121
|
`/usr/local/bin`; `--no-binary` / `DEVRITES_NO_BINARY=1` skips it. The bootstrap
|
|
122
|
-
|
|
123
|
-
`sudo` or
|
|
122
|
+
and direct updater may fetch the release bundle and checksummed engine assets.
|
|
123
|
+
They never invoke `sudo` or edit shell startup files.
|
|
124
124
|
|
|
125
125
|
The documented Node-free boundary downloads the release-owned `install.sh` and
|
|
126
126
|
its exact-name sidecar before execution; mutable default-branch scripts are not
|
|
@@ -133,14 +133,15 @@ exact-filename SHA-256 sidecar. Every redirect hop must remain HTTPS, private
|
|
|
133
133
|
temporary-directory creation must succeed, and unchecked raw/source/default-
|
|
134
134
|
branch fallbacks are absent. Representative in-stream ceilings are 1 MiB for
|
|
135
135
|
release metadata, 4 KiB for a sidecar, and 64 MiB for an archive or binary, with
|
|
136
|
-
at most five Node redirect hops. Archive
|
|
137
|
-
paths
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
checksum, or
|
|
136
|
+
at most five Node or ten Go redirect hops. Archive handling rejects unsafe types
|
|
137
|
+
and paths, permits at most 10,000 members and 256 MiB regular files across all
|
|
138
|
+
routes, and applies stricter route-specific count, file, and expanded-byte caps
|
|
139
|
+
where configured. Failures retain only safe tag/asset and status, redirect,
|
|
140
|
+
size, checksum, or archive context, never response bodies. The adversarial
|
|
141
|
+
contract is exercised by `engine/internal/release/release_test.go`,
|
|
141
142
|
`tests/bootstrap-security-test.sh`, `tests/npx-pack-smoke.sh`, and
|
|
142
143
|
`tests/release-tarball-test.sh`; [ADR-0026](docs/adr/0026-content-bound-proof-and-bounded-inputs.md)
|
|
143
|
-
|
|
144
|
+
and [ADR-0028](docs/adr/0028-self-contained-engine-update.md) own the rationale.
|
|
144
145
|
|
|
145
146
|
### npx install path
|
|
146
147
|
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# ADR-0028: Self-contained engine update
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted
|
|
4
|
+
- **Date:** 2026-08-03
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
|
|
8
|
+
ADR-0024 moved release acquisition out of the Go engine. That made update
|
|
9
|
+
application deterministic, but it also changed the established public contract:
|
|
10
|
+
running `devrites-engine update` inside an installed project no longer updated
|
|
11
|
+
DevRites. It instead required undocumented knowledge of a separately acquired
|
|
12
|
+
release source and generated payload.
|
|
13
|
+
|
|
14
|
+
The split also left old engines responsible for validating new payloads before
|
|
15
|
+
installing the new engine. A payload-schema change could therefore prevent the
|
|
16
|
+
upgrade that would have installed the compatible validator.
|
|
17
|
+
|
|
18
|
+
## Decision
|
|
19
|
+
|
|
20
|
+
- `devrites-engine update` with no local-candidate flags resolves the latest
|
|
21
|
+
stable GitHub release, downloads its release bundle and platform engine, and
|
|
22
|
+
verifies both against mandatory exact-filename SHA-256 sidecars.
|
|
23
|
+
- The downloaded engine performs the update from the extracted local source and
|
|
24
|
+
payload. The running old engine does not interpret the new payload first.
|
|
25
|
+
- `--check` resolves and compares the latest version without downloading release
|
|
26
|
+
assets. An already-current update also avoids asset downloads unless `--force`
|
|
27
|
+
is explicit.
|
|
28
|
+
- `--source-dir` plus `--payload-dir` remains the local update path used by npm,
|
|
29
|
+
shell adapters, source checkouts, and tests. A local `--check` needs only the
|
|
30
|
+
source version; applying the candidate requires both paths.
|
|
31
|
+
- Release acquisition is isolated in `engine/internal/release`. It accepts exact
|
|
32
|
+
SemVer tags and repository names, bounds responses and extraction, permits
|
|
33
|
+
HTTPS redirects only, rejects unsafe archive entries, and has no raw,
|
|
34
|
+
default-branch, or unchecked source-archive fallback.
|
|
35
|
+
- The engine remains model-free. Network imports are allowed only in the release
|
|
36
|
+
acquisition package; workspace policy, state, proof, and installation packages
|
|
37
|
+
remain network-free.
|
|
38
|
+
- `--to` and `--pre` remain unsupported. The public command updates to the latest
|
|
39
|
+
stable release.
|
|
40
|
+
|
|
41
|
+
This supersedes ADR-0024 only where it requires engine update to be offline and
|
|
42
|
+
caller-supplied. ADR-0024's local install/uninstall behavior and other policy
|
|
43
|
+
boundaries remain in force.
|
|
44
|
+
|
|
45
|
+
## Alternatives considered
|
|
46
|
+
|
|
47
|
+
| Option | Why not |
|
|
48
|
+
|---|---|
|
|
49
|
+
| Keep direct engine update local-only | Breaks the established v3 command contract and makes the normal command unusable without adapter internals. |
|
|
50
|
+
| Download the bundle but apply it with the running engine | Repeats the cross-version payload-schema failure: the old validator can reject the release that contains its replacement. |
|
|
51
|
+
| Shell out to npm or Bash | Adds a runtime dependency and weakens Windows portability when the engine can acquire the same verified release directly. |
|
|
52
|
+
| Restore arbitrary tag and prerelease selectors | The requirement is latest-stable update; extra selection policy is unnecessary. |
|
|
53
|
+
|
|
54
|
+
## Consequences
|
|
55
|
+
|
|
56
|
+
Direct engine updates again work from an installed project. npm and shell remain
|
|
57
|
+
supported acquisition adapters and continue using the local-candidate path.
|
|
58
|
+
Release networking is duplicated across entrypoints, but the public binary no
|
|
59
|
+
longer depends on another runtime, and the network boundary remains small and
|
|
60
|
+
guarded. Major upgrades hand off before candidate validation, so the candidate's
|
|
61
|
+
own engine owns its payload schema.
|
|
62
|
+
|
|
63
|
+
Regression coverage lives in
|
|
64
|
+
`engine/internal/install.TestUpdateAcquiresLatestReleaseAndHandsOff`,
|
|
65
|
+
`engine/internal/release`, and
|
|
66
|
+
`engine/tests.TestNetworkImportsStayInReleaseBoundary`.
|
package/docs/adr/README.md
CHANGED
|
@@ -69,7 +69,8 @@ architecture; per-feature `decisions.md` files stay scoped to that feature.
|
|
|
69
69
|
| [0021](0021-observable-workspace-compatibility.md) | Observable and reversible workspace compatibility | Superseded by 0022 | historical |
|
|
70
70
|
| [0022](0022-native-orchestration-thin-engine.md) | Native orchestration with a thin deterministic engine | Accepted in part; snapshot/JSON-output clauses superseded by 0023; retained policy-command/install clauses narrowed by 0024 | `engine/root_routing_test.go`, `engine/internal/gate/gate_test.go`, `engine/internal/lib/cursor_compat_test.go`, `tests/native-orchestration-contract-test.sh` |
|
|
71
71
|
| [0023](0023-native-workspace-reads-line-output.md) | Native workspace reads and line-oriented engine output | Accepted in part; AFK/recovery/doctor retention superseded by 0024 | `engine/root_routing_test.go`, `engine/internal/gate/gate_test.go`, `tests/native-orchestration-contract-test.sh`, `tests/npx-pack-smoke.sh` |
|
|
72
|
-
| [0024](0024-native-policy-offline-installer-boundary.md) | Native policy and offline installer boundary | Accepted | `tests/native-orchestration-contract-test.sh`, `tests/phase-gate-routing-test.sh`, `tests/install-smoke.sh`, `tests/host-artifacts-test.sh` |
|
|
72
|
+
| [0024](0024-native-policy-offline-installer-boundary.md) | Native policy and offline installer boundary | Accepted in part; offline engine-update clause superseded by 0028 | `tests/native-orchestration-contract-test.sh`, `tests/phase-gate-routing-test.sh`, `tests/install-smoke.sh`, `tests/host-artifacts-test.sh` |
|
|
73
73
|
| [0025](0025-evidence-gated-workspace-upgrades.md) | Evidence-gated semantic workspace upgrades | Accepted | `tests/phase-gate-routing-test.sh`, `tests/host-artifacts-test.sh` |
|
|
74
74
|
| [0026](0026-content-bound-proof-and-bounded-inputs.md) | Content-bound proof and bounded inputs | Accepted | `engine/internal/lib/candidate_test.go`, `engine/internal/lib/evidencefresh_test.go`, `engine/internal/gate/gate_test.go`, `engine/root_routing_test.go`, `engine/tests/parity_githelpers_test.go`, `tests/native-orchestration-contract-test.sh`, `tests/phase-gate-routing-test.sh`, `tests/install-smoke.sh`, `tests/update-smoke.sh`, `tests/npx-pack-smoke.sh`, `tests/release-tarball-test.sh` |
|
|
75
75
|
| [0027](0027-content-bound-build-readiness.md) | Content-bound build readiness | Accepted | `engine/tests/adr_0027_readiness_binding_test.go` |
|
|
76
|
+
| [0028](0028-self-contained-engine-update.md) | Self-contained engine update | Accepted | `engine/internal/install/install_test.go`, `engine/internal/release/release_test.go`, `engine/tests/meta_test.go` |
|
package/docs/architecture.md
CHANGED
|
@@ -143,20 +143,24 @@ re-read, qid allocation, Clarify cursor transitions, AFK/recovery accounting,
|
|
|
143
143
|
and read-only diagnostics. `devrites-lib` documents that boundary and links common
|
|
144
144
|
references; it does not implement an orchestration protocol.
|
|
145
145
|
|
|
146
|
-
### Why
|
|
146
|
+
### Why update acquisition is isolated from local installation
|
|
147
147
|
`engine/internal/install` validates the pre-generated host payload and implements
|
|
148
148
|
install, update, and uninstall behavior: manifest writing and pruning,
|
|
149
149
|
shared-file marker merging and removal, legacy Codex hook removal, dry-run
|
|
150
|
-
output, binary lifecycle, rollback, and install-flag replay.
|
|
151
|
-
consume only
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
150
|
+
output, binary lifecycle, rollback, and install-flag replay. Those mutations
|
|
151
|
+
consume only local source, payload, and binary candidates.
|
|
152
|
+
|
|
153
|
+
Direct `devrites-engine update` uses the separate `engine/internal/release`
|
|
154
|
+
boundary to resolve the latest stable release and acquire its checksummed bundle
|
|
155
|
+
and platform engine. It then invokes the downloaded engine with local paths, so
|
|
156
|
+
the candidate validates its own payload schema. `update --check` resolves only
|
|
157
|
+
release metadata and downloads no assets. Engine `--to` and `--pre` selectors do
|
|
158
|
+
not exist.
|
|
155
159
|
The shell entrypoints
|
|
156
160
|
(`install.sh`, `uninstall.sh`, `update.sh`) and npm entrypoint
|
|
157
|
-
(`bin/devrites.mjs`)
|
|
158
|
-
exact-release bundle or binary, then pass local paths and user flags
|
|
159
|
-
the deterministic engine operation.
|
|
161
|
+
(`bin/devrites.mjs`) remain equivalent acquisition adapters. They acquire and
|
|
162
|
+
verify the exact-release bundle or binary, then pass local paths and user flags
|
|
163
|
+
through to the deterministic engine operation. All network paths require exact SemVer,
|
|
160
164
|
HTTPS-only redirects, exact-filename SHA-256 sidecars, private temporary
|
|
161
165
|
directories, bounded transfers, and full archive preflight. They provide no
|
|
162
166
|
unchecked raw, source-archive, tag, or default-branch fallback.
|
|
@@ -406,9 +410,10 @@ contract.
|
|
|
406
410
|
- **Scope**: clarify → seal (decide) → ship (read-only preflight → type-GO →
|
|
407
411
|
commit → optional approved push/tag/PR by project convention) → close. The CI
|
|
408
412
|
pipeline stays with the project.
|
|
409
|
-
- **Install**: project-local, manifest-managed host artifacts;
|
|
410
|
-
|
|
411
|
-
shared engine binary is the only allowed global
|
|
413
|
+
- **Install**: project-local, manifest-managed host artifacts; direct update,
|
|
414
|
+
shell, or npm may acquire a verified release, local install application owns
|
|
415
|
+
mutation, and the optional shared engine binary is the only allowed global
|
|
416
|
+
artifact.
|
|
412
417
|
|
|
413
418
|
Candidate identity and bounded-input rationale are recorded in
|
|
414
419
|
[ADR-0026](adr/0026-content-bound-proof-and-bounded-inputs.md). The
|
package/docs/cli.md
CHANGED
|
@@ -34,6 +34,20 @@ migration command.
|
|
|
34
34
|
`check candidate` is additive; no existing engine command or public `/rite-*`
|
|
35
35
|
workflow was removed or renamed.
|
|
36
36
|
|
|
37
|
+
## Updates
|
|
38
|
+
|
|
39
|
+
Run `devrites-engine update` in an installed project to resolve the latest
|
|
40
|
+
stable release and update the project pack plus shared engine binary. The
|
|
41
|
+
command downloads the release bundle and platform engine, verifies both exact
|
|
42
|
+
filenames against their SHA-256 sidecars, then hands the extracted candidate to
|
|
43
|
+
the downloaded engine. This avoids asking an old engine to validate a newer
|
|
44
|
+
payload schema.
|
|
45
|
+
|
|
46
|
+
`devrites-engine update --check` resolves and compares release metadata without
|
|
47
|
+
downloading assets. `--source-dir` and `--payload-dir` remain the advanced local
|
|
48
|
+
update path for npm, shell, source-checkout, and test callers; a local `--check`
|
|
49
|
+
needs only `--source-dir`.
|
|
50
|
+
|
|
37
51
|
## npm adapter
|
|
38
52
|
|
|
39
53
|
The `npx devrites` adapter accepts `add` as an alias for `install`, `upgrade` for
|
|
@@ -41,10 +55,15 @@ The `npx devrites` adapter accepts `add` as an alias for `install`, `upgrade` fo
|
|
|
41
55
|
`devrites-engine` aliases; documentation and automation should prefer the
|
|
42
56
|
canonical command names.
|
|
43
57
|
|
|
44
|
-
Use `npx devrites update --check` to
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
58
|
+
Use `npx devrites update --check` to perform the equivalent adapter-level
|
|
59
|
+
comparison without changing the installation. Use
|
|
60
|
+
`npx devrites uninstall --keep-binary` to remove managed host artifacts while
|
|
61
|
+
retaining the shared `devrites-engine` binary.
|
|
62
|
+
|
|
63
|
+
If an older direct engine reports `missing codex/hooks.json` or asks for
|
|
64
|
+
`--source-dir`, run `npx devrites@latest update`, or use a checksum-verified
|
|
65
|
+
release `install.sh` and run `bash ./install.sh update` once to install a release
|
|
66
|
+
with the self-contained updater.
|
|
48
67
|
|
|
49
68
|
## Checks
|
|
50
69
|
|
|
@@ -121,14 +140,14 @@ selection exits `2`; a malformed/unsafe manifest or candidate mismatch prints
|
|
|
121
140
|
`DEVRITES_WORKSPACE` may select one explicit contained workspace. Mutating
|
|
122
141
|
commands refuse ambiguous, escaped, symlinked, or otherwise unsafe roots.
|
|
123
142
|
|
|
124
|
-
Install, update, and uninstall remain manifest-owned
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
143
|
+
Install, update application, and uninstall remain manifest-owned local
|
|
144
|
+
operations. Direct engine update, shell, and npm may acquire a release candidate;
|
|
145
|
+
all remote acquisition uses exact SemVer, HTTPS-only redirect hops, mandatory
|
|
146
|
+
exact-filename SHA-256 sidecars, private temporary directories, and byte/archive
|
|
147
|
+
bounds, with no unchecked raw/source/default-branch fallback. Update accepts
|
|
148
|
+
`--check` to compare the installed manifest version with the latest stable
|
|
149
|
+
release without downloading assets. Remote-selector flags such as `--to` and
|
|
150
|
+
`--pre` are unsupported.
|
|
132
151
|
`/rite-upgrade` is a native compatibility audit, not an engine migration. Its
|
|
133
152
|
read-only planner must cite a current rule and exact workspace defect; admitted
|
|
134
153
|
repairs run through the current Clarify, Plan, Converge, Vet, Prove, Polish,
|
package/docs/command-map.md
CHANGED
|
@@ -43,7 +43,7 @@ The Go surface is intentionally closed and deterministic:
|
|
|
43
43
|
| Candidate and deterministic checks | `check candidate`, `check readiness [--emit-binding]`, `check seal` | Candidate validates/hashes the strict project manifest; readiness checks phase files or emits the vetted Build-input binding; seal checks final files/open gates, that binding, then exact candidate bindings. |
|
|
44
44
|
| Atomic workspace state | `state resolve`, `state close` | Go owns answer/drop/batch resolution and transactional close. |
|
|
45
45
|
| Security | `secret-scan` | `/rite-ship`, safe hooks, or an operator scans staged blobs, stdin, or touched files. |
|
|
46
|
-
| Install/operator | `install`, `update`, `uninstall`, `version` | npm/bootstrap
|
|
46
|
+
| Install/operator | `install`, `update`, `uninstall`, `version` | Direct update acquires latest; npm/bootstrap may supply local candidates; the engine performs manifest-owned local changes. |
|
|
47
47
|
| Native policy | no engine command | Skills/root own spec grammar re-read, qid allocation, Clarify cursor edits, AFK/recovery accounting, and read-only `/rite-doctor`. |
|
|
48
48
|
|
|
49
49
|
`devrites-engine help` exhaustively lists the operational engine commands.
|
|
@@ -67,9 +67,11 @@ replacement objects disabled. `--stdin` accepts text through process stdin.
|
|
|
67
67
|
Scans cap captured input at 64 MiB and entries/findings at 4,096; findings expose
|
|
68
68
|
metadata only and source or limit errors fail closed.
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
Direct `devrites-engine update` acquires the latest exact-release pack and
|
|
71
|
+
platform binary, then hands local paths to the downloaded engine. Shell/npm may
|
|
72
|
+
perform the same acquisition before invoking the local path. `--check` compares
|
|
73
|
+
the installed version with latest release metadata without downloading assets;
|
|
74
|
+
engine release selectors are unsupported.
|
|
73
75
|
`/rite-upgrade` separately audits an older active workspace. Only a cited
|
|
74
76
|
current-contract defect may route a repair through its existing Clarify, Plan
|
|
75
77
|
repair, Converge, Vet, Prove, Polish, Review, or Seal owner.
|
package/docs/engine/commands.md
CHANGED
|
@@ -53,18 +53,20 @@ explicit root-owned native procedures. The workflow owns reproduction,
|
|
|
53
53
|
hypothesis ranking, tool selection, and routing. No replacement scripts or
|
|
54
54
|
counter artifacts are introduced.
|
|
55
55
|
|
|
56
|
-
##
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
56
|
+
## Install and update boundary
|
|
57
|
+
|
|
58
|
+
Install application and uninstall accept local source, pre-generated host
|
|
59
|
+
payload, and optional staged binary inputs. Direct `devrites-engine update`
|
|
60
|
+
selects the latest stable release, downloads its bundle and platform engine,
|
|
61
|
+
then invokes that downloaded engine with local candidate paths. Shell and npm
|
|
62
|
+
may instead acquire and pass the same local inputs. `update --check` compares
|
|
63
|
+
installed and latest release metadata without downloading assets. `--to` and
|
|
64
|
+
`--pre` are not supported engine flags.
|
|
65
|
+
|
|
66
|
+
Remote acquisition is isolated to the release boundary, exact-SemVer,
|
|
67
|
+
HTTPS-only at every redirect, bounded, and requires exact-filename SHA-256
|
|
68
|
+
sidecars. Archive validation completes during bounded extraction and unchecked
|
|
69
|
+
raw/source/default-branch fallbacks are absent.
|
|
68
70
|
|
|
69
71
|
## Secret scanning
|
|
70
72
|
|
package/docs/release.md
CHANGED
|
@@ -22,9 +22,9 @@ its payload. Package and release installs validate and copy
|
|
|
22
22
|
source checkout whose generated payload is incomplete, the shim may regenerate
|
|
23
23
|
the missing host payload before handing that local candidate to the engine. The
|
|
24
24
|
engine itself only validates and copies host payloads; it never generates them.
|
|
25
|
-
The npm entrypoint
|
|
26
|
-
release bundle or platform binary with its mandatory
|
|
27
|
-
sidecar.
|
|
25
|
+
The npm entrypoint, verified release installer, and direct engine updater acquire
|
|
26
|
+
only an exact-SemVer release bundle or platform binary with its mandatory
|
|
27
|
+
exact-filename SHA-256 sidecar.
|
|
28
28
|
Every redirect hop remains HTTPS; downloads use private temporary directories
|
|
29
29
|
and fixed in-stream byte ceilings. The bootstrap first streams archive metadata,
|
|
30
30
|
then paths, aborting the producer on a type, count, expanded-size, containment,
|
|
@@ -33,10 +33,10 @@ or path breach before extraction (at most 10,000 members, 4,096-byte paths, and
|
|
|
33
33
|
archives/binaries at 64 MiB, and the Node adapter follows at most five redirects.
|
|
34
34
|
There is no raw, source-archive, tag, or default-branch acquisition fallback;
|
|
35
35
|
exact-release guarantees begin at the checksummed release `install.sh` asset.
|
|
36
|
-
The Go
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
The Go release boundary may acquire the latest stable candidate; the downloaded
|
|
37
|
+
engine then supplies local paths to the manifest-owned update core. Engine
|
|
38
|
+
`update --check` resolves release metadata but downloads no assets. `--to` and
|
|
39
|
+
`--pre` release selection is not accepted.
|
|
40
40
|
|
|
41
41
|
`bash scripts/validate.sh` is the single repository-validation authority. It
|
|
42
42
|
performs strict recursive pack JSON parsing and render-to-temporary parity for
|
|
@@ -93,6 +93,12 @@ var CodexConfigMerge = MarkerMerge{
|
|
|
93
93
|
MarkerText: ".codex/config.toml contains the DevRites read-only-root permission profile.",
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
+
var LegacyCodexHooksMerge = ManagedMerge{
|
|
97
|
+
MarkerRel: ".claude/devrites.codex-hooks-merge",
|
|
98
|
+
TargetRel: ".codex/hooks.json",
|
|
99
|
+
DryRun: ".codex/hooks.json legacy DevRites hooks",
|
|
100
|
+
}
|
|
101
|
+
|
|
96
102
|
var managedMerges = []ManagedMerge{
|
|
97
103
|
{
|
|
98
104
|
MarkerRel: CodexAgentsMerge.MarkerRel,
|
|
@@ -113,6 +119,7 @@ var managedMerges = []ManagedMerge{
|
|
|
113
119
|
TargetRel: ClaudeSettingsMerge.TargetRel,
|
|
114
120
|
DryRun: ".claude/settings.json DevRites permissions",
|
|
115
121
|
},
|
|
122
|
+
LegacyCodexHooksMerge,
|
|
116
123
|
}
|
|
117
124
|
|
|
118
125
|
func RequiredPayload(withCodex bool) []string {
|