diff --git a/skills-staging/2026-07-30-campaign-ops/MANIFEST.md b/skills-staging/2026-07-30-campaign-ops/MANIFEST.md new file mode 100644 index 0000000..608b009 --- /dev/null +++ b/skills-staging/2026-07-30-campaign-ops/MANIFEST.md @@ -0,0 +1,89 @@ +# MANIFEST — campaign-ops library (2026-07-30) + +Project skill library distilled from the 2026-07-29/30 contributor-PR +campaign session (transcript: `chat-history.md`, local untracked file; +public session id `session_01WMbbZQ8ZMMsNRGyV2nvJR8`, stamped in the +session-authored commits' trailers — e.g. `f529014`; the +GitHub-generated merge commits carry no trailer). Staged, NOT +installed: nothing under `skills-staging/` auto-loads. Every +repo-facing claim was re-verified against the repository on +2026-07-30; what could not be verified is in `UNCERTAINTY.md`, not in +the skills. + +Covenant scope: the README House covenant's probe/marker regime +governs the pack roots (`skills/`, `design-pack/skills/`). This staged +library ships under the retiring-architect MANIFEST/UNCERTAINTY regime +instead — its rules are verified operating records, not covenant-bound +pack doctrine, and this delivery is not precedent for shipping pack +rules without markers. + +Delivery note: `skills-staging/` is gitignored by owner decision +(`92314a6`). This library is delivered by explicit force-add on the +owner's instruction for this delivery only; `.gitignore` itself is +untouched. Once tracked, these files behave like any tracked file. + +One line per skill — loading condition ← session evidence ← repo +evidence ← verification status: + +- **contribution-gate-playbook** — contributor PRs open + owner ask to + review/integrate/merge, or a live combined-*/integrate-* branch ← + the session's three campaigns end to end ← PR #90/#93/#97 bodies, + merge commits `a148180`/`92077a7`/`79ca49c`, `gh pr list/checks`, + reviewDecision fields, #91 createdAt vs #90 mergedAt, commits + `f529014`/`814d116` ← **verified** (cadence wording + partially-verified: UNCERTAINTY 2; comments: UNCERTAINTY 7). +- **gate-adjudication-and-folds** — a lens verdict landed and needs + fold/reject/stop; opposite-fix convergence; non-converging lens; + runtime-semantics finding ← r1–r11 fold/reject decisions, the #91 + precedence adjudication, the #96 execution chain ← commits + `6fa6154`/`5fa241b`/`83a038d`/`1560b97`, PR #90/#93/#97 bodies, + #91/#96 evaluation comments, cross-model-review §§3–4 ← + **verified** (the rejection specifics, the r8 pre-declaration, and + the fold-introduced attribution are transcript-recorded and labeled + so in place; the `→` count was re-run in-repo 2026-07-30). +- **doctrine-change-conventions** — editing rule text in + skills/*/SKILL.md heading to commit/merge; Provenance work; a rule + with no probe ← integration fixes, covenant handling, width/glyph + rejections, no-bump observation ← README House covenant paragraph, + issue #92 body, `.github/checks.py` (read in full: no width check; + sweep scope), `git tag -l`, version badge lines, `32c6929`, + `f529014`/`814d116` ← **verified**. +- **repo-boundaries-and-sync** — about to stage/commit; post-merge + sync; unexpected diff-loop output; untracked file at repo root ← + the session's staging discipline and closing privacy flag ← + `.gitignore` + `git check-ignore`, `git ls-files` top-level, + `92314a6` message, live-copy diffs run 2026-07-30, README + Maintainer Notes, evaluation comments ← **verified** + (no-owner-quotes directive is session/memory-recorded, corroborated + by the read comments' shape; skill-vetting install intent: + UNCERTAINTY 4). +- **failure-archaeology** — about to hand-roll a CI wait, ship + runtime-semantics prose, adopt/delete leftover branches, or re-open + settled items ← the session's dead ends and residue ← same commits + and bodies as above plus `git branch -vv` and + `git branch --merged main` observed 2026-07-30 ← **verified** + (entry 1's loop internals are transcript-only — the loop never + landed anywhere; the entry carries that label in place). + +Claims rejected or downgraded during verification (full list with +evidence in `UNCERTAINTY.md`): + +- "bump the version every substantive PR" (2026-07-12-era rule) → + **historically-valid**; contradicted by observed practice #84–#97 + (0.1.16 unchanged; tags end at alpha-0.1.2). +- The 2026-07 reviewer lineup recorded in the older local library + (gpt-5.5 xhigh + grok-4.5 max) → **historically-valid**; the + campaign lineup differs and is itself date-stamped volatile. +- Session-memory phrase "evals/round4 … COMMITTED" → not supported by + the repo (`evals/` is gitignored, zero tracked files); treated as + loose wording, recorded in UNCERTAINTY 8. +- Installed-copies "cmp-verified @ merge SHA" → **verified with an + exception the session itself disclosed**: `skill-vetting` absent + from both installs (expected state; UNCERTAINTY 4). + +Review status: three fresh-context reviews (factual / doctrine / +usability) ran 2026-07-30 over these files; every BLOCKING and +IMPORTANT finding was applied in place before delivery, and the +dispositions are summarized in the delivering PR's description (the +PR that adds this directory). Unresolved and evidence-dependent items +live in `UNCERTAINTY.md`. diff --git a/skills-staging/2026-07-30-campaign-ops/START-HERE.md b/skills-staging/2026-07-30-campaign-ops/START-HERE.md new file mode 100644 index 0000000..c91fdcb --- /dev/null +++ b/skills-staging/2026-07-30-campaign-ops/START-HERE.md @@ -0,0 +1,83 @@ +# START HERE — campaign-ops library (2026-07-30) + +What this library is: the distillation of the 2026-07-29/30 maintainer +session that integrated contributor PRs #85–#89, #91, and #94–#96 into +main through three combined gates — PR #90 (merge `a148180`), PR #93 +(`92077a7`), PR #97 (`79ca49c`) — and opened the probe-debt tracker, +issue #92. The engineering core is not the doctrine content those PRs +carried; it is operating the contributor-PR pipeline (combined branch → +tri-lens cross-model gate → owner-authorized merge → post-merge duties) +without breaking the house covenant, the privacy boundaries, or the +published-record conventions. + +Authored 2026-07-30 by the retiring architect from the session +transcript (`chat-history.md`, a local untracked file at the repo root) +with every repo-facing claim re-verified against the repository on +2026-07-30. Companion files: `MANIFEST.md` (per-skill evidence), +`UNCERTAINTY.md` (everything NOT settled — read it before trusting a +claim near its topics). + +## Canonical-source map (who wins on disagreement) + +| Topic | Canonical source | +|---------------------------|-----------------------------------------| +| Cross-model gate doctrine | `skills/cross-model-review/SKILL.md` | +| Authoring/covenant method | `skills/skill-authoring` + README | +| | ("House covenant" paragraph) | +| Execution discipline | `skills/operational-rigor` | +| Practice records | PR #90/#93/#97 bodies, per-PR | +| | evaluation comments, issue #92 | +| This library | repo-specific operating layer, dated | +| | 2026-07-30 — canon and records win | + +## Current-state triage (as observed 2026-07-30) + +Facts a fresh session must not misread as its own breakage: + +- At authoring time: 0 open PRs; 1 open issue (#92) — #92 is DESIGNED + to stay open while any `unprobed` marker exists; it is a queue, not + a stale ticket. This delivery itself adds issue #100 (transcript + disposition; UNCERTAINTY item 1) and, while open, the delivering PR. +- The repo root carries UNTRACKED private session transcripts + (`chat-history.md`, `security-enhancement.md`). Never stage them; + see `repo-boundaries-and-sync`. Owner disposition pending (#100). +- `skills-staging/` is gitignored by owner decision (`92314a6`); + this library was force-added on an explicit owner instruction — + that delivery is not license to publish other ignored zones. +- The README per-skill sync loop currently errors on `skill-vetting` + (present in `skills/`, absent from both live installs) — a known + pre-existing state, not drift you introduced. +- Many local branches are residue of merged or abandoned campaigns — + do not adopt-and-finish them (see `failure-archaeology`). + +## Reading order + +1. `contribution-gate-playbook` — the pipeline end to end. +2. `gate-adjudication-and-folds` — judging lens verdicts. +3. `doctrine-change-conventions` — what any doctrine diff satisfies. +4. `repo-boundaries-and-sync` — what may be staged, synced, published. +5. `failure-archaeology` — dead ends and residue from this session. + +## Relationship to the older local library (2026-07-12) + +`skills-staging/` also holds a 12-skill library authored 2026-07-12 +(local-only, unpublished, gitignored — its existence is public via +`92314a6`'s commit message). Overlap map, verified 2026-07-30: + +- Partially superseded by this library: cross-model-gate-ops, + release-and-publish, repo-state-and-sync (verified stale examples + in `UNCERTAINTY.md` item 5: the 2026-07 reviewer lineup, the + bump-every-PR rule, the `README.zh-TW.md` filename). +- Old editing-skills-and-docs overlaps the new + doctrine-change-conventions — and is itself stale (its description + counts "the eight SKILL.md files"; `skills/` now has ten). +- NAME COLLISION: the old library and this one BOTH carry a skill + named `failure-archaeology` (different content). Never install both + libraries into one skills directory without renaming one. +- Everything unlisted (architecture-contract, build-and-env, + config-and-flags, debugging-playbook, diagnostics-and-tooling, + eval-operations, validation-and-qa) has the old library as sole + source — verify each claim against the repo before relying on it. + +Precedence for overlapping topics: canon skills first, then the newer +dated statement, then the older library. diff --git a/skills-staging/2026-07-30-campaign-ops/UNCERTAINTY.md b/skills-staging/2026-07-30-campaign-ops/UNCERTAINTY.md new file mode 100644 index 0000000..fd0d081 --- /dev/null +++ b/skills-staging/2026-07-30-campaign-ops/UNCERTAINTY.md @@ -0,0 +1,132 @@ +# UNCERTAINTY — campaign-ops library (2026-07-30) + +Findings that are useful but cannot be stated authoritatively. Each +entry: claim / where it appeared / repo evidence / status / why +uncertain / what would resolve it / issue created? Every entry ends in +a safe default a zero-context reader can act on. + +## 1. Untracked private transcripts at the repo root +- Claim: `chat-history.md` and `security-enhancement.md` (both full + session transcripts — private content) sit untracked in the public + repo's working tree; any stage-everything command would publish + them. +- Appeared: the session's closing report flagged + `security-enhancement.md` to the owner and asked for a disposition; + no answer had arrived by session end. `chat-history.md` appeared + after that session (it is that session's own transcript). +- Repo evidence: both present and untracked on 2026-07-30 + (`git status --short`); never in any commit; `92314a6`'s message + names the exact threat ("a stray `git add -A`"). +- Status: verified (existence/exposure risk); **user-must-provide** + (disposition). +- Resolves it: owner picks a `.gitignore` pattern or relocates the + files out of the repo. `.gitignore` is outside this delivery's + allowed paths. +- Issue: yes — #100 (created 2026-07-30, single consolidated issue): + https://github.com/F-e-u-e-r/opus-pack/issues/100 +- Safe default: never stage them; pathspec-only adds; never quote + their content anywhere public. + +## 2. Exact wording of the standing gate cadence +- Claim: grok-4.5 high + gpt-5.6-luna ultra every round; gpt-5.6-sol + max on "every 3rd round + pre-commit" (session-memory phrasing). +- Repo evidence: #90's body "gpt-5.6-sol max from r3" (fold commits + show sol at r3 then r6–r11, the terminal candidates); #93's body + "r2 pre-commit (grok + luna + sol-max)"; for #97 the cadence line + lives in its constituents' evaluation comments ("gpt-5.6-sol max + from r2"), not the body. All consistent with the phrasing; none + states it as a standing rule. +- Status: **partially-verified** (pattern verified across three + campaigns; the governing rule text is owner-set, session-recorded). +- Resolves it: owner confirmation, or the next campaign PR body. +- Safe default: run sol on every 3rd, every pre-commit, and every + terminal-candidate round; when unsure, include sol — an extra lens + costs a round, a missing lens costs the gate's meaning. + +## 3. Merge-bypass mechanics ("admin merge") +- Claim: campaign merges used the owner's admin authority to bypass + required review. +- Repo evidence: #90/#93/#97 all show reviewDecision REVIEW_REQUIRED + with zero reviews, yet merged — a bypass demonstrably occurred. +- Status: bypass **verified**; the exact mechanism (gh `--admin` + flag, ruleset bypass list contents) **user-must-provide** (ruleset + config needs owner/admin access to read). +- Resolves it: owner states the flag/ruleset arrangement. +- Safe default: a session never merges without the owner's ask for + that campaign; if a merge is blocked, surface the blocker — do not + probe for bypass paths. + +## 4. `skill-vetting` absent from both live installs +- Claim: deliberate pending-adoption state (the advisory hook is + opt-in; "Workstream B"), not an overlooked sync failure. +- Repo evidence: `skills/skill-vetting/` exists; both live installs + lack it (diffs run 2026-07-30); README documents the hook as + optional. Intent is session/memory-recorded only. +- Status: state **verified**; intent **user-must-provide**. +- Resolves it: owner either installs it or records the deferral. +- Safe default: do not install or uninstall it yourself; expect the + README sync loop to error on exactly this directory. + +## 5. The 2026-07-12 local library's stale spots +- Claim: the older root-level `skills-staging/` library (local-only, + gitignored) is stale where it overlaps current practice. +- Verified examples (2026-07-30): its release-and-publish requires a + version bump per substantive PR (contradicted by #84–#97 at + 0.1.16); its re-verify command greps `README.zh-TW.md` (renamed + `README.zh-Hant.md` in `c15c29d`-era work — the old path no longer + exists); its gate-ops file records the 2026-07 lineup gpt-5.5 + + grok-4.5 max (differs from the campaign lineup; both are + date-stamped volatile by their own rules). +- Status: **historically-valid**; the files are the owner's local + scratch, not touched by this delivery. +- Resolves it: an owner-sanctioned refresh or retirement of the old + library. +- Safe default: for overlapping topics, canon skills win, then this + dated library; verify any old-library command against the repo + before running it. + +## 6. The sol-unverified r11 folds in #90 +- Claim: the final two r11 folds (`git add --` hardening; the + fast-forward scope sentence) merged without sol re-review. +- Repo evidence: the two folds are named in `83a038d`; #90's body + discloses that the final two folds land sol-unverified without + naming them; grok/luna never objected; CI green. +- Status: **verified** as a disclosed, accepted residual. +- Resolves it: nothing owed; a future finding against those folds is + a new finding. +- Safe default: do not re-open #90's gate; treat the disclosure as + the record. + +## 7. Evaluation comments — verification depth +- Claim: all nine constituent PRs (#85–#89, #91, #94–#96) carry a + maintainer evaluation comment. +- Repo evidence: #85, #94, #96 read in full on 2026-07-30 (shape and + no-owner-quotes confirmed); the remaining six confirmed present the + same day with matching "Evaluation record (maintainer)" openers + (on #86 it is the SECOND comment — the first is the contributor's). +- Status: **verified** (presence, all nine; full-text read, three). +- Resolves it further: read the remaining six in full before citing + their details. +- Safe default: when writing new evaluation comments, follow the + three fully-read ones' shape. + +## 8. Session-memory phrase "evals/round4 … COMMITTED" +- Claim (memory, 2026-07-23): round-4 eval design "committed". +- Repo evidence: `evals/` is gitignored with zero tracked files + (2026-07-30) — nothing eval-related is committed to this repo. +- Status: memory claim **unverified as written**; repo state + verified. Likely loose wording for "written to the private evals + tree". +- Resolves it: owner's private tree; not resolvable here. +- Safe default: treat `evals/` as private and ignored; never cite a + tracked evals path. + +## 9. This library's own delivery mechanism +- Claim/process note: delivering skills under a gitignored path + required `git add -f`, per the explicit retiring-architect task + instruction; `.gitignore` was not modified. +- Status: verified (this delivery). +- Safe default: this is NOT precedent for publishing other ignored + zones (`evals/`, `internal/`, `.claude/`, `guideline*.txt`, + `pack-eval-artifacts/`) — those stay private absent the same kind + of explicit owner instruction. diff --git a/skills-staging/2026-07-30-campaign-ops/contribution-gate-playbook/SKILL.md b/skills-staging/2026-07-30-campaign-ops/contribution-gate-playbook/SKILL.md new file mode 100644 index 0000000..5cd78db --- /dev/null +++ b/skills-staging/2026-07-30-campaign-ops/contribution-gate-playbook/SKILL.md @@ -0,0 +1,158 @@ +--- +name: contribution-gate-playbook +description: Load when contributor PRs are open on F-e-u-e-r/opus-pack and the owner asks to review, integrate, or merge them (any "follow our previous practice" form), or when a combined-*/integrate-* branch exists with its constituent PRs still open. Not for authoring doctrine (doctrine-change-conventions) or judging individual lens verdicts (gate-adjudication-and-folds). +--- + +# Contribution Gate Playbook + +The observed, repo-verified pipeline that took #85–#89 → PR #90 +(`a148180`), #91 → PR #93 (`92077a7`), and #94–#96 → PR #97 (`79ca49c`) +on 2026-07-29/30. Canonical gate doctrine is +`skills/cross-model-review/SKILL.md` — this file only pins how THIS +repo runs it. On any disagreement, the canon skill wins. + +## Step 0 — pin the campaign set + +Trigger: the owner's ask arrives. + +- The set = the PRs open at instruction time (`gh pr list --state + open`). Record the numbers before touching anything. +- A PR that opens mid-campaign is NOT swept in. Precedent: #91 opened + 2026-07-29T22:18Z, before #90 merged (23:34Z); it was excluded from + #90, flagged to the owner, and handled as its own campaign (#93). +- The owner's ask authorizes THIS set; a later set needs a fresh ask + (operational-rigor §2, per-invocation grant). + +## Step 1 — verify each PR's verifiable claims + +- Every repo-facing claim in a PR's text (a commit id, a section + number, a "main already says X") is checked against the repo BEFORE + the gate. Precedent: #85's `8f8413f` incident claim was verified + in-repo, and the check is recorded in #85's evaluation comment. +- A claim that fails verification is a finding to surface and + adjudicate, not something to silently fix or silently accept. + +## Step 2 — build the combined branch + +- One integration branch from current main, named by joining the PR + numbers — `combined-85-86-87-88-89`, `combined-94-95-96` (multi-PR) + or `integrate-91` (single PR) are the observed forms. +- Bring each PR's head branch local first (`gh pr checkout ` + handles fork PRs too; the campaign merge commits show `pr-` + local branch names). Merging every head into the combined branch is + what closes each constituent by reachability once the combined PR + merges (observed on #85–#89 and #94–#96; GitHub marks them MERGED). + Merge ASCENDING (lowest number first) — the house convention that + keeps Provenance-entry stacking orderly. +- Provenance-tail conflicts are the expected conflict shape: stack + both entries in PR order and reconcile with zero content loss (read + both sides in full; nothing dropped silently). + +## Step 3 — integration fixes, before round 1 + +Integrator additions are separate commits, named as integration +fixes, and are gate-reviewed like all other content. The recurring +three (commits `f529014`, `814d116`): + +- in-body `unprobed` markers on clauses carrying only a + Provenance-level label (the covenant's standing form); +- rewrap added lines over 80 characters without changing words; +- Provenance blank-line normalization (house continuous-prose style). + +## Step 4 — checks green at every commit + +- `python3 .github/checks.py` green before every push. The campaign + PR bodies record checks green at every (fold) commit as the norm. + +## Step 5 — run the gate rounds + +- Lens lineup as run 2026-07-29/30 — a dated OPERATING RECORD, not a + lineup to trust (the canonical rule is cross-model-review §1: + discover reviewers at session time; the concrete run recipes are + owner-personal and are NOT in this repo — ask the owner): grok-4.5 + high + gpt-5.6-luna ultra EVERY round; gpt-5.6-sol max joining + every 3rd round, pre-commit rounds, and terminal-candidate rounds. + Each campaign's records state its own cadence (PR #90/#93 bodies; + for #97, its constituents' evaluation comments) — the newest + campaign's record is the freshest statement; the standing wording + is owner-set (UNCERTAINTY item 2). +- Lenses run as background CLI jobs writing verdict files. An empty + or still-writing file is NOT a verdict; wait for the completion + signal, then read the file. +- Each round's packet carries the current diff and the cumulative + disposition ledger of prior rounds' folds and rejections. +- Judge what comes back per `gate-adjudication-and-folds`. + +## Step 6 — reach a terminal state + +- Normal close: TRIPLE PROCEED — every lens PROCEED in the SAME round + (#93 r2; #97 r3). +- Non-convergence close: the bounded-loop close (cross-model-review + §4 is the canonical loop bound; `gate-adjudication-and-folds` has + this repo's precedents). Residuals are disclosed in the PR body. + +## Step 7 — combined PR, CI, merge + +- Push the branch; open ONE combined PR. Body shape: "What lands" per + constituent / "Review gate" (rounds, lenses, fold trajectory, + rejections) / "Integration notes" — the #90 shape; #93/#97 carry + the same three blocks with lighter headings. +- Wait for the three CI checks (consistency, hook-suites, + gate-template) by reading state directly — `gh pr checks 97`, + substituting the campaign PR number; do not hand-roll wait loops + (`failure-archaeology` entry 1). +- Merge as a merge commit, and ONLY on an owner ask whose words cover + MERGING this campaign — write the AUTH line first (operational-rigor + §2); this playbook is never that authorization. An owner ask to + merge does not skip the CI wait: report pending checks and merge on + green, or on the owner's explicit go given the pending state. + Observed record, not a norm to reuse: the three campaign merges + landed with reviewDecision REVIEW_REQUIRED and zero reviews — an + owner-side bypass whose exact mechanism is not readable from here + (UNCERTAINTY item 3). If a merge is blocked, surface the blocker; + never probe for bypass paths. + +## Step 8 — post-merge duties (all of them, in order) + +1. Evaluation comment on EVERY constituent PR — maintainer-record + shape: what was verified for that PR / gate folds applied to its + text / final decision + merge SHA. Never quote the owner's + messages (`repo-boundaries-and-sync`). +2. Sync the live skill copies and cmp-verify at the merge SHA + (`repo-boundaries-and-sync` has the current expected state). +3. Probe debt: new `unprobed` markers are ALREADY the live queue — + issue #92's canonical view is a grep, so there is no hand-kept + list to update. +4. Update session memory with the campaign record. + +## Done definition + +Every constituent PR shows MERGED; the combined merge commit is on +main with CI green; an evaluation comment sits on every constituent; +live installs cmp-clean per the current expected state; no +private-zone path appears in any pushed commit (`git show --stat` on +each). + +## When NOT to use this skill + +- The owner asked a question about a PR (assess, don't integrate). +- The change is yours, not a contributor's — the gate doctrine still + applies via cross-model-review, but the combined-branch and per-PR + comment mechanics here assume third-party PRs. + +## Provenance + +Distilled 2026-07-30 from the 2026-07-29/30 session transcript +(`chat-history.md`, local) and verified same-day against: PR +#90/#93/#97 bodies and merge commits `a148180`/`92077a7`/`79ca49c`; +evaluation comments on all nine constituent PRs (three read in full, +six confirmed present with matching openers — UNCERTAINTY item 7); +issue #92; commits `f529014`/`814d116`/`6fa6154`/`5fa241b`/`83a038d`/ +`1560b97`; `.github/checks.py`; `.github/workflows/checks.yml`; +`gh pr view --json reviewDecision,reviews`; `gh pr view 91 --json +createdAt`. + +Re-verify: `gh pr view 97 --json body --jq .body | head -45` — and if +a newer combined/integrate PR exists, read the newest body instead; +practice evolves campaign by campaign and the PR bodies are its +freshest public record. diff --git a/skills-staging/2026-07-30-campaign-ops/doctrine-change-conventions/SKILL.md b/skills-staging/2026-07-30-campaign-ops/doctrine-change-conventions/SKILL.md new file mode 100644 index 0000000..913b36b --- /dev/null +++ b/skills-staging/2026-07-30-campaign-ops/doctrine-change-conventions/SKILL.md @@ -0,0 +1,104 @@ +--- +name: doctrine-change-conventions +description: Load when adding or editing rule text under skills/*/SKILL.md or design-pack/skills/*/SKILL.md that is heading for a commit or merge — including applying an already-adjudicated gate fold, writing a Provenance entry, adding a rule that has no probe yet, or resolving a Provenance merge conflict. +--- + +# Doctrine Change Conventions + +What any doctrine diff in this repo must satisfy beyond the canon +skills (`skills/skill-authoring` is canonical for method; the README +"House covenant" paragraph for the probe policy). Every item below was +verified against the repo on 2026-07-30. + +## The covenant pairing (in-body marker + Provenance entry) + +- README House covenant, quoted verbatim (2026-07-16): "a new + behavioral rule ships with the probe or trap that would have failed + without it, or it ships explicitly labeled `unprobed`." +- The standing form here is BOTH pieces: an in-body marker at the + clause — ``(`unprobed` — see Provenance.)`` — AND a Provenance + entry. A clause carrying only the Provenance-level label gets the + in-body marker added as an integration fix (`f529014`: "#94 and #96 + already carried theirs"; `814d116` added six for the #85–#89 + batch). +- Provenance source labels in current use: `contributor-reported, not + linkable` (private evidence) and `repo-verifiable` (cite the + commit/PR). External measurements are additionally glossed "cited + as shape" — a qualifier phrase, not a label — when another + project's numbers are described without restating them as this + repo's own evidence. +- Probe debt needs no ledger edit: issue #92's canonical live view is + `grep -rn 'unprobed' skills/*/SKILL.md`. The issue stays open while + any marker exists; a marker leaves only by a probe-result + write-back or a recorded demotion/decline (see #92's body). Note + the grep's scope is `skills/` only — a design-pack marker would + escape it; extend the sweep when editing design-pack doctrine (the + gap is #92's mechanism, recorded here). + +## Line and glyph norms + +- Added lines stay ≤80 characters, counted in CHARACTERS. This is a + review-enforced house norm recorded in the campaign PR bodies (#90: + "added lines all ≤80 characters"; #93/#97: "added lines ≤80 chars") + — it is NOT enforced by checks.py (verified 2026-07-30: checks.py + contains no width check). Rewrap without changing words. +- Glyphs: checks.py bans invisible/bidi/Tag-Block characters across + ALL tracked files, failing closed on anything it cannot decode. + Ordinary visible Unicode is house-normal — a gate finding claiming + `→` was banned was rejected on an occurrence count plus the + checks.py class read (worked example and counts: + `gate-adjudication-and-folds`, Rejections section). + +## Provenance house style + +- Continuous prose: no blank lines inside a Provenance section + (normalized during the #86 merge resolution; recorded in + `814d116`). +- Entries append chronologically; a merge conflict at the section + tail is the expected shape — stack entries in PR order. + +## Version policy (date-stamped 2026-07-30) + +- Doctrine-only merges do NOT bump the version: `0.1.16` was set + inside PR #83 (commit `32c6929`) and is unchanged through #84–#97. + The 2026-07-12-era "bump every substantive PR" convention is + historical, superseded by observed practice. +- Git tags still end at `alpha-0.1.2`; versioning lives in the README + badge AND "Early alpha" callout lines (both languages), + `plugin.json`, and `marketplace.json` — six sites per `32c6929`'s + own message; checks.py check 2 enforces their agreement, so a bump + touches all sites together or CI fails. + +## Pre-push check + +- Run `python3 .github/checks.py` locally before every push. Know its + scope: frontmatter checks cover the marketplace-declared skill + roots (`skills/`, `design-pack/skills/`) via the working tree; the + hidden-directive sweep covers every git-tracked file; there is no + line-width or prose-style check — those are review duties. + +## Done definition + +checks.py green; every new behavioral clause carries the in-body +marker paired with a Provenance entry that names its source label; +added lines ≤80 characters; no version bump unless the owner asked +for one. + +## When NOT to use this skill + +Judging reviewer findings about your text → +`gate-adjudication-and-folds`. Campaign mechanics → +`contribution-gate-playbook`. General authoring method (triggers, +dup-check, compaction) → `skills/skill-authoring` (canonical). + +## Provenance + +Distilled 2026-07-30 from the session transcript; verified same-day +against: README House covenant paragraph; issue #92 body; commits +`f529014`/`814d116`/`32c6929`; `.github/checks.py` (read in full for +the width/glyph scope claims); `git tag -l`; the version badge lines +in both READMEs; PR #90/#93/#97 bodies. + +Re-verify: `python3 .github/checks.py && gh issue view 92 --json +state --jq .state` (expect "all checks passed" and OPEN while any +`unprobed` marker exists). diff --git a/skills-staging/2026-07-30-campaign-ops/failure-archaeology/SKILL.md b/skills-staging/2026-07-30-campaign-ops/failure-archaeology/SKILL.md new file mode 100644 index 0000000..6afeef9 --- /dev/null +++ b/skills-staging/2026-07-30-campaign-ops/failure-archaeology/SKILL.md @@ -0,0 +1,114 @@ +--- +name: failure-archaeology +description: Load when about to wait on CI in a hand-rolled loop, ship a doctrine line that states runtime behavior, adopt or delete a leftover local branch, add a contributor clause without a probe marker, or re-open something this session settled (version bumps, mid-campaign PRs, the sol r11 residue, the untracked transcripts). +--- + +# Failure Archaeology — 2026-07-29/30 session + +Dead ends, traps, and residue from the contributor-PR campaign +session, so no future agent re-walks them. Entry fields per the +project-skill template: disposition / what happened / mechanism / +standing rule / residue location. + +## 1. dead — hand-rolled CI wait loop + +- What: an until-loop ("wait until no check is pending") was launched + to wait for PR #90's CI, then stopped; the session's own live note + hedged that an inverted loop condition would return early. A + transient API error landed in the same window. (Transcript-recorded + only — the stopped loop left no repo artifact.) +- Mechanism: a hand-written wait predicate is unverifiable from the + outside — when it exits you cannot distinguish "done" from + "predicate wrong", and a mid-wait interruption leaves no state. +- Standing rule: read CI state directly and re-derive on every + resume — `gh pr checks ` — instead of encoding the wait + condition in a loop you cannot test. The session's later CI waits + (#93, #97) completed as plain background status checks. +- Residue: none (the loop was stopped; nothing landed). + +## 2. dead — untested runtime-semantics text in #96 (fixed in gate) + +- What: contributor text asserted `os.environ["KEY"]` "silently reads + empty" in non-interactive shells, and its ❌ example used `'\\n'` + inside single quotes. +- Mechanism: prose about runtime behavior that nobody had executed. + Both lenses converged on the KeyError correction (r1); sol+luna + refined `.get()` → `None` (r2); a lens executed the printf example + and showed `'\\n'` emits a literal backslash-n, so the example + could never produce the incident it described. +- Standing rule: runtime claims in doctrine get executed verification + before shipping (`gate-adjudication-and-folds`). +- Record: `6fa6154`, `5fa241b`, PR #97 body, #96's evaluation + comment. + +## 3. recurring-trap — covenant markers missing on contributor clauses + +- What: #95's clause carried only the Provenance-level label + (`f529014`); the #85–#89 batch needed six in-body markers added + (`814d116`); a sweep found five Provenance entries missing the + contributor-reported label (#90 body). +- Mechanism: contributors satisfy the covenant at the Provenance + level and miss the in-body standing form; every batch re-imports + the same gap. +- Standing rule: sweep new clauses for marker + label pairing as an + integration fix BEFORE gate round 1 (`doctrine-change-conventions`). +- Tripwire: a new clause whose opening sentence lacks the marker + while its Provenance entry says unprobed. + +## 4. recurring-trap — your own folds introduce defects + +- What: #90's gate caught the staged-diff gate's circular trigger + (the catch is named in #90's body; that an earlier fold introduced + it is session-recorded). +- Standing rule: folds are attack surface for the next round; no + terminal close on unreviewed folds outside the disclosed + bounded-loop residual (`gate-adjudication-and-folds`). + +## 5. residue, not in-progress work — local branch graveyard + +- What (observed 2026-07-30): local branches with deleted upstreams + (`[origin/…: gone]`: integrate-pr62-65, integrate-pr68-69, + phase-a…d, hook-*, delegation-*) plus never-pushed mine-* and + pr3x-review branches from earlier mining campaigns. +- Standing rule: residue — do not adopt-and-finish, do not delete + without the owner's ask (cleanup mutates the owner's workspace; + operational-rigor §2). Observed mechanics: this repo merges with + TRUE merge commits, so `git branch --merged main` DOES list all of + these branches as merged (verified 2026-07-30: 37 of 37) — + reachability is the authoritative signal here. The canonical + squash-merge caveat ("squash defeats `--merged`") applies to + squash-based repos, not to this one's observed history. The + never-pushed mine-*/pr3x-review branches are also listed as merged + — their content landed via other branches; still residue, not live + work. +- Residue location: `git branch -vv` on the owner's machine. + +## Deliberately-not-done (do not "helpfully" complete) + +- No version bump for #84–#97 — doctrine-only merges do not bump + (`doctrine-change-conventions`). Do not "fix" the badge forward. +- #91 was NOT merged into #90 although it was open before #90 merged + — mid-campaign arrivals stay out of the pinned set + (`contribution-gate-playbook` step 0). It got its own campaign + (#93) instead. +- No r12 for #90 — sol's r11 residue closed under the bounded-loop + precedent and ships labeled `sol-unverified` in the PR body. Do not + re-open the campaign to "finish" sol's convergence; a future + finding against those two folds is a NEW finding, handled fresh. +- `security-enhancement.md` and `chat-history.md` stay untouched at + the repo root — owner disposition pending (issue #100; + `UNCERTAINTY.md` item 1). Do not move, stage, or edit them. + +## Re-verify + +`git branch -vv | grep -c ': gone'` (nonzero = residue still +present) and `gh pr view 90 --json body --jq .body | grep -n +'sol-unverified\|bounded'` (the disclosed residual is still the +record). Entry 5's branch list is machine-local — re-observe it +rather than trusting this file's snapshot. + +## Provenance + +Distilled 2026-07-30 from the session transcript; commits, PR bodies, +and comments cited inline were re-read in-repo the same day; the +branch list was observed directly (`git branch -vv`, 2026-07-30). diff --git a/skills-staging/2026-07-30-campaign-ops/gate-adjudication-and-folds/SKILL.md b/skills-staging/2026-07-30-campaign-ops/gate-adjudication-and-folds/SKILL.md new file mode 100644 index 0000000..526b2a4 --- /dev/null +++ b/skills-staging/2026-07-30-campaign-ops/gate-adjudication-and-folds/SKILL.md @@ -0,0 +1,121 @@ +--- +name: gate-adjudication-and-folds +description: Load when a cross-model lens verdict has landed for a doctrine change in this repo and you must decide fold, reject, or stop — including when two lenses propose opposite fixes for one finding, when one lens keeps producing must-fixes after the others hold PROCEED, or when a finding asserts runtime or tool semantics. +--- + +# Gate Adjudication and Folds + +Canonical verdict rules: `skills/cross-model-review/SKILL.md` +(findings are claims, §3; the loop is bounded, §4). This file pins the +adjudication patterns the 2026-07-29/30 campaigns used, each with its +public record. On disagreement, the canon skill wins. + +## Fold discipline + +- Reproduce a finding against the actual file/repo before folding it. +- Fold commits are named `Fold gate rN: ` — single-PR campaigns + prefix the target, e.g. `Fold #91 gate r1: …` — and state which + lens produced each item and why the fix is right (see `6fa6154`, + `5fa241b`, `83a038d`, `1560b97`). +- Your own folds are attack surface for the NEXT round: #90's gate + caught the staged-diff gate's circular trigger, a defect an earlier + fold itself introduced (the catch is listed in #90's body; the + fold-introduced attribution is session-recorded). Do not close on a + round whose folds no lens has seen, except under the bounded-loop + close below, where exactly that residual is disclosed by name. + +## Rejections carry in-repo counter-evidence + +- A reviewer finding you reject gets a recorded counter-fact in the + fold commit and PR body. #90's body records the aggregate — "7 + findings rejected with in-repo counter-evidence"; the two worked + examples below are session-recorded, their counter-facts re-derived + in-repo 2026-07-30: + - a lens called `→` a banned glyph — rejected by reading checks.py's + banned class (invisible/bidi/Tag-Block only; U+2192 is not in it) + and counting occurrences on main (plentiful: 107 hits in + `skills/*/SKILL.md` at the pre-#90 main); + - a lens called a line over-wide — rejected with the character + count (78; the house norm counts characters, not bytes). +- No counter-evidence found = it is not a rejection; it is still an + open finding. + +## Runtime-semantics findings get EXECUTED verification + +- When doctrine text asserts what a runtime does, execute it before + the claim ships. Precedent chain on #96: the draft said the bracket + form "silently reads empty" — execution shows `os.environ["X"]` + raises KeyError; `.get()` returns `None`; an unguarded shell `$X` + expands empty (r1 converged must-fix + r2 refinement, `6fa6154`, + `5fa241b`). A lens also executed the ❌ example and showed `'\\n'` + inside single quotes emits a literal backslash-n — the example + could never produce the incident it described. +- Rule: a doctrine line stating tool/runtime behavior is a claim to + verify by execution, not prose to wordsmith. This applies to YOUR + folds too — the r2 refinement corrected an r1 fold's attribution. + +## Opposite-fix convergence → adjudicate by the protected property + +- Two lenses converged on the SAME gap in #91 (the durable/ephemeral + overlap for "gitignored but externally archived" paths) with + OPPOSITE precedence fixes. Adjudication anchored on what the rule + protects — a later reader's ability to resolve the citation — so + check-ignore wins: an ignored working path is ephemeral even when + an external archive preserves it; cite the archive itself. Recorded + in PR #93's body, the fold commit `1560b97`, and #91's evaluation + comment — the comment publicly states that the two lenses proposed + opposite precedences. +- Rule: when converged fixes conflict, derive the answer from the + rule's protected property, not from either lens's framing — and + record the adjudication where the next maintainer will read it. + +## Terminal conditions + +- TRIPLE PROCEED: every lens PROCEED in the same round (#93 r2, + #97 r3). The normal close. +- Bounded-loop close (non-convergence): canon caps the loop and sends + a non-converging gate to a human with the trail (cross-model-review + §4 — on disagreement it wins). The house application, owner-set in + the 2026-07-23 twelve-round campaign (PR #61 era) and re-applied in + #90: a campaign may run past canon's 2–3-round cap only under the + owner's standing campaign mandate; when one lens keeps producing + must-fixes while the gate otherwise converges (#90's public record: + grok PROCEED r5–r11, luna PROCEED r7/r9/r11, sol still finding + last-mile items), declare the close condition before the terminal + round (session-recorded for #90 at r8; the public record is the + close itself), execute it, apply the final folds labeled + `-unverified`, and put the close AND its named residuals in + front of the owner — in the PR body's Review gate section and the + campaign report (`83a038d`; #90 body). A close that leaves + residuals is surfaced, never silent. +- The two failure shapes this bounds: unbounded re-review (no + terminal proof ever arrives) and silent early close (residue + undisclosed). The bound plus named-residual disclosure avoids both. + +## Done definition + +Every lens finding for the round is folded (commit cites it), +rejected (counter-evidence recorded), or explicitly carried into the +next round's packet; a terminal state was reached by one of the two +closes; the PR body's "Review gate" section states the trajectory, +the rejections, and any unverified residuals by name. + +## When NOT to use this skill + +Pipeline mechanics (branching, CI, merge, comments) → +`contribution-gate-playbook`. What the doctrine text itself must +satisfy → `doctrine-change-conventions`. + +## Provenance + +Distilled 2026-07-30 from the session transcript; verified same-day +against PR #90/#93/#97 bodies, the #91/#96/#85 evaluation comments, +and commits `6fa6154`/`5fa241b`/`83a038d`/`1560b97`. Session-recorded +specifics (public anchors in parentheses): the `→`/78-char rejection +details (#90's body carries the aggregate rejections line), the r8 +close pre-declaration (the body carries the close itself), and the +fold-introduced attribution of the circular trigger (the body lists +the catch). The `→` occurrence count was re-run in-repo 2026-07-30. + +Re-verify: `git log --oneline --grep='Fold' -10` and the newest +combined PR body's "Review gate" section. diff --git a/skills-staging/2026-07-30-campaign-ops/repo-boundaries-and-sync/SKILL.md b/skills-staging/2026-07-30-campaign-ops/repo-boundaries-and-sync/SKILL.md new file mode 100644 index 0000000..97c45e2 --- /dev/null +++ b/skills-staging/2026-07-30-campaign-ops/repo-boundaries-and-sync/SKILL.md @@ -0,0 +1,116 @@ +--- +name: repo-boundaries-and-sync +description: Load before staging or committing anything in this working tree, after any merge that touches skills/ (live-copy sync duty), when a sync or diff check reports an unexpected missing directory, or when an untracked file sits at the repo root. +--- + +# Repo Boundaries and Sync + +## Boundary map (verified 2026-07-30) + +Published (tracked): + +- `skills/`, `design-pack/` — pack source (the marketplace roots). +- `hooks/`, `.github/`, `.claude-plugin/` — enforcement, CI, + manifests. +- `reviews/` — public review and threat-model records. +- `README.md`, `README.zh-Hant.md`, `LICENSE`, + `THIRD-PARTY-NOTICES.md` — docs; the two READMEs mirror each other. + +Gitignored (private — does not publish by default): + +- `evals/`, `internal/`, `pack-eval-artifacts/`, `guideline*.txt` — + fixtures burn on exposure; owner-private notes and drafts. These + NEVER publish. +- `.claude/` — live install + settings. +- `skills-staging/` — retiring-architect scratch (`92314a6`); + publishes only on explicit owner instruction. + +## The working tree is permanently dirty-adjacent + +- The repo root can carry UNTRACKED private session transcripts. On + 2026-07-30 it holds `chat-history.md` and `security-enhancement.md` + (both full session transcripts — private content). Neither has ever + entered a commit. +- Standing defense: stage by explicit pathspec, always + (`git add -- `); never any stage-everything form. The + gitignore commit for skills-staging states the exact threat in its + own message: it "keeps a stray `git add -A` from publishing" + private content (`92314a6`). +- The transcripts' disposition (ignore pattern vs relocation) is the + owner's pending decision — tracked in issue #100 (`UNCERTAINTY.md` + item 1). Do not stage, quote, relocate, or edit them; quoting them + in any public artifact also breaks the rule below. + +## No owner quotes in public artifacts + +- Standing owner directive (recorded 2026-07-24, applied throughout + 2026-07-29/30): the owner's message wordings never appear in PR + bodies, commit messages, PR/issue comments, or any published file. + Evaluation comments describe facts, findings, and decisions only. + AUTH quotes live in session reports to the owner, nowhere public. +- Verified against practice: the sampled evaluation comments on + #85/#94/#96 contain no owner quotes. + +## Live-copy model and sync duty (three locations) + +- `skills/` — the publish source (tracked). +- `.claude/skills/` — repo-local live install (gitignored). +- `~/.claude/skills/` — global install (outside the repo). +- The README Maintainer Notes' sync contract is canonical (on any + divergence from this file, the README wins): after editing any + SKILL.md, sync (`cp -R skills/. .claude/skills/`) and run the + per-skill diff loop before pushing. +- TEMPORARY overlay on that contract (delete this bullet when + UNCERTAINTY item 4 is settled): today the blanket `cp -R` would + ALSO install `skill-vetting`, closing the known gap without the + owner's decision. Until the owner settles it, copy the changed + skill directories explicitly (`cp -R skills/ + .claude/skills/`), skipping `skill-vetting`; do the same for the + global copy (`~/.claude/skills/`), then cmp-verify both at the + merge SHA (campaign practice, recorded in the close reports). +- Current expected state (2026-07-30) — this file is the SINGLE HOME + for it; START-HERE/MANIFEST/UNCERTAINTY point here. Update this + file first when the state changes: `skill-vetting` exists in + `skills/` but in NEITHER live install, so the README loop errors on + exactly that one directory. Known pre-existing state (the advisory + hook ships opt-in; install pending an owner decision) — not drift + you introduced. Every other skill dir cmp-clean at `79ca49c`. +- Removing or renaming a published skill: delete its old dir from the + live installs by hand in the same change — `cp -R` never deletes + (README Maintainer Notes). + +## Done definition + +Nothing from a gitignored/private zone appears in the staged set +(`git status` read, not assumed); every commit was staged by +pathspec; after a merge, both live installs match `skills/` except +the known `skill-vetting` gap — or that gap was closed deliberately +by the owner, in which case update this file's expected state. + +## When NOT to use this skill + +Deciding whether content may ship at all (covenant, markers, width) +→ `doctrine-change-conventions`. Campaign mechanics → +`contribution-gate-playbook`. + +## Provenance + +Distilled 2026-07-30 from the session transcript; verified same-day +against: `.gitignore` + `git check-ignore`; `git ls-files` top-level +enumeration; `92314a6`'s commit message; the two transcripts' +presence and untracked status (`git status --short`); README +Maintainer Notes; live-copy diffs run 2026-07-30 (both installs +differ from `skills/` only in `skill-vetting`); evaluation comments +(three read in full, all nine confirmed present). + +Re-verify: + + git status --short + for d in skills/*/; do + diff -rq "$d" ".claude/skills/$(basename "$d")" + done + +(expected today: the two `??` transcripts, one error line for +`skill-vetting`, and — until the delivering PR merges — this +library's own tracked entries; anything else is new state — +investigate before acting).