@antoneeo/kb-agentic-skill 1.28.0 → 1.32.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.
@@ -35,7 +35,10 @@ a fidelity marker: `[source: <snapshot-file>#<anchor-or-line>]` for covered cont
35
35
  (doubling as the detail-lookup pointer into the book), or a literal
36
36
  `[not covered by source]` for gaps. Sections are CHOSEN from the repertoire below —
37
37
  only those the source actually supports; never force empty ones. A guide approaching
38
- the source's own length is a paraphrase, not a synthesis.
38
+ the source's own length is a paraphrase, not a synthesis. **With a corpus**, a
39
+ `source_kind: document` guide's book is its `corpus/given/` artifact instead of a
40
+ snapshot: `distilled_from:` and the markers name it, and `source_hash` is its
41
+ line-ending-normalized digest (`distillation.md` §1).
39
42
 
40
43
  ```markdown
41
44
  ---
@@ -746,7 +749,7 @@ status: CURRENT
746
749
  belong to reconciliation.
747
750
  - `qty`: `<value> <unit> <kind>` — effort in person-days (h/d/w/mo/fte-mo; 8h=1d, 1w=5d,
748
751
  1mo=21d), duration in calendar days (h/d/w/mo), cost within one currency, count unit-matched.
749
- - `about`: `<predicate> -> <slug>` for relationship claims; stored once, under the subject.
752
+ - `about`: `<predicate> -> <slug>` for relationship claims; stored once, under the subject. Several share one cell, separated by `; `; `not-yet-honored-by -> ANALYSIS_<name>` (Hybrid: `SHADOW_<doc_key>`) marks a claim the code does not yet honor (`distillation.md` §2).
750
753
  - `state`: `OK` | `CONTESTED <id>[,..]` | `SUPERSEDED <id>[,..]` — per claim, never per
751
754
  node; a split bundle (`reconciliation.md` §Splitting) names all its successors.
752
755
  - A tombstone (merged/renamed topic): `status: SUPERSEDED` + `redirect_to: <slug>`, body empty.
@@ -794,16 +797,18 @@ date: 2026-08-02
794
797
  provenance: GIVEN
795
798
  extractor: pdftotext 24.02, form-feed page breaks, whitespace collapsed
796
799
  original_path: /vault/manuals/xyz.pdf
797
- original_sha256: <digest at ingest — RECORDED, never checked: we do not hold the file>
800
+ original_sha256: <digest at ingest — checked by stale/inventory only when original_path is local>
798
801
  ---
799
802
  ```
800
803
 
801
804
  The two fields are **not** in the same position, and writing them as if they were is
802
805
  how a dangling pointer survives a green run:
803
806
 
804
- - `original_sha256` detects nothing on its own — we do not hold the bytes. It lets a
805
- human re-verify by hand and it dates the ingest. Keep that limit visible wherever the
806
- field is written.
807
+ - `original_sha256` is checked only where `original_path:` resolves to a local file:
808
+ `stale` and `inventory` report an original that changed since ingest. `check` never
809
+ hashes originals; elsewhere (remote, cloud-only, no path) it detects nothing. It
810
+ lets a human re-verify by hand and it dates the ingest. Keep that limit visible
811
+ wherever the field is written.
807
812
  - `original_path` **is** checked for resolution, and warns when it does not resolve
808
813
  (never errors — an imported bundle carries no originals). **Write it absolute, or
809
814
  relative to the project root**; the validator tries the docs root's parent first and
@@ -814,6 +819,43 @@ how a dangling pointer survives a green run:
814
819
  Write these two values with **no trailing `# comment`**: the frontmatter reader does
815
820
  not strip inline comments, so the comment lands inside the value.
816
821
 
822
+ **Intake hygiene fields** (`distillation.md` §1 owns the rules):
823
+
824
+ ```markdown
825
+ redacted_at_intake: [password, personal-data]
826
+ credential_scan: reviewed — vendor manual's sample value, not a live credential
827
+ original_ref: wiki://team-space/app-config
828
+ ```
829
+
830
+ - `redacted_at_intake:` — the kinds replaced by `[REDACTED: <kind>]` before storing.
831
+ When present, the sidecar carries **no `original_sha256:`** and no non-text original
832
+ is copied beside the extraction.
833
+ - `credential_scan: reviewed — <reason>` — a human cleared a flagged line as a false
834
+ positive. Only this clears the check; a reason is required.
835
+ - `original_ref:` — a non-local identifier of the original; recorded, never resolved.
836
+
837
+ **A document the project sent** (`distillation.md` §1) — its claims are `DECLARED`:
838
+
839
+ ```markdown
840
+ ---
841
+ sha256: <digest of the version sent>
842
+ date: 2026-10-16
843
+ provenance: DECLARED
844
+ recipient: <organization or role — never a private person's name>
845
+ original_path: deliverables/dpia_v5.1.docx
846
+ supersedes: dpia-v5-0a1b2c3d.txt
847
+ ---
848
+ Sent to <recipient> with <the package it belonged to>, in one line.
849
+ ```
850
+
851
+ `date:` here is the day it was **sent** (the docs site's chronology says so).
852
+ `original_path:` names the file in the project, so `inventory` recognizes it even when
853
+ redaction left no digest of it. `supersedes:` only for a resend.
854
+
855
+ A **tombstone** (a withdrawn artifact) is renamed `<stem>-withdrawn-<YYYYMMDD>.<ext>.meta.md`
856
+ and keeps `date:`, `provenance:`, `supersedes:` and `withdrawn: <reason>` — and **no
857
+ `sha256:` or `original_sha256:`**. Its bytes are gone.
858
+
817
859
  `provenance:` has a consumer too: a claim row filed `prov: GIVEN` whose artifact's
818
860
  sidecar declares anything else warns. Declare the chain the artifact actually has —
819
861
  an OCR, a transcription from an image, a translation are not first-hand evidence, and
@@ -827,6 +869,28 @@ warning catches the author who declared the chain honestly and then filed the ro
827
869
  strongly, never the author who declared it wrongly. Nothing requires a `given/` sidecar
828
870
  to carry `provenance:` at all; adding that requirement is a new gate, not this one.
829
871
 
872
+ ## ai_docs/audit/INVENTORY_exclusions.md (what never enters the corpus)
873
+
874
+ ```markdown
875
+ # Inventory exclusions
876
+
877
+ Project files the practitioner decided never enter the corpus. One row per approval,
878
+ written only after it, dated that day. `inventory` never reads what a row excludes.
879
+
880
+ | pattern | reason | approved |
881
+ |---|---|---|
882
+ | src/ | application code: knowledge lives in the guides | 2026-10-26 (REQUEST_kb_corpus_reach.md R2) |
883
+ | *.pyc | generated | 2026-10-26 |
884
+ ```
885
+
886
+ Patterns are a gitignore subset, relative to the project root: `*`, `?`, `[...]` within
887
+ a segment, `**` across segments, a trailing `/` for directories, no `/` (other than a
888
+ trailing one) to match a name at any depth; case-insensitive on Windows. `validate` and
889
+ `check` refuse an empty pattern or reason, an `approved` that is not a date, and a
890
+ pattern that leaves the project root. The validator's built-in skipped directories
891
+ (`.git`, `node_modules`, dot-directories, …) need no row: `inventory` lists each once
892
+ as `SKIPPED`.
893
+
830
894
  ## ai_docs/corpus/notes/RULING_[topic]_[date].md (practitioner ruling)
831
895
 
832
896
  ```markdown