From 31ebc8afc420cf7ae8ac4925642f7bd6255d56dc Mon Sep 17 00:00:00 2001 From: Mathias Date: Tue, 22 Sep 2026 23:20:42 +0200 Subject: [PATCH] docs(close-session): teach the skill the claim envelope, drop the stale tag-list hint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit hyperguild#112: two documentation gaps found checking the skill against current state. 1. The skill never mentioned the claim envelope (half_life/applies/ claim_provenance) capture's insight-write now validates — the natural place to say a close-session insight is usually exactly the durable, universal, human-decided kind it describes. 2. The "tagged internal today" repo list was a frozen snapshot next to a fail-safe gate — the expensive direction to mislead in. Replaced with the rule (untagged -> confidential) plus a pointer at classification.yaml as sole authority, since hyperguild#91 already moved the real count from 10 to ~39 repos and it will keep moving. Co-Authored-By: Claude Sonnet 5 --- skills/close-session/SKILL.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/skills/close-session/SKILL.md b/skills/close-session/SKILL.md index 4d4f2dc..ef7ad1c 100644 --- a/skills/close-session/SKILL.md +++ b/skills/close-session/SKILL.md @@ -49,12 +49,13 @@ Persist the session via a **single `capture` call** (the `brain:capture` MCP too **Assemble one payload:** - **`insights[]`** — the generalizable learnings from Phase 1 (decisions/failures worth re-reading). Each: `{text, wing, hall}`; add `supersede_slug` to revise a prior note in place instead of creating a duplicate. `hall` ∈ facts/decisions/failures/hypotheses/sources. + Optional claim envelope, per insight: `half_life` ∈ volatile/seasonal/durable, `applies` ∈ local/homelab/universal, `claim_provenance` ∈ asserted/inferred — required together whenever either `half_life` or `applies` is set (an envelope with no provenance is rejected). A close-session insight is usually exactly the durable, generalizable, human-decided kind this describes: `half_life: durable, applies: universal, claim_provenance: asserted` is the common case, not a rare opt-in. - **`tickets[]`** — the issue actions from Phase 3: `{repo, action, ...}` where action ∈ create/close/comment. Owner is always `mathias` (server-forced). - **`context`** — `{harness: "claudeai-chat", session_ref: , fidelity: "live-capture", actor: "mathias", classification: }`. **THE CLASSIFICATION GATE (read before calling — this is where capture refuses).** Capture computes an **effective classification = the strictest across EVERY target it touches** (each insight's `wing`, each ticket's `repo`), then refuses if that effective level is `confidential` and the origin is us-nexus (claude.ai is us-nexus). Levels come from `classification.yaml` at the brain root (source of truth, #67), with the code defaults as the floor: `hyperguild`/`homelab` → internal; `client-*` → confidential; **anything untagged → confidential (fail-safe)**. -- **Tagged `internal` today** (safe through claude.ai): wings `hyperguild`, `homelab`; repos `brain`, `ai-sessions`, `infra`, `hyperguild`, `homelab`, `tapir`, `agentsquad`, `jepa-fx-risk`, `swedsl`. Treat `classification.yaml` as authoritative — this list is a hint, not gospel. +- **The rule, not a list**: untagged → confidential (fail-safe). `classification.yaml` at the brain root is the sole authority on what's tagged `internal` today — it grew from 10 to ~39 repos in one sweep (hyperguild#91) and will keep moving, so read the file rather than trust an enumeration frozen at whatever moment this skill was last edited. - Declare `context.classification: "internal"` for normal homelab work. - Insight `wing`s and ticket `repo`s are classification INPUTS, not free-form metadata — every target must resolve `internal` or the whole capture escalates to `confidential` and the gate refuses via claude.ai. Listing the central homelab repos (incl. `brain`/`ai-sessions`) is now fine; they're tagged. - If a session genuinely touched **`client-*` or otherwise-untagged** material, it cannot be captured through claude.ai — note that in the verdict rather than trying to force it.