sibyl-system 1.2.2 → 1.3.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/README.md +32 -2
- package/dist/cli.js +356 -187
- package/dist/index.js +568 -174
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -164,6 +164,28 @@ Plainly stated:
|
|
|
164
164
|
0-confidence REJECT ballot with reason `verdict-unparseable: …`.
|
|
165
165
|
- There is no lenient mode, by design.
|
|
166
166
|
|
|
167
|
+
## Ballot-integrity laws (W1–W3, added 2026-10-05 after the campaign postmortems)
|
|
168
|
+
|
|
169
|
+
- **Convener recusal (W1).** Every consult/swarm/review run resolves the
|
|
170
|
+
convening execution chain through the engine's own session store
|
|
171
|
+
(`session.get` parent links — never a self-report) and scans it for drafting
|
|
172
|
+
evidence of the artifact (write/edit parts targeting it, or content matches).
|
|
173
|
+
A kinship hit stamps the run `independence=NOT-INDEPENDENT`: the ballot is
|
|
174
|
+
preserved as data but is not in any effective path. A chain that cannot be
|
|
175
|
+
read stamps `UNVERIFIABLE` — unreadable is never silently clean.
|
|
176
|
+
- **Absence is a disability (W2).** Before any tally is honored, every declared
|
|
177
|
+
voter/worker must have left a terminal row (`ok|error|timeout` + detail) in
|
|
178
|
+
the run's `TERMINALS.txt`. A declared seat without its row is counted
|
|
179
|
+
`dead-without-record=N` on the first receipt line and forces `CANNOT_ANSWER` —
|
|
180
|
+
never folded into an approve or a reject. A worker session ending with empty
|
|
181
|
+
content is a failure, not a done ballot.
|
|
182
|
+
- **The ruler rides the ballot (W3).** Each terminal record embeds
|
|
183
|
+
`instrument: {rulesHash, components}` — the sha256 of every persona prompt /
|
|
184
|
+
criteria text the build actually sends (councilors, architect, judge, repair
|
|
185
|
+
grammar, chamber roles). `rulesHash` flips with any ruler edit, so
|
|
186
|
+
"re-evaluate under the new rules" is reproducible and comparable; the
|
|
187
|
+
`rules=<12hex>` label rides the receipt face and `sibyl_status` lines.
|
|
188
|
+
|
|
167
189
|
## Security notes
|
|
168
190
|
|
|
169
191
|
- Consult/swarm send the artifact text to your configured model pool providers.
|
|
@@ -198,7 +220,15 @@ index.ts plugin entry: parse options → share one RunStore + client
|
|
|
198
220
|
│ transcript/disk signal grading, canary veto
|
|
199
221
|
├── state/ RunStore + v1.1 chamber records: EOF-append ledger (A5),
|
|
200
222
|
│ face-last regeneration, CHECKSUMS + spotcheck (A4)
|
|
201
|
-
├── personas.ts registry: 3 councilors + ARCHITECT
|
|
223
|
+
├── personas.ts registry: 3 councilors + ARCHITECT + judge/repair texts,
|
|
224
|
+
│ model slots — the single source the W3 face hashes
|
|
225
|
+
├── terminal.ts W2 terminal-row grammar (ok|error|timeout), parse + the
|
|
226
|
+
│ dead-without-record declared-minus-recorded diff
|
|
227
|
+
├── instrument.ts W3 ruler face: sha256 set of the live prompt/criteria
|
|
228
|
+
│ texts + deterministic rulesHash fold
|
|
229
|
+
├── independence.ts W1 convener-recusal: engine-store chain walk +
|
|
230
|
+
│ drafting-evidence scan (INDEPENDENT / NOT-INDEPENDENT /
|
|
231
|
+
│ UNVERIFIABLE, fail-closed on unreadable)
|
|
202
232
|
├── options.ts zod v4 schema + parseOptions (never throws)
|
|
203
233
|
├── cli.ts v1.1 sibyl-chamber bin: run | status | spotcheck | kill
|
|
204
234
|
└── tools/ sibyl_consult / sibyl_swarm / sibyl_status / sibyl_review
|
|
@@ -250,4 +280,4 @@ MIT
|
|
|
250
280
|
|
|
251
281
|
## Release wheel
|
|
252
282
|
|
|
253
|
-
Tags v* require a packet receipt (docs/release/<ver>.md with a real `gate: PASS` line) and a lease; after cloning run `scripts/install-hooks.sh` — hooks are per-clone and ship empty.
|
|
283
|
+
Tags v* require a packet receipt (docs/release/<ver>.md with a real `gate: PASS` line) and a lease; after cloning run `scripts/install-hooks.sh` — hooks are per-clone and ship empty. **W4 (2026-10-05):** the hook reads the receipt AND `package.json`'s version exclusively from the pushed tag's **object body** (`git show <oid>:<path>`); working-tree reads are forbidden — the tag must carry its own paperwork, and the in-tag version must equal the tag name (ghost-version class killed). Regression-locked in `test/hook-prepush.test.ts` (ref lines fed via stdin).
|