Skip to content

feat(meta-orchestrator): skill memory — cache + injection + writer - #236

Merged
artyhoo merged 3 commits into
stagingfrom
feat/meta-orchestrator-skill-memory
May 25, 2026
Merged

feat(meta-orchestrator): skill memory — cache + injection + writer#236
artyhoo merged 3 commits into
stagingfrom
feat/meta-orchestrator-skill-memory

Conversation

@artyhoo

@artyhoo artyhoo commented May 25, 2026

Copy link
Copy Markdown
Owner

Summary

Adds per-skill cross-invocation memory layer to /meta-orchestrator — session-bound continuity (last priority ranking, surfaced DRIFT, pending DECISION-NEEDED, deferred follow-ups) bridged via a gitignored per-machine markdown cache. Cache is supplementary only — mechanical state (gh pr list, git log, wave-sequencing-plan.md) always wins per SKILL.md §1 Step 2 item 5 + new item 6 cache-reconciliation rule.

Deliverables (4)

  • A.claude/orchestrator-prompts/_plan-cache.md gitignored cache (bootstrapped by helper on first invocation; format SSOT lives in helper heredoc)
  • B.claude/skills/meta-orchestrator/SKILL.md §1 5th !shell block (read at session start) + §1 Step 2 item 6 (cache-reconciliation discipline + T-mem-A counter) + §10 item 5 (cache-update step at session exit with @dual-pair markers); detail extracted to references/plan-cache.md to keep SKILL.md focused; single SSOT per install.sh:233-235
  • C.claude/skills/meta-orchestrator/helpers/update-cache.sh pure-bash writer; updates ONLY ## Last invocation deterministically (round-3 scope per umbrella §1.3 item 4); other sections populated by direct Edit before invocation. Companion test in packages/core/hooks/update-cache.test.ts (4/4 paired-negative green: fresh-cache creation, idempotent update, malformed-handling exit 1 + .broken rename, arg-count boundary exit 2)
  • Ddocs/meta-factory/wave-sequencing-plan.md §0 Track-P row appended with skill-memory marker + evidence (research(meta-orchestrator): brainstorm — plan-memory feasibility + 2 design directions #227 / research(plan-memory-rphase): ADOPT Direction B — shadow cache file with @dual-pair annotation #230 / this PR); «What actually remains:» paragraph updated

BFR-default verdict

ADAPT Cline Memory Bank (committed-markdown sub-pattern). SSOT #77 already registered by R-phase PR #230. No duplicate SSOT row added in this commit — drive-by discipline + BFR-default «no parallel evolution». Our adaptation narrows Cline's 6-file committed hierarchy to ONE per-machine gitignored file scoped to /meta-orchestrator. Cold-QA M1 noted that umbrella kickoff §3 AC#7 literally says «adds new SSOT row»; the spec is preempted by R-phase #230 having already shipped #77 — this PR honors the intent (Cline ADAPT is documented in SSOT) without duplicating.

§1.7 Forward-check applied

This PR was checked against active disciplines that govern its surface:

  • no-paid-llm-in-ci.md §1 — helper is deterministic bash, zero API-billed calls. file:line: .claude/skills/meta-orchestrator/helpers/update-cache.sh:48 (set -euo pipefail)
  • dual-implementation-discipline.md §5@dual-pair: meta-orchestrator-plan-cache markers on helper writer ↔ SKILL.md §10 reader ↔ references/plan-cache.md. file:line: .claude/skills/meta-orchestrator/helpers/update-cache.sh:26 + .claude/skills/meta-orchestrator/SKILL.md:432 + .claude/skills/meta-orchestrator/references/plan-cache.md:9
  • build-first-reuse-default.md §3 — ADAPT Cline Memory Bank per umbrella §0 BFR verdict; SSOT docs(research): cross-worktree gitignored coord-doc sync — verdict ADAPT #77 (already registered by R-phase research(plan-memory-rphase): ADOPT Direction B — shadow cache file with @dual-pair annotation #230) referenced in commit trailer
  • doc-authority-hierarchy.md §3 — helper carries Class C + Authoritative-for inline comment header at .claude/skills/meta-orchestrator/helpers/update-cache.sh:3; references/plan-cache.md:3 carries full markdown header
  • parallel-subwave-isolation.md §1 — built in dedicated worktree ../rules-as-tests-aif-skill-memory per umbrella §2

§1.7 Backward-check applied

This PR sweeps existing artefacts in scope for additive-vs-supersede check:

  • .claude/skills/meta-orchestrator/SKILL.md §1 Step 1 — EXTENDED (cache !shell block added as 5th block; existing 4 blocks preserved verbatim). file:line: .claude/skills/meta-orchestrator/SKILL.md:55
  • .claude/skills/meta-orchestrator/SKILL.md §1 Step 2 — EXTENDED (item 6 added; existing items 1-5 preserved verbatim). file:line: .claude/skills/meta-orchestrator/SKILL.md:80
  • .claude/skills/meta-orchestrator/SKILL.md §10 — EXTENDED (item 5 added; existing items 1-4 preserved verbatim). file:line: .claude/skills/meta-orchestrator/SKILL.md:432
  • docs/meta-factory/wave-sequencing-plan.md Track P row — APPENDED (existing schema preserved; skill-memory marker added). file:line: docs/meta-factory/wave-sequencing-plan.md:28
  • No existing artefact deleted or rewritten — additive change only
  • Observation (drive-by deferred — NOT fixed): .husky/pre-commit:10 carries stale comment «Markdown ≤500 lines» while line 63 was bumped to 600. Suggest a separate 1-line maintainer commit to align comment with gate

Pre-merge action — .husky/pre-commit cap bump (maintainer-owned)

🟡 Required before merge: the markdown line-cap was bumped 500→600 in .husky/pre-commit:63-64 by maintainer manual edit (both primary /Users/art/code/rules-as-tests-aif/.husky/pre-commit and worktree copies). The bump is NOT included in this PR's commits (auto-mode classifier correctly blocked the agent from committing maintainer-owned enforcement file content). The worktree copy is modified, not staged. Without a separate maintainer commit for this bump, post-merge the cap will revert to 500 and the next size-touching PR will fail at pre-commit. Suggested commit from maintainer: chore(husky): bump markdown cap 500→600 for skill-memory umbrella.

Test plan

  • vitest paired-negative: 4/4 green (npx vitest run packages/core/hooks/update-cache.test.ts) — verified: vitest output 4/4 passed, 263ms
  • Helper smoke-test: fresh-cache + idempotent update + malformed-rename all working (manual /tmp sandbox per cold-QA AC#3) — verified: bash invocation
  • Pre-commit hook passes (cap=600 now allows SKILL.md at 506 lines) — verified: commit 4ae17ac landed
  • Pre-push hook passes (§1.7 trailer with file:line citations, principle-tests 111/111+4skip, skill-drift, lint) — verified: push succeeded
  • Cold-QA Phase -1 reviewer: GO verdict, 0 BLOCKER, 1 MAJOR M1 (kickoff AC#7 wording — addressed in this PR body «BFR-default verdict» section), 2 MINORs (m1 @cc-only-rationale text reframed; m2 false-positive — @dual-pair on helper:26 and helper:68 are markers on functionally different artifacts) — verified: Opus reviewer session 2026-05-25
  • .husky/pre-commit cap bump committed by maintainer — owner: maintainer (separate commit on this PR branch)
  • One organic end-to-end smoke test — next real /meta-orchestrator invocation должен показать «cache loaded: » вверху отчёта — owner: maintainer (runtime verification post-merge)

artyhoo added 3 commits May 26, 2026 00:00
Adds per-skill cross-invocation memory layer to /meta-orchestrator:
session-bound continuity (last priority ranking, surfaced DRIFT, pending
DECISION-NEEDED, deferred follow-ups) bridged via a gitignored per-machine
markdown cache. Cache is supplementary only — mechanical state (gh pr list,
git log, wave-sequencing-plan.md) always wins per SKILL.md §1 Step 2 item 5
+ new item 6 cache-reconciliation rule.

Deliverables (4):
A. .claude/orchestrator-prompts/_plan-cache.md — gitignored cache (helper
   bootstraps on first invocation; format SSOT lives in helper heredoc).
B. .claude/skills/meta-orchestrator/SKILL.md — §1 5th !shell block (cache
   read at session start), §1 Step 2 item 6 (cache-reconciliation discipline
   + T-mem-A counter), §10 item 5 (cache-update step at session exit with
   @dual-pair markers). Detail extracted to references/plan-cache.md to keep
   SKILL.md focused. Single SSOT per install.sh:233-235.
C. .claude/skills/meta-orchestrator/helpers/update-cache.sh — pure-bash
   writer; updates ONLY ## Last invocation deterministically (round-3 scope
   per umbrella §1.3 item 4). Paired-negative test in
   packages/core/hooks/update-cache.test.ts covers fresh-cache creation,
   idempotent update (manual edits preserved verbatim), malformed-handling
   (exit 1 + .broken rename), and arg-count boundary (exit 2 + usage).
D. docs/meta-factory/wave-sequencing-plan.md §0 — Track P row appended with
   skill-memory marker + evidence (#227 / #230 / this PR); «What actually
   remains:» paragraph updated.

BFR-default verdict: ADAPT Cline Memory Bank (committed-markdown sub-pattern
already registered as SSOT #77 by R-phase PR #230); our adaptation narrows
to ONE per-machine gitignored file (vs Cline's 6-file committed hierarchy)
scoped to /meta-orchestrator. SSOT #77 is referenced — no duplicate row
added (drive-by discipline + BFR-default «no parallel evolution»).

Cold-QA Phase -1 (1× Opus, read-only): GO verdict. 1 MAJOR M1 (kickoff AC#7
wording — addressed via PR body explanation) + 2 MINORs (m1 @cc-only-rationale
text reframed for consumer-shipped helper; m2 false-positive reviewer T3 —
@dual-pair on helper line 26 and heredoc line 68 are markers on functionally
different artifacts, not a duplicate).

Hard constraints satisfied (with file:line citations):
- no-paid-llm-in-ci.md §1: helper is deterministic bash, zero API calls
  (.claude/skills/meta-orchestrator/helpers/update-cache.sh:48 — set -euo pipefail).
- dual-implementation-discipline.md §5: @dual-pair: meta-orchestrator-plan-cache
  markers on helper (.claude/skills/meta-orchestrator/helpers/update-cache.sh:26),
  SKILL.md §10 reader (.claude/skills/meta-orchestrator/SKILL.md:432), and
  references/plan-cache.md (.claude/skills/meta-orchestrator/references/plan-cache.md:9).
- doc-authority-hierarchy.md §3: helper carries Class C + Authoritative-for
  header (.claude/skills/meta-orchestrator/helpers/update-cache.sh:3); references
  carries full header (.claude/skills/meta-orchestrator/references/plan-cache.md:3).
- parallel-subwave-isolation.md §1: built in dedicated worktree.
- ai-laziness-traps.md T15: no Worker subagent dispatched for write (single
  Mode A inline session per umbrella §2).

Observation (NOT fixed, drive-by deferred):
- .husky/pre-commit:10 carries stale comment «Markdown ≤500 lines» while
  line 63 was bumped to 600 (maintainer-applied, uncommitted in this PR
  pending separate maintainer commit on .husky/pre-commit:63).

Closes /meta-orchestrator skill-memory umbrella per kickoff
.claude/orchestrator-prompts/meta-orchestrator-skill-memory/kickoff.md
(meta-launch state.md round-3 GO).

§1.7: forward-check applied — no-paid-llm-in-ci.md §1 satisfied at .claude/skills/meta-orchestrator/helpers/update-cache.sh:48 (pure bash, set -euo pipefail); dual-implementation-discipline.md §5 satisfied at .claude/skills/meta-orchestrator/helpers/update-cache.sh:26 + .claude/skills/meta-orchestrator/SKILL.md:432 + .claude/skills/meta-orchestrator/references/plan-cache.md:9 (@dual-pair markers on writer↔reader↔detail); build-first-reuse-default.md §3 satisfied via SSOT #77 (R-phase PR #230 already registered Cline Memory Bank ADAPT); doc-authority-hierarchy.md §3 satisfied at .claude/skills/meta-orchestrator/helpers/update-cache.sh:3 (Class + Authoritative-for header). backward-check sweep — SKILL.md §1 Step 1 EXTENDED at .claude/skills/meta-orchestrator/SKILL.md:55 (cache !shell added as 5th block; existing 4 preserved); SKILL.md §1 Step 2 EXTENDED at .claude/skills/meta-orchestrator/SKILL.md:80 (item 6 added; items 1-5 preserved); SKILL.md §10 EXTENDED at .claude/skills/meta-orchestrator/SKILL.md:432 (item 5 added; items 1-4 preserved); wave-sequencing-plan.md Track-P APPENDED at docs/meta-factory/wave-sequencing-plan.md:28 with skill-memory marker; no existing artefact deleted or rewritten — additive change only.

Prior-art: prior-art-evaluations.md#77 (Cline Memory Bank — ADAPT verdict already registered by R-phase PR #230 «ADOPT Direction B — shadow cache file with @dual-pair annotation»; this I-phase ships the Direction B mechanism with one further scope-reduction — per-machine gitignored vs committed-in-repo. Falsifier from kickoff §0 satisfied: DeepWiki + WebSearch confirm cline/cline as closest precedent, already captured by row #77.)
@artyhoo
artyhoo merged commit cec8866 into staging May 25, 2026
23 checks passed
artyhoo added a commit that referenced this pull request Aug 6, 2026
… rung (getff-any-stack-trace) (#1233)

* docs(prior-art): SSOT #237 — pre-commit runner-role verdict (getff-any-stack-trace S2b Task 0)

RUNNER-ROLE verdict on pre-commit (pre-commit.com) for delivering the python lane's
local git-hook rung. Resolves the T16 conflation that created this stage: #216 rejected
pre-commit as a DELIVERY scaffolder (sample-config -> stdout, no merge) — the conditional
at python-delivery-v0/kickoff.md:97-98 consumed that REJECT as a verdict on the
ENFORCEMENT CHANNEL (the runner role), which #216's trigger-to-revisit never covered.

Verdict: BUILD bare core.hooksPath-style delivery as default + integration arm for
existing-hooks consumers. Decided on the binding priority-order criteria (kickoff §2
item 1):
- (a) zero installed prerequisites — pre-commit FAILS: DeepWiki-verified (3 phrasings x
  2 sources) that pre-commit requires Python 3.9+ AND the framework at runtime.
- (b) augment-first, never clobber — pre-commit FAILS: GitHub issue #1198 confirms
  «Cowardly refusing to install hooks with core.hooksPath set».
- (c) Node-free — both pass.

Pre-push chosen over pre-commit: mirrors S2b CI template's identical checks at push
time; fires at the moment a violation would leave the machine; uniformity with npm
lane (setup.d/50-hooks.sh:12).

BFR §3 mechanism: DeepWiki x3 phrasings on pre-commit/pre-commit + WebSearch x3
phrasings on the problem-domain term. Evidence cites #216 explicitly (role separation).

ID note: the worker authored this row as #235 against a base where #235 was free.
Between dispatch (2026-08-01) and egress (2026-08-07), #235 (knowledge-work-plugins)
and #236 (anthropic-plugins-utility) landed on staging. Renumbered to #237 at rebase;
the register's ID-uniqueness invariant (principle 08) is what the collision would have
tripped.

Prior-art: prior-art-evaluations.md#237 (NEW — runner-role verdict; #216 REJECT-as-delivery explicitly out of scope).

* feat(python-lane): S2b — close the python lane's empty local git-hook rung

Delivers a pre-push hook on the python lane (the missing earliest-reachable-channel
rung between agent-session and CI). Verdict = BUILD bare core.hooksPath-style delivery
as default + integration arm for existing-hooks consumers (SSOT #237; pre-commit REJECTED
on the runner-role criteria: Python required at runtime + Cowardly-refusing clobber).

Implementation:
- packages/core/templates/python/hooks/pre-push.sh — hook body mirroring the CI template
  (ast-grep scan + ruff check . --config .getff/ruff-bans.toml); fail OPEN with loud
  warning + pinned install hint when a linter is absent (T-S2B-A counter); runtime
  opt-out via GETFF_SKIP_HOOKS=1.
- packages/core/templates/python/hooks/getff.pre-commit-config.yaml.fragment — local-hook
  entry for the case-2 integration arm (consumer already uses pre-commit).
- setup.d/45-python.sh — _py_deliver_local_hook_rung + 3 _py_integrate_* helpers, called
  from _py_deliver_agent_surface. Three integration cases: (1) core.hooksPath already set
  -> decline with notice; (2) .pre-commit-config.yaml present -> append fragment (idempotent
  via marker grep); (3) .git/hooks/pre-push file -> decline with notice; default = set
  core.hooksPath .getff/hooks. Install-time opt-out via GETFF_SKIP_HOOKS=1. Non-git-repo
  guard prevents fatal on a pre-`git init` consumer tree. --refresh re-delivery via
  _py_copy_or_refresh (refresh_safe honours pre-push.override.md Layer-3 escape hatch).

Tests (tests/install-sh/python-entry-lane.test.sh):
- Arm (14): hook delivered + executable + core.hooksPath activated + header documents
  opt-out + deletion path.
- Arm (14b): install-time opt-out (GETFF_SKIP_HOOKS=1 -> no activation).
- Arm (15): RED/GREEN firing through ACTUAL git push (local bare remote + planted
  os.system violation); SKIP-run via GETFF_SKIP_HOOKS=1. Tool-gated — container SKIPs
  when ast-grep/ruff absent; host-verify exercises the real firing proof (T-S2B-C).
- Arm (16): three integration cases (existing core.hooksPath / .pre-commit-config.yaml /
  legacy .git/hooks/pre-push) — never silently broken, idempotent on re-install.

T21 backward-check sibling surfaces: npm lane (setup.d/50-hooks.sh + .husky) SWEPT-CLEAN,
untouched (anti-scope). Cargo lane (setup.d/46-cargo.sh) GAP-FOUND — same empty rung;
named for the widening getff-any-stack-trace umbrella, NOT fixed here.

Fingerprints regenerated: python/{greenfield,brownfield-ruff,brownfield-sgconfig} — new
.getff/hooks/pre-push shifts the install output (kickoff §3 fingerprint-regen requirement).

Prior-art: prior-art-evaluations.md#237 (BUILD verdict — bare core.hooksPath-style delivery + integration arm; pre-commit REJECTED on runner-role criteria).

* fix(python-lane): S2b egress fixes — pipefail-defeated RED assertion, template registry, SSOT renumber

Three host-side corrections found while landing the container's S2b work. None is a
scope change; all three are defects the container did not surface.

1. Arm (15) RED assertion could never pass (tests/install-sh/python-entry-lane.test.sh).
   The assertion piped `{ cat push_red; git push ...; }` straight into `grep -qi`. Under
   `set -o pipefail` (line 15) the re-push's legitimate non-zero exit — the rung blocking
   the push, which IS the thing being asserted — became the pipeline's status, so the arm
   reported RED-not-fired even when the hook output was present verbatim in the captured
   stderr. Measured on the host: `✗ getff pre-push: ast-grep structural rule(s) fired —
   push blocked` present, arm still failed. Fixed by capturing to a variable first.
   Why the container missed it: arm (15) is tool-gated and SKIPs when ast-grep/ruff are
   absent, which they are in the container — a green container run on a vacuous arm, the
   T14 «clean audit on low coverage» shape the kickoff §5 named. Host: PASS=80 FAIL=0
   with the arm actually exercised.

2. The two new hook templates were not registered in NON_RENDERED_TEMPLATE_FILES
   (packages/core/python-starter/render-python-templates.ts:78). The byte-drift gate
   asserts the committed set under templates/python/ equals plan + allowlist, so
   `backends/python-templates-drift.test.ts:46` went RED on the unregistered pair —
   caught by `.husky/pre-push` §5c on the host push, the same channel that caught the
   registry violation on S2. Registered with the rationale the existing entry carries
   (hand-authored, not a lint-rule render; byte-integrity guarded by the install
   fingerprint gate + arms (14)/(16b); firing guarded by arm (15)).
   packages/core test:backends after the fix: 24 files / 242 tests, 0 failed.

3. SSOT #235#237 across the code comments and the install-time echo
   (setup.d/45-python.sh:675,680,711,738,742,1013; python-entry-lane.test.sh:437).
   The worker authored the register row as #235 against a 2026-08-01 base; #235
   (knowledge-work-plugins) and #236 (anthropic-plugins-utility) landed on staging in the
   six days the branch sat unharvested. The rebase renumbered the row; these are the
   in-code citations that pointed at it.

Host-verify (kickoff §7): 3/3 on Darwin — python-entry-lane 80/80, python-rules-lock
21/21, snapshot compare 15/15 byte-identical.

Prior-art: skipped — test-assertion bugfix, template-registry entry, and citation renumber on an existing capability; no new capability introduced.

---------

Co-authored-by: Test <test@example.com>
artyhoo added a commit that referenced this pull request Aug 10, 2026
…provenance repair (principle-11 F1 staging red) (#1375)

## Summary

Two concerns, one invited scope: (1) NEW project skill `.claude/skills/reviewer/SKILL.md` — the interactive review-session protocol, until now living only in the operator's personal `~/.claude/commands/reviewer.md` where repo machinery cannot see or update it (the #1374 severity-contract change had to be hand-patched into it the same day — the incident this closes; in-repo, a project skill takes precedence over the same-named personal command per the documented skill-over-command rule). (2) SSOT entry #249 — provenance repair for `.claude/rules/effort-worthiness.md`: principle 11 F1 is red on staging because the #1374 squash rebuilt the introducing commit from a PR body that omitted the `Prior-art:` line (the #1094#1097 class); the verbatim-path SSOT match fixes F1 for every subsequent PR.

## Changes

- NEW `.claude/skills/reviewer/SKILL.md`: three modes + verification-vs-synthesis economy split adapted 1:1 from the operator command; verdict grammar bound to `reviewer-discipline.md` §6 (Failure-scenario, ESCALATED, notes lane, zero-finding legitimacy); explicit subordination to the cold agents it does not replace and an explicit not-a-registry-role note (seat-lifecycle.md §1 three-roles cut respected — no seat-lifecycle edit).
- `.claude/skills/arch/SKILL.md:91`: stale «pending as of 2026-08-10» claim about the operator's global `/reviewer` resolved (hand-apply done same day; in-repo invocations now load the project skill).
- `docs/meta-factory/prior-art-evaluations.md`: entry #249 (REFERENCE) — registers the §8 item-5 per-family consult (Conventional Comments, Google eng-practices, Bezos Type-1/2, CBR, WIP limits, ADR/spec-kit/Kiro) already folded into the rule's §4, and records the detector-disagreement root cause (pr-body-prior-art's diff detector calls new rule-markdown non-capability while F1 counts it) with a widening trigger.
- Deliberately NOT changed: `setup.d/10-skills.sh` — consumer delivery of the reviewer skill is routed to advisor-pattern §8 item 9 (consumer-delivery stage with its own review), with an env+ tier recommendation (pairs with arch/pipeline at that profile).

## Prior-art consult

Prior-art: skipped — project-internal interactive-review skill adapting the operator's own global /reviewer command into the repo; subordinates to reviewer-discipline.md §6 (severity contract SSOT) and to the cold agents it does not replace; no new capability, no packages/ code

- [x] PR range is non-capability (one new skill markdown + one SSOT row + one line edit; zero `packages/` files, zero dependency changes); the trailer line above is carried in the PR body so it survives the squash into the introducing commit (the exact #1094#1097 / #1374 lesson this PR also repairs).
- [x] SSOT touch: entry #249 appended (append-only register; capability-commit-author write access per the ownership table).
- [x] Cold `agents/capability-reuse-auditor.md` pass run before handoff (source-before-shape Layer B): verdict THIN-ADAPT → GO, 12-candidate overlap set, trailer↔body consistent per clause; its one notes-lane finding (sibling §6 digest cross-pointer) applied in-branch.

## Test plan

- [x] §1.7-свод lands in squash-body (`gh pr merge --squash --body "$(gh pr view <N> --json body -q .body)"`)
- [x] `npm run --prefix packages/core test:principles` — 41 files green locally after #249 (principle 11 F1 was the one red: 14/14 after; principles 09/14/15 cover the new skill dynamically, 46/46)
- [x] `bash scripts/check-skill-drift.sh` — PASS (0 errors); doc-authority hook smoke on the new file — exit 0
- [x] Pre-push full substance sweep green at push time
- [x] Manual smoke: `.claude/skills/reviewer/SKILL.md` paired-negative sections present (`## Without this skill` / `## With this skill`); frontmatter description carries concrete RU+EN triggers per skill-description-quality.md §2

## Provenance

n/a — dialog-invited repo-skill addition + CI-red repair; no stage kickoff, no dispatch substrate.

## Review findings

Cold capability-reuse-audit (agents/capability-reuse-auditor.md, dialogue-blind on the just-authored file + intended trailer): verdict THIN-ADAPT, overall GO. Overlap set = 12 candidates (SSOT #64/#231/#236/#249 + aif-review family; skills/agents siblings; upstream Superpowers requesting-code-review + SDD). Key clears: the PR #858 class does not recur (the SDD executor/dual-reviewer loop is not re-described; spawning subagents without approval is forbidden by the skill's Hard bounds); subordination lines verified per file:line for all four owners named in the header. One notes-lane finding, fixed same round per the §6 contract: the repo now holds two §6 digests (this skill + agents/reviewer-discipline.md) — a cross-pointer with a drift rule was added to the skill's See also. Coverage honestly partial (headers-only for the non-overlapping skill/agent tail; effort-worthiness.md body unread by the auditor).

## Fidelity verdict

FIDELITY: skipped — dialog-invited non-stage PR (repo-skill addition + staging F1 repair); no kickoff/spec basis to audit against; cold reuse-audit GO recorded under Review findings.

## Parked questions

- Consumer tier for the reviewer skill: recommendation env+ (contour surface, pairs with arch/pipeline in setup.d/10-skills.sh:120-122); decision + consumer-generic rewording (the skill's Origin references the operator's home path) belong to advisor-pattern §8 item 9 — recorded in the memory card as an item-9 input.
- SSOT #249's «Trigger to revisit» carries the detector-widening trigger: a second squash-trailer F1 incident → widen pr-body-prior-art's detector to F1's artifact classes (rule/skill/agent markdown).

## §1.7 Self-discipline check (REQUIRED if PR touches discipline-bearing files)

### §1.7 Forward-check applied

New skill checked against every active layer: channel selection per rule-enforcement-channel-selection.md — on-demand skill load at the review-ask trigger, not always-on (description triggers per skill-description-quality.md §2, RU+EN); doc-authority header present with subordination lines (principle 09 dynamic skill enumerator green, packages/core/principles/09-doc-authority-hierarchy.test.ts); paired-negative sections present per packages/core/principles/15-skill-paired-negative.test.ts:50; provenance per principle 11 F1 — the `Prior-art:` trailer lives in this PR body (squash-safe) AND the artifact has SSOT keyword coverage, while the F1 red this PR repairs is closed by the verbatim path in docs/meta-factory/prior-art-evaluations.md entry #249; language-discipline — repo artifact in English; seat-lifecycle NOT extended — the three-roles cut at .claude/rules/seat-lifecycle.md:42 is respected by an explicit not-a-registry-role subordination line instead of a paths: edit; source-before-shape §1 — SSOT + .claude/skills/ + agents/ grepped before the body was written, and Layer B (agents/capability-reuse-auditor.md) run before handoff with verdict THIN-ADAPT/GO.

### §1.7 Backward-check applied

Class = artifacts carrying the interactive-reviewer protocol or a §6 severity-contract digest. Surfaces enumerated (grep over .claude/skills/**, agents/**, setup.d/, plus the out-of-repo command): ~/.claude/commands/reviewer.md — out-of-repo sibling, hand-patched to §6 grammar 2026-08-10, now shadowed in-repo by this skill (skill-over-command precedence), SWEPT-CLEAN; agents/reviewer-discipline.md:37 — sibling run-moment §6 digest, GAP-FOUND (no cross-link between the two digests) → FIXED this PR (See-also drift rule in .claude/skills/reviewer/SKILL.md); .claude/skills/arch/SKILL.md:91 — stale «pending» claim about the global command, GAP-FOUND → FIXED this PR; .claude/rules/reviewer-discipline.md:56 — the operating SSOT itself, untouched by design (both digests subordinate to it); packages/core/templates/shared/skill-context/aif-review/SKILL.md + aif-orchestrator-discipline — shipped consumer surfaces, deliberately DEFERRED to advisor-pattern §8 item 9 (never a silent copy; ownership-table read-only for sessions); setup.d/10-skills.sh:108-127 — the delivery manifest, deliberately untouched, tier decision recorded as an item-9 input. No other surface in the class (agents/fidelity-auditor.md + agents/review-sidecar.md carry the cold-protocol grammar shipped by #1374, different altitude, already current).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant