@antoneeo/kb-agentic-skill 1.14.0 → 1.16.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
@@ -2,6 +2,98 @@
2
2
 
3
3
  Every significant change to this skill is recorded here.
4
4
 
5
+ ## [1.16.0] - 2026-09-12
6
+
7
+ ### Changed
8
+ - **F-054: the recall verdict names every branch the descent opened.** The
9
+ descent is multi-branch by mandate (`taxonomy.md` §1: follow every parent,
10
+ open the final candidates), and the verdict vocabulary assumed exactly one
11
+ matched slug — so a mandated act had no legal way to declare its result, and
12
+ an agent facing two legitimate branches invented a shape for it. Both
13
+ node-naming verdicts now read `kb: <slug>[, <slug> …] → …`, naming every slug
14
+ opened and not only the one that answered, because which branches were read is
15
+ the part of the verdict a reader can check. **Four legal values, unchanged**:
16
+ the repair is the form, never a fifth value, and the count is pinned against
17
+ creep. Found by replaying the doctrine against a real question rather than by
18
+ reading it.
19
+
20
+ ### Fixed
21
+ - **The behavioural eval driver died on its own scenarios.** `run_behavioral.py`
22
+ read scenarios as UTF-8 and printed them to a console that, on Windows,
23
+ defaults to cp1252 — which has no mapping for `→`. The shipped scenario
24
+ `recall_descends_before_answering.md` has contained that character since 1.7.0,
25
+ so on a default Windows console that eval was un-runnable and the driver
26
+ exited before printing its own pass criteria. stdout is now reconfigured to
27
+ UTF-8 with `errors="replace"`: a console that cannot render a glyph is not a
28
+ reason to withhold the scenario.
29
+
30
+ ### Not demonstrated
31
+ - **The defect this release was opened to fix does not exist, as stated.** The
32
+ claim was that the recall's four verdicts all sit downstream of one instrument,
33
+ so a descent picking the wrong branch declares `kb: no coverage` on a corpus
34
+ that holds the answer — a false negative indistinguishable from real absence.
35
+ Two agent-level replays refuted it, including a fixture built to be hostile
36
+ (eight topics, the answering claim under `gdpr_compliance` while
37
+ `observability` was the more plausible branch): both returned the right claim,
38
+ and one ran a `grep` cross-check unprompted. A mandated text probe and a
39
+ generated claims inventory were therefore abandoned rather than shipped, and no
40
+ assertion pins them — a probe pinning what was decided against is red by
41
+ construction. Standing limit: two runs, one subject model, fixtures authored by
42
+ the session that made the claim. Record in
43
+ `ai_docs/solutions/SPIKE_kb_recall_second_instrument.md`.
44
+
45
+ ## [1.15.0] - 2026-09-12
46
+
47
+ ### Fixed
48
+ - **F-047: one row asserts one thing.** Field report: a bundled claim row
49
+ ("X, and also Y") made the checker's remedies point in opposite directions —
50
+ the collision message told the author to merge rows that assert different
51
+ things, and the state-grammar message denied a multi-successor `SUPERSEDED`
52
+ that every documented site also denied. The collision message is now
53
+ narrow-first and proposes a merge only where a single assertion is shared;
54
+ the grammar message states the form it accepts; and a plurality hint
55
+ (notes tier, never the exit code) flags a row that reads as more than one
56
+ claim. NOT demonstrated: a pre-registered blind A/B of the citation-scope
57
+ rule on the field's own row returned NULL (3/3 correct in both arms —
58
+ ceiling effect, the row names its off-topic subject explicitly), and the
59
+ Diary records it as such.
60
+ - **F-053: kb had no human-approval rule.** "Never auto-accept a devPNT
61
+ proposal: present the preview and wait for explicit confirmation" existed in
62
+ both sibling packages and nowhere in this one — invisible because the only
63
+ battery assertion sat inside a test that skips every lens without a
64
+ `hybrid.md`, which is exactly the lens that lacked the rule. The rule is now
65
+ in kb's Hybrid block, and the battery test that pins it skips no lens and
66
+ goes red when the rule is stripped from a whole-lens copy.
67
+ - **F-053: the authoring-floor pointer reached one lens of three.** It is now
68
+ in this contract too, before the instruction to write the analysis — where
69
+ the rule can still change what gets written, rather than at the design-review
70
+ gate one phase too late.
71
+
72
+ ### Added
73
+ - **The shared spine gains the capability floor, the delegation boundary and
74
+ `benefit`** (F-048, F-049, F-050 — see the code lens's changelog for the
75
+ reasoning; the files are byte-identical across the three packages).
76
+
77
+ ### Read cost
78
+ - This lens's mandatory contract GREW **+7.1%** (27,516 -> 29,471 B): it
79
+ received the spine's new doctrine and the two rules above, and no diet. The
80
+ Hybrid seam was measured for extraction and DECLINED — kb's block is 299 B
81
+ against a 1,282 B pointer, so moving it would grow the file it should shrink.
82
+
83
+ ## [1.14.1] - 2026-09-06
84
+
85
+ ### Fixed
86
+ - **F-046 shipped a hook that wired nowhere.** `wireRemindHookInto` used the
87
+ ORIENT hook's opt-out marker (`orient-hook-wired`) as its own. That file is
88
+ present on every machine that ever installed the skill, so the installer read
89
+ it as "the user opted out of the per-turn reminder" and never wrote the hook —
90
+ for everyone. Two smaller faults in the same function: the marker was checked
91
+ BEFORE testing whether the hook was already present, and no marker was ever
92
+ written after a successful wire, so the real opt-out could never arm. The hook
93
+ now has its own `remind-hook-wired` marker, checked after the presence test and
94
+ written only on success. Regression pinned in `scripts/test_clients.js` (red
95
+ against 1.32.0: an orient-marked machine got no hook).
96
+
5
97
  ## [1.14.0] - 2026-09-06
6
98
 
7
99
  ### Added
package/README.md CHANGED
@@ -37,7 +37,7 @@ Deliberately absent: any per-node coverage or completion state. `gaps:` says wha
37
37
  - **Independent review, twice**: the design before it is implemented, the result before it is declared done — fresh-context subagent > one-shot run > a declared self-pass, 3 rounds max, one log line each, and a PASS is invalid on "found nothing".
38
38
  - **Question discipline**: a question is legal only when the agent searched first, names the search with its result, and names the decision it unblocks; otherwise it proceeds on a declared assumption, batched.
39
39
  - **Operative guides + agent-global KB**: distil user-provided indications into source-faithful `GUIDE_*.md` (`source_kind: document`) — verbatim snapshot plus hash, so drift is detected mechanically.
40
- - **Mechanical checks**: `check`, `validate`, `index`, `graph`, `corpus`, `claim-id`, `anchor`, `export`, `import`, `stale` (spine staleness plus `## claims` -- superseded-cited documents, expired `valid` windows, superseded derivation chains), plus the spine's `mark`/`gate`/`plan`/`orient`/`migrate`. The graph and corpus checks verify spans against the stored extraction, recompute every id, refuse cycles and unreachable nodes, and enforce `CONTESTED` symmetry.
40
+ - **Mechanical checks**: `check`, `validate`, `index`, `graph`, `corpus`, `claim-id`, `anchor`, `export`, `import`, `stale` (spine staleness plus `## claims` -- superseded-cited documents, expired `valid` windows, superseded derivation chains), plus the spine's `mark`/`benefit`/`gate`/`plan`/`orient`/`migrate`. `benefit` reports what the review gates have already caught, beside what the doctrine costs to read; it always exits 0 and carries no verdict. The graph and corpus checks verify spans against the stored extraction, recompute every id, refuse cycles and unreachable nodes, and enforce `CONTESTED` symmetry.
41
41
  - **Installed support files**: Claude, Codex, Gemini and Google Antigravity receive the full skill folder — `SKILL.md`, `templates.md`, `taxonomy.md`, `distillation.md`, `reconciliation.md`, `guides.md`, `vision.md`, `elicitation.md`, `review.md`, `dispatch.md`, `routing.md`, `ENFORCEMENT.md`, and the validator's two files, `scripts/sdlc_check.py` + `scripts/sdlc_core.py` (the core is the family's shared spine — copy both, or neither).
42
42
 
43
43
  ## Installation
