@blamejs/exceptd-skills 0.10.3 → 0.11.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,88 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.11.0 — 2026-05-12
4
+
5
+ **Minor: architectural CLI redesign — 21 verbs collapsed to 11. Plus operator-reported items 31-46.**
6
+
7
+ ### New canonical surface
8
+
9
+ | New verb | Replaces |
10
+ |---|---|
11
+ | `brief [playbook]` | plan + govern + direct + look |
12
+ | `run [playbook]` | run + ingest (unchanged but with flat submission shape) |
13
+ | `ai-run <playbook>` | new — JSONL streaming variant for AI conversational flow |
14
+ | `attest <subverb> <sid>` | reattest + list-attestations (now `attest diff` + `attest list`) |
15
+ | `discover` | scan + dispatch (recommends playbooks based on cwd) |
16
+ | `doctor` | currency + verify + validate-cves + validate-rfcs + signing-status |
17
+ | `ci` | new — one-shot CI gate |
18
+ | `ask "<question>"` | new — plain-English routing to playbook(s) |
19
+ | `lint <playbook> <evidence>` | new — pre-flight submission shape check |
20
+ | `verify-attestation <sid>` | alias for `attest verify` |
21
+ | `run-all` | alias for `run --all` |
22
+
23
+ `exceptd` with no args now prints a welcome with two ways to start (`discover` / `ask`) plus common starting playbooks for code / Linux / AI service contexts.
24
+
25
+ ### Default output flip
26
+
27
+ Old default was JSON one-line; `--pretty` for humans. Reads weird for the operator audience. v0.11.0 flips:
28
+
29
+ - **Default: human-readable** (5-10 line summary per phase) for `discover` / `doctor` / `ci` / others.
30
+ - `--json` for machine consumption.
31
+ - `--json --pretty` for indented JSON.
32
+
33
+ Seven-phase verbs (`brief` / `run`) still emit JSON by default since their consumers are predominantly AI assistants and CI pipelines — switching them would break every existing script.
34
+
35
+ ### Flat submission shape
36
+
37
+ The runner now accepts a flatter submission shape — one row per observation, indicator inline:
38
+
39
+ ```json
40
+ {
41
+ "observations": {
42
+ "env-files": { "captured": true, "value": "none tracked", "indicator": "env-file-leak", "result": "no_hit" },
43
+ "repo-context": "ok"
44
+ },
45
+ "verdict": { "theater": "actual_security", "classification": "clean", "blast_radius": 0 }
46
+ }
47
+ ```
48
+
49
+ Nested v0.10.x shape (`artifacts` / `signal_overrides` / `signals` / `precondition_checks`) still works — the runner normalizes either shape internally.
50
+
51
+ ### Smart precondition auto-detect
52
+
53
+ Mechanically-answerable preconditions (`host.platform == 'linux'`, `cwd_readable`, `agent_has_command('uname')`) are now resolved by the runner itself. The AI only declares preconditions that require intent ("operator authorized this scan"). Reduces evidence-JSON friction by ~80% for typical runs.
54
+
55
+ ### Attestation root relocated
56
+
57
+ Default attestation root moved from cwd-relative `.exceptd/attestations/` to `~/.exceptd/attestations/<repo-or-host-tag>/`. Repo tag is derived from `git config --get remote.origin.url` + branch when in a git repo, else `host:<hostname>`. Means `attest list` works regardless of which directory you happened to run from.
58
+
59
+ Override via:
60
+ - `--attestation-root <path>` flag
61
+ - `EXCEPTD_HOME` env var (uses `$EXCEPTD_HOME/attestations/`)
62
+ - Legacy cwd-relative `.exceptd/` still scanned by `attest list` / `findSessionDir` so prior data isn't orphaned.
63
+
64
+ ### Bug fixes (operator-reported items 31-46)
65
+
66
+ - **#31 / #41 session-id collision** — Pre-0.11.0 a `--session-id` collision silently overwrote the prior attestation (data loss + tamper-evidence violation). Now refuses with exit 3 by default; `--force-overwrite` allows replacement and persists `prior_evidence_hash` + `prior_captured_at` so the audit chain survives.
67
+ - **#32 `--mode` validation** — was silently accepting any string. Now validates against `[self_service, authorized_pentest, ir_response, ctf, research, compliance_audit]`.
68
+ - **#33 `--session-key` hex validation** — was silently accepting any string. Now requires hex (0-9, a-f) and a minimum length of 16.
69
+ - **#34 reattest no artifact diff** — `attest diff <sid> --against <other-sid>` (or `reattest` default replay) now emits per-artifact diff: `{added, removed, changed, unchanged_count}` with value previews. Per-signal-override diff also included.
70
+ - **#35 validate-cves crash** — `sources/validators/` was missing from package.json `files` allowlist. Fixed in v0.10.3; still re-tested in v0.11.0.
71
+ - **#36 unsigned attestation warning** — Runs without `.keys/private.pem` now emit one stderr warning per process: "attestation will be written UNSIGNED — enable Ed25519 signing: node lib/sign.js generate-keypair". Suppress with `EXCEPTD_UNSIGNED_WARNED=1`.
72
+
73
+ ### Feature additions (operator items)
74
+
75
+ - **#38 `lint <playbook> <evidence>`** — Pre-flight check: detects missing required artifacts, unknown signal keys, unsupplied preconditions. Operators iterate on submission JSON before paying the phase-4-7 cost.
76
+ - **#39 `run --format summary`** — 5-line digest emit format for CI workflows (verdict + RWEP + blast + remediation).
77
+ - **#43 reattest cross-session compare** — `attest diff <a-sid> --against <b-sid>` now compares two sessions side-by-side instead of always replaying the same submission.
78
+ - **#46 plan / brief description always present** — Directive entries in plan output now always include a `description` field (falls back through `directive.description` → playbook `direct.threat_context` first sentence → `domain.name`).
79
+
80
+ ### Deprecation
81
+
82
+ v0.10.x verbs (`plan` / `govern` / `direct` / `look` / `ingest` / `reattest` / `list-attestations` / `scan` / `dispatch` / `currency` / `verify` / `validate-cves` / `validate-rfcs` / `watchlist` / `prefetch` / `build-indexes`) still work but emit a one-time deprecation banner per process pointing at the v0.11.0 replacement. Removed in v0.12.
83
+
84
+ Suppress the deprecation banner: `EXCEPTD_DEPRECATION_SHOWN=1`.
85
+
3
86
  ## 0.10.3 — 2026-05-12
4
87
 
5
88
  **Patch: 14 operator-reported items — 5 bugs + 9 features.**