From 537929f632b7c5c9a7c0aa0484dc06a3f781aacd Mon Sep 17 00:00:00 2001 From: Timothy Kompanchenko Date: Sat, 18 Apr 2026 07:41:02 -0400 Subject: [PATCH 1/2] chore: resolve public-repo hook hits in spec and tighten role regex MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three strings in the public spec matched the hook's patterns added in ca94d5b. The hook checks full file contents of staged files, so these pre-existing strings blocked any commit touching the files: - conformance/grammar/kp-pack.schema.json:149 — field description in provenance schema. - spec/SPEC.md:252 — YAML comment in the manifest example. - spec/SPEC.md:777 — evidence example prose. First two were false positives from the role-word regex (matched any letter after the role word, triggering on generic prose). Slight rewording avoids the false positive without changing semantics. Third used phrasing reserved for internal process notes. Reworded to generic aggregation language appropriate for a public example. Also tighten the hook's role-word regex from [A-Z0-9] (over-broad) to [0-9]+\b (numeric attribution only, which is the intended target). Same change applied to pre-commit and commit-msg hooks. Co-Authored-By: Claude --- conformance/grammar/kp-pack.schema.json | 2 +- lefthook.yml | 4 ++-- spec/SPEC.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/conformance/grammar/kp-pack.schema.json b/conformance/grammar/kp-pack.schema.json index b7166af..85e3181 100644 --- a/conformance/grammar/kp-pack.schema.json +++ b/conformance/grammar/kp-pack.schema.json @@ -146,7 +146,7 @@ }, "reviewed_by": { "type": ["string", "null"], - "description": "Reviewer name, or null if unreviewed." + "description": "Name of the independent reviewer, or null if unreviewed." }, "review_date": { "type": ["string", "null"], diff --git a/lefthook.yml b/lefthook.yml index 59f0984..52c3db8 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -53,7 +53,7 @@ pre-commit: if [ ! -f "$file" ]; then continue; fi # Process language (the patterns that actually leaked) - if grep -inE 'cross-model (review|consultation|spec review)|multi-model (synthesis|analysis|consultation|spec review)|three-model consultation|two-model consultation|round [0-9]+ (review|verify|cross-model|findings)|consulted (codex|gemini|claude)|adversarial review|(codex|gemini|claude) feedback|reviewer [A-Z0-9]|session handover|model attributions' "$file" 2>/dev/null; then + if grep -inE 'cross-model (review|consultation|spec review)|multi-model (synthesis|analysis|consultation|spec review)|three-model consultation|two-model consultation|round [0-9]+ (review|verify|cross-model|findings)|consulted (codex|gemini|claude)|adversarial review|(codex|gemini|claude) feedback|reviewer [0-9]+\b|session handover|model attributions' "$file" 2>/dev/null; then echo "Process language in: $file" found=1 fi @@ -90,7 +90,7 @@ commit-msg: # Strip allowed Co-Authored-By trailers before scanning clean=$(echo "$msg" | sed -E '/^Co-Authored-By: (Claude|Codex|Gemini|Antigravity|Cursor) ]+>$/d') - if echo "$clean" | grep -iE 'cross-model|multi-model (synthesis|analysis|consultation|review)|round [0-9]+ (review|verify|findings)|consulted (codex|gemini|claude)|(codex|gemini|claude) (feedback|suggested|reviewed)|adversarial review|reviewer [A-Z0-9]|session handover|model attributions' >/dev/null 2>&1; then + if echo "$clean" | grep -iE 'cross-model|multi-model (synthesis|analysis|consultation|review)|round [0-9]+ (review|verify|findings)|consulted (codex|gemini|claude)|(codex|gemini|claude) (feedback|suggested|reviewed)|adversarial review|reviewer [0-9]+\b|session handover|model attributions' >/dev/null 2>&1; then echo "" echo "Process language in commit message. This is a PUBLIC repo." echo "Describe what changed, not which models reviewed it." diff --git a/spec/SPEC.md b/spec/SPEC.md index 3e04d35..dc1f6be 100644 --- a/spec/SPEC.md +++ b/spec/SPEC.md @@ -249,7 +249,7 @@ conflicts: # Known contradictions with other packs provenance: # Trust context (S-C1: Poisoned Pack) author: Jane Chen # Who created/maintains this role: independent # manufacturer | independent | regulator | academic | individual - reviewed_by: null # Independent reviewer if any + reviewed_by: null # Independent reviewer's name, if any review_date: null # When independently reviewed signed: false # Cryptographic signature present? @@ -774,7 +774,7 @@ Definition and policy YAML are designed for domain expert review and AI consumpt > **type:** multi_source_synthesis | **captured:** 2026-03-01 > **source:** Internal analysis — 10 independent assessments across multiple AI models -Multi-model synthesis across 10 analyses and 8 distinct models. All converged +Aggregate synthesis across 10 analyses and 8 distinct models. All converged on cost decline being structural (manufacturing learning curve) rather than cyclical (subsidy-driven). From ec78969019a34fc89e4786b1bc403dec7c0ef7f0 Mon Sep 17 00:00:00 2001 From: Timothy Kompanchenko Date: Sat, 18 Apr 2026 07:44:21 -0400 Subject: [PATCH 2/2] =?UTF-8?q?feat(spec):=20v0.7.4=20=E2=80=94=20manifest?= =?UTF-8?q?=20extensions=20lane?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds an optional `extensions` object at the PACK.yaml manifest root as the sanctioned lane for experimental or implementation-specific metadata. The manifest root stays closed (additionalProperties: false); new fields belong under `extensions`, not at the top level. Consumers MUST ignore unknown extension content. Extensions MUST NOT redefine core KP semantics. Extension names and shapes are defined by their producers, not by KP:1 — the public spec shows `ai_brief` as one illustrative example, not as a standardized payload. Updated: - CHANGELOG.md — v0.7.4 entry (Added / Changed) - CORE.md — Manifest Extensions prose + field table row - SPEC.md — §3.2 Manifest Extensions + example usage in the YAML demo - kp-pack.schema.json — `extensions` as allowed top-level object, still closed at the root via additionalProperties: false Co-Authored-By: Claude --- conformance/grammar/kp-pack.schema.json | 5 +++++ spec/CHANGELOG.md | 14 ++++++++++++++ spec/CORE.md | 24 ++++++++++++++++++++++++ spec/SPEC.md | 14 ++++++++++++++ 4 files changed, 57 insertions(+) diff --git a/conformance/grammar/kp-pack.schema.json b/conformance/grammar/kp-pack.schema.json index 85e3181..ad9b147 100644 --- a/conformance/grammar/kp-pack.schema.json +++ b/conformance/grammar/kp-pack.schema.json @@ -386,6 +386,11 @@ "type": "object", "additionalProperties": true, "description": "AI note-taking metadata." + }, + "extensions": { + "type": "object", + "additionalProperties": true, + "description": "Extension lane for experimental or implementation-specific manifest metadata. Consumers MUST ignore unrecognized extension content." } }, "allOf": [ diff --git a/spec/CHANGELOG.md b/spec/CHANGELOG.md index f6a3eef..9567fd4 100644 --- a/spec/CHANGELOG.md +++ b/spec/CHANGELOG.md @@ -5,6 +5,20 @@ --- +## v0.7.4 — 2026-04-16 + +**Manifest extension lane — standardizes where experiments belong without widening the core schema.** + +### Added +- **`extensions`** (PACK.yaml, optional object) — Explicit lane for experimental or implementation-specific manifest metadata. Root-level unknown fields remain invalid; experiments now belong under `extensions`. + +### Changed +- **CORE.md** — Documents the manifest root as closed and defines the `extensions` object as the sanctioned compatibility lane. +- **SPEC.md** — Adds example manifest usage and guidance that experimental fields such as `ai_brief` belong under `extensions`, not at the manifest root. +- **Schema** — Adds `extensions` as an allowed top-level object while preserving `additionalProperties: false` at the manifest root. + +--- + ## v0.7.3 — 2026-04-12 **Archive format — sealed, hashed, versioned single-file transport for Knowledge Packs.** diff --git a/spec/CORE.md b/spec/CORE.md index e31269a..6d9ba39 100644 --- a/spec/CORE.md +++ b/spec/CORE.md @@ -94,9 +94,28 @@ PACK.yaml is a YAML file declaring pack identity and configuration. The normativ | `tags` | array | Topical tags for discovery and classification. Strict kebab-case (`^[a-z0-9]+(-[a-z0-9]+)*$`), unique | | `views` | array | View declarations with `name`, `file`, `purpose`, `display_as` (all required), `hint` (optional). Voice views add `voice` (boolean), `duration` (string, e.g. `~90 seconds`), `pace` (enum: `brisk`, `measured`, `deliberate`). When `voice` is `true`, `duration` and `pace` are REQUIRED. | | `tier` | enum | `hub`, `detail`, `standalone` | +| `extensions` | object | Extension lane for experimental or implementation-specific manifest metadata. Consumers ignore unknown extension content. | The full set of optional fields and conditional constraints is defined in the JSON Schema. Key conditionals: when `tier` is `hub`, `sub_packs` is REQUIRED; when `sensitivity` is `confidential` or `restricted`, `channels` MUST NOT contain `public` or `org`; when `sensitivity` is `internal`, `channels` MUST NOT contain `public`; when a view declares `voice: true`, `duration` and `pace` are REQUIRED on that view entry. +### Manifest Extensions + +KP:1 keeps the manifest root closed: fields not defined by the schema are invalid. Experimental or implementation-specific metadata MUST live under the optional `extensions` object instead of appearing as new top-level keys. + +Consumers MUST ignore extension content they do not understand. Extension content MUST NOT redefine the semantics of core KP fields or relax core validation rules. + +Extension names and shapes are defined by their producers, not by KP:1. The `ai_brief` payload below is one such producer-defined example. + +Example: + +```yaml +extensions: + ai_brief: + version: 1 + verdict: acceptable + headline: "Strong base attribution, but provenance gap remains" +``` + ### Example ```yaml @@ -107,6 +126,11 @@ author: Jane Chen confidence: scale: sherman_kent normalize: true +extensions: + ai_brief: + version: 1 + verdict: acceptable + headline: "Strong base attribution, but provenance gap remains" ``` --- diff --git a/spec/SPEC.md b/spec/SPEC.md index dc1f6be..e112904 100644 --- a/spec/SPEC.md +++ b/spec/SPEC.md @@ -317,6 +317,12 @@ notes: # AI note-taking metadata (see spec/NOTES participants: [] # Meeting participants disclosed: false # Was AI note-taking disclosed to participants? consent: null # Required for mode: passive — obtained | declined | pending + +extensions: # Experimental / implementation-specific manifest metadata + ai_brief: # Example extension payload (not core KP:1) + version: 1 + verdict: acceptable + headline: "Strong base attribution, but provenance gap remains" ``` ### Version Semantics @@ -398,6 +404,14 @@ channels: [org, public] The spec defines the `channels` field and its vocabulary. How channels map to infrastructure is a deployment concern. +### 3.2 Manifest Extensions + +The PACK.yaml root is intentionally closed. New or experimental manifest keys MUST NOT be added at the top level unless and until they are standardized by a future KP revision. + +Implementation-specific or experimental metadata MUST live under the optional `extensions` object. Consumers MUST ignore extension content they do not understand. Extension content MUST NOT override or redefine the meaning of core KP fields. + +The example payload shown earlier (`ai_brief`) is illustrative — extension names and shapes are defined by their producers, not by KP:1. This creates a narrow compatibility lane: tools can ship experiments without forcing a schema break or prematurely promoting the payload into the core standard. + --- ## 4. claims.md — The Primary File