paqad-ai 1.48.0 → 1.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,70 @@
1
1
  # paqad-ai
2
2
 
3
+ ## 1.49.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 93bdd54: Stage-Spine 09 (#324): record and consume the lane — scale process depth to risk.
8
+
9
+ paqad's deterministic classify→route→lane engine was fully built but never invoked
10
+ in a live session, so every change (a one-line typo or an auth migration) paid the
11
+ same full ceremony and the ledger's `lane` was always null. This wires the existing
12
+ engine into the prompt seam and makes the lane real:
13
+
14
+ - The prompt seam runs the deterministic classifier + router on the prompt text,
15
+ stashes the chosen lane, and records it on the change's open ledger row (no LLM
16
+ call added — path/prompt signals only).
17
+ - The pre-code gate scales the specification requirement to the lane: the **fast**
18
+ lane relaxes it (planning-only) while **graduated/full** keep the frozen-spec
19
+ requirement. A null lane fails safe to full.
20
+ - A new optional `sensitivity: high` per module in `module-map.yml` floors any change
21
+ touching a sensitive path back to the full lane — a cheap, deterministic risk floor.
22
+ - The completion backstop consumes the recorded lane instead of a hardcoded `'full'`,
23
+ so a small change is no longer forced through the heaviest quality measurement set.
24
+
25
+ Enforcement is tiered by host (hard-block on Claude Code; record-only on Codex/Gemini;
26
+ prompt-followed on advisory hosts).
27
+
28
+ - 93bdd54: Stage-Spine 10 (#325): one end-of-change paqad receipt — surface the verdict, cut the noise.
29
+
30
+ paqad's most valuable narration moment (the final verdict) had no reliable visible
31
+ surface and didn't use the contract's own words, while the cheapest moments (per-stage
32
+ boundaries) were spoken twice. This inverts the cadence:
33
+
34
+ - The trust verdict now speaks the contract vocabulary — `Safe to merge` /
35
+ `Needs your attention` / `Inconclusive` with the fixed status glyphs, led by the
36
+ `▸ paqad` frame — consuming `paqad-voice.ts` (fulfilling its single-source claim).
37
+ - A new end-of-change **receipt** composes the verdict headline with one line per stage,
38
+ each carrying honest provenance: a stage that was only marked (no artifact, or a
39
+ near-zero duration) reads 🟡 "marked (no recorded work)", never 🟢 "done".
40
+ - The receipt is emitted as a visible `{systemMessage}` on the Claude completion hook
41
+ (was buried on stdout); the git/CI backstop keeps plain text.
42
+ - The duplicated per-marker END narration line is muted (the ledger write is unchanged —
43
+ only the second spoken line is dropped).
44
+ - The generated narration contract now states, per host, who narrates: Claude Code's
45
+ hooks speak for you, but on Codex/Gemini the record hook is silent so the model must
46
+ narrate its own markers — it no longer claims hook-driven ledger narration there.
47
+
48
+ - 93bdd54: Stage-Spine 11 (#326): truth tooling — `paqad-ai config effective` and a real `decision` CLI verb.
49
+
50
+ Two small commands that make the framework honest and self-explaining:
51
+
52
+ - **`paqad-ai config effective`** prints, per knob, the value that actually binds, the
53
+ surface it came from (env → local `.paqad/.config` → tracked `configs/.config.*` →
54
+ default), and the gate that consumes it. A knob shown `consumed by: NOTHING` is a
55
+ placebo — a setting a team can change with no effect. The scan flags 12 verified
56
+ placebos (the strictness/escalation/decision-threshold/research knobs). `rule_compliance`
57
+ and `stages_mode` are shown through their real floored resolvers so the yaml-as-real-input
58
+ truth (#319) is visible. Strictly read-only.
59
+ - **`paqad-ai decision create|resolve|list`** is a real, install-resolved CLI verb for the
60
+ Decision Pause Contract, replacing the `node runtime/base/skills/decision/scripts/*.mjs`
61
+ path the contract named — which ENOENTs in a real onboarded project (the scripts only
62
+ exist in the dev repo). It wraps the existing engine (`createPendingDecision` /
63
+ `resolvePendingDecision` — same ULID mint, same packet format, no fork), validates the
64
+ category with a nearest-match suggestion, supports `--other "<text>"` write-ins on
65
+ resolve, and lists pending/resolved packets. The generated Decision Pause Contract now
66
+ names `npx paqad-ai decision …`.
67
+
3
68
  ## 1.48.0
4
69
 
5
70
  ### Minor Changes