@@ -115,3 +115,32 @@ Triage, the Vision Gate, the review gates, the guide router, question discipline
115
115
  Created by **Antonio Pinto** ([GitHub](https://github.com/Antoneeo)).
116
116
 
117
117
  MIT (c) 2026 Antonio Pinto.
118
+
119
+ ## Which model to run it on
120
+
121
+ The skill names **capability tiers**, never providers — a model name in doctrine
122
+ rots at the next release. The binding is yours to make, and the rule is one line:
123
+
124
+ > **A session's floor is the highest floor among the roles it performs itself.**
125
+
126
+ Authoring a governed artifact — the vision, the analysis, the use cases, the
127
+ threat model — is a **deep-tier** role: its output is judgement, and nothing
128
+ downstream scores it. So a session that will DESIGN wants your strongest model.
129
+ A session that only executes an already-approved plan, or does small maintenance,
130
+ can sit a tier lower. The cheapest tier is the wrong choice for the main session
131
+ whatever the task, because the failure there is not a wrong answer — it is
132
+ **silently not applying the process**: a triage never run, a router verdict
133
+ declared without the lookup, a gate nobody noticed. That failure is invisible to
134
+ every check in here.
135
+
136
+ **The reviewer's tier is not automatically yours.** On some clients a subagent
137
+ inherits the session's model; on others it takes one from its own definition, so
138
+ a strong session can be reviewed by a weak one — and a weak session can buy a
139
+ strong review. Set it deliberately; the
140
+ `model` column in the review log is where the choice becomes visible.
141
+
142
+ **Avoid one combination**: authoring below the floor AND reviewing below the floor
143
+ on the same unit. One disclosed weakness is a disclosed weakness; two is an
144
+ artifact nobody competent ever read. Where your client offers nothing better, the
145
+ review still runs and both facts are recorded — a disclosed worst case beats
146
+ skipping the review.
@@ -1,6 +1,6 @@
1
- {
2
- "name": "kb-agentic-skill",
3
- "version": "1.14.0",
4
- "description": "Knowledge-Base & Document-First protocol with risk triage, Vision governance, signal distillation and optional devPNT integration.",
5
- "author": "Antonio Pinto (https://github.com/Antoneeo)"
6
- }
1
+ {
2
+ "name": "kb-agentic-skill",
3
+ "version": "1.16.0",
4
+ "description": "Knowledge-Base & Document-First protocol with risk triage, Vision governance, signal distillation and optional devPNT integration.",
5
+ "author": "Antonio Pinto (https://github.com/Antoneeo)"
6
+ }
package/package.json CHANGED
@@ -1,51 +1,51 @@
1
- {
2
- "name": "@antoneeo/kb-agentic-skill",
3
- "version": "1.14.0",
4
- "description": "Knowledge-Base & Document-First protocol for Claude Code, Gemini CLI, Google Antigravity and Codex with risk triage, Vision governance, signal distillation and optional devPNT integration.",
5
- "keywords": [
6
- "claude-code",
7
- "claude-skill",
8
- "gemini-cli",
9
- "skill",
10
- "knowledge-base",
11
- "documentation",
12
- "ai-agent"
13
- ],
14
- "author": "Antonio Pinto (https://github.com/Antoneeo)",
15
- "license": "MIT",
16
- "publishConfig": {
17
- "access": "public"
18
- },
19
- "bin": {
20
- "kb-agentic-init": "scripts/init.js",
21
- "kb-agentic-install-skill": "scripts/postinstall.js"
22
- },
23
- "scripts": {
24
- "postinstall": "node scripts/postinstall.js",
25
- "preuninstall": "node scripts/preuninstall.js"
26
- },
27
- "files": [
28
- "skills/kb-agentic-skill/SKILL.md",
29
- "skills/kb-agentic-skill/templates.md",
30
- "skills/kb-agentic-skill/taxonomy.md",
31
- "skills/kb-agentic-skill/guides.md",
32
- "skills/kb-agentic-skill/vision.md",
33
- "skills/kb-agentic-skill/distillation.md",
34
- "skills/kb-agentic-skill/reconciliation.md",
35
- "skills/kb-agentic-skill/elicitation.md",
36
- "skills/kb-agentic-skill/review.md",
37
- "skills/kb-agentic-skill/dispatch.md",
38
- "skills/kb-agentic-skill/routing.md",
39
- "skills/kb-agentic-skill/portability.md",
40
- "skills/kb-agentic-skill/ENFORCEMENT.md",
41
- "skills/kb-agentic-skill/scripts/sdlc_check.py",
42
- "skills/kb-agentic-skill/scripts/sdlc_core.py",
43
- "gemini-extension.json",
44
- "README.md",
45
- "CHANGELOG.md",
46
- "scripts/lib.js",
47
- "scripts/init.js",
48
- "scripts/postinstall.js",
49
- "scripts/preuninstall.js"
50
- ]
51
- }
1
+ {
2
+ "name": "@antoneeo/kb-agentic-skill",
3
+ "version": "1.16.0",
4
+ "description": "Knowledge-Base & Document-First protocol for Claude Code, Gemini CLI, Google Antigravity and Codex with risk triage, Vision governance, signal distillation and optional devPNT integration.",
5
+ "keywords": [
6
+ "claude-code",
7
+ "claude-skill",
8
+ "gemini-cli",
9
+ "skill",
10
+ "knowledge-base",
11
+ "documentation",
12
+ "ai-agent"
13
+ ],
14
+ "author": "Antonio Pinto (https://github.com/Antoneeo)",
15
+ "license": "MIT",
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "bin": {
20
+ "kb-agentic-init": "scripts/init.js",
21
+ "kb-agentic-install-skill": "scripts/postinstall.js"
22
+ },
23
+ "scripts": {
24
+ "postinstall": "node scripts/postinstall.js",
25
+ "preuninstall": "node scripts/preuninstall.js"
26
+ },
27
+ "files": [
28
+ "skills/kb-agentic-skill/SKILL.md",
29
+ "skills/kb-agentic-skill/templates.md",
30
+ "skills/kb-agentic-skill/taxonomy.md",
31
+ "skills/kb-agentic-skill/guides.md",
32
+ "skills/kb-agentic-skill/vision.md",
33
+ "skills/kb-agentic-skill/distillation.md",
34
+ "skills/kb-agentic-skill/reconciliation.md",
35
+ "skills/kb-agentic-skill/elicitation.md",
36
+ "skills/kb-agentic-skill/review.md",
37
+ "skills/kb-agentic-skill/dispatch.md",
38
+ "skills/kb-agentic-skill/routing.md",
39
+ "skills/kb-agentic-skill/portability.md",
40
+ "skills/kb-agentic-skill/ENFORCEMENT.md",
41
+ "skills/kb-agentic-skill/scripts/sdlc_check.py",
42
+ "skills/kb-agentic-skill/scripts/sdlc_core.py",
43
+ "gemini-extension.json",
44
+ "README.md",
45
+ "CHANGELOG.md",
46
+ "scripts/lib.js",
47
+ "scripts/init.js",
48
+ "scripts/postinstall.js",
49
+ "scripts/preuninstall.js"
50
+ ]
51
+ }
@@ -102,7 +102,7 @@ Semantics: exit code 2 + message on stderr ⇒ the write is blocked and the mess
102
102
  - The paths in `--protected` are prefixes relative to the project root, separated by `;`.
103
103
  - `ai_docs/`, `tests/` and `test/` are always excluded from blocking.
104
104
  - The hook assumes the working directory is the project root (standard behavior of Claude Code hooks).
105
- - **Hybrid/devPNT projects**: add `--hybrid` to the gate command. Governed designs live in the devPNT DB, so the gate also unlocks when an approved E-TDD shadow (`ai_docs/solutions/SHADOW_*tdd*.md`, exported before implementation — see the SKILL.md shadow discipline) is present. Without the flag the gate would block legitimate governed work. The flag is deliberately explicit: never auto-detected.
105
+ - **Hybrid/devPNT projects**: add `--hybrid` to the gate command. Governed designs live in the devPNT DB, so the gate also unlocks when an approved E-TDD shadow (`ai_docs/solutions/SHADOW_*tdd*.md`, exported before implementation — in this package that clause is the whole statement of the duty; the sibling lenses keep it in their `hybrid.md`, which kb does not have) is present. Without the flag the gate would block legitimate governed work. The flag is deliberately explicit: never auto-detected.
106
106
 
107
107
  ## 4. SessionStart hook (orientation, recommended default)
108
108
 
@@ -261,3 +261,12 @@ It aggregates the three test files (`test_plan.py` + `test_session_start.py` + `
261
261
  **Optional CI** (same shape as §2, not mandatory): add a `run:` step invoking the `unittest discover` command above.
262
262
 
263
263
  **T10 note:** if you copied `sdlc_check.py` and the `test_*.py` battery into the repo for CI, that copy is authoritative — keep it current when you update the skill.
264
+
265
+ ## `benefit` is a report, never a CI gate
266
+
267
+ `sdlc_check.py benefit` reports what the review gates caught and what the
268
+ doctrine costs to read. It always exits 0 and emits no warning: **never wire
269
+ it into CI**. It is the criterion by which future units are judged, and a
270
+ measurement that can fail a build becomes a target -- a targeted measurement
271
+ stops measuring. Run it when deciding whether a proposed rule is worth its
272
+ ceremony, not on every push.