Skip to content

docs(readme): widen subline + is/isn't post-companion-target research (Commit 7) - #60

Merged
artyhoo merged 2 commits into
mainfrom
docs/readme-subline-widening
May 16, 2026
Merged

docs(readme): widen subline + is/isn't post-companion-target research (Commit 7)#60
artyhoo merged 2 commits into
mainfrom
docs/readme-subline-widening

Conversation

@artyhoo

@artyhoo artyhoo commented May 16, 2026

Copy link
Copy Markdown
Owner

Summary

Closes Commit 7 of the post-1A atomic-commit-plan: widens README subline + «What this project is and isn't» section with verdicts from the Track 4b companion-target comparison R-phase (landed in Commit 1 of this PR).

Two atomic commits:

  1. Commit 1 dba3e19 — lands 4 untracked research-patches from parallel Track 2/3/4/4b work (BFR-default upstream verification, companion-target comparison, principle-11 Q1/Q5 evidence, prose-rules audit research). Single mechanical MD034 lint fix on companion-target-comparison.md:149 (bare-URL wrap, same exception class as typo/link-repair per doc-authority-hierarchy.md §4).
  2. Commit 2 359991b — applies research-patch verdicts to README: subline adds Superpowers as 3rd named companion + deployment-surface clause for IDE/CLI runtimes. «What this project is and isn't» updated with concrete verdicts (1 ADD companion + 2 REFERENCE + 4 framework-consumers).

Research-patch findings (one-line each)

Candidate Verdict Reason
Superpowers (obra/superpowers) ADD as 3rd companion rules-as-tests alignment confirmed via TDD-for-Skills mandate («NO SKILL WITHOUT A FAILING TEST FIRST»); subagent-driven-development skill matches our Mode A/B pattern
OhMyOpencode REFERENCE-only delegation-discipline precedent; different lifecycle
microsoft/agent-framework REFERENCE-only ADR-pattern precedent; different problem class (SDK vs discipline)
Cline framework-consumer IDE/CLI runtime layer — we install into it
Cursor framework-consumer + rules-format REFERENCE closed-source product; .cursor/rules/*.mdc format adoptable
Codex (openai/codex) framework-consumer CLI runtime; AGENTS.md interop already in place
Aider framework-consumer (light coverage) CLI runtime; DeepWiki index missing — honest disclosure

Non-trivial finding: 6 of 7 candidates did NOT pass the companion-test — surfaced the new «deployment-surface» category (IDE/CLI runtimes we install into ≠ companions at our framework layer).

Decisions deferred to follow-up session

Per atomic-umbrella discipline + reviewer-discipline rule (orchestrator does not pick strategy mid-session), Decisions B/C/D from research-patch §7 are NOT actioned in this PR:

  • Decision B — §4.4 vocabulary codification timing (Mode A/B → subagent-driven-development multi-source pointer in rules/agents/*.md). R-patch recommends Option B2 (lazy, opportunistic).
  • Decision C — deeper Aider research (DeepWiki not indexed). R-patch recommends Option C2 (accept condensed coverage, classify framework-consumer).
  • Decision D — Superpowers ADAPT-candidates (1%-Rule / TDD-for-Skills / Pressure-scenarios). R-patch recommends Option D2 (track as open-questions.md §13.x ARMED entries).

Maintainer will run a separate session with a follow-up prompt (drafted in this PR's session summary).

Test plan

  • Local pre-push green (audit-self + principles 56/56 + hook self-test + rules-table integrity + body-prose discipline-self-check stubs all PASS).
  • README diff = 4 insertions / 4 deletions = 8 LOC delta — NOT a capability commit per CLAUDE.md «What is a capability commit?» (no dep, no new file ≥50 LOC under new subdir of packages/core/, no file ≥80 LOC under packages/).
  • Backward-check: only README contains the companion-enumeration text; CLAUDE.md + session-bootstrap.md «Cline» mentions reference the Memory Bank re-read precedent (out of scope).
  • CI green on this branch.

§1.7 Forward-check applied

PR aligns with already-shipped goal-statement authority chain (merged PR #58 + research-patch landed in Commit 1 of this PR as evidence). Forward-check Layer 1 (R1-R20 lint): not touched. Layer 2 (principle tests 56/56): pass. Layer 3 (capability-commit gate + Prior-art trailer): both commits use Prior-art: skipped escape hatch with ≥20-char rationale citing specific reason; neither commit triggers capability gate. Layer 4 (build-vs-reuse SSOT): no new dependency, no new capability artifact. Layer 5 (trigger sweep): not introducing new rule. Layer 6 (doc-authority): research-patches landed under existing docs/meta-factory/research-patches/ folder-level header (append-only register per Artifact Ownership Contract); README owned by maintainers per same Contract — maintainer-approved A1 variant from this session's AskUserQuestion exchange.

§1.7 Backward-check applied

Complete sweep of artefacts under the «companion-enumeration» scope: grep -nE "Companion to AI Factory|aif-handoff|Superpowers|Cursor|Cline|Codex|Aider" across README.md / CLAUDE.md / .claude/session-bootstrap.md. Hits: README.md:8 (subline — edited), README.md:69-75 (Is/Isn't section — edited), README.md:165 («clone the repo» install instructions referencing github.com/Yhooi2/rules-as-tests-aif — not companion-list, no update needed). CLAUDE.md:10 + session-bootstrap.md:4 mention «Cline Memory Bank re-read pattern» — this is the AIF Step 0 precedent reference, not a companion enumeration; cross-checked against research-patch §5 prediction («CLAUDE.md goal pointer doesn't name companions specifically, so no change needed») — confirmed. Zero out-of-scope leaks. Decisions B/C/D consciously deferred per atomic-umbrella discipline (surfaced in PR description above, not silently dropped).

artyhoo added 2 commits May 16, 2026 19:27
…3/4/4b work (2026-05-16)

Lands research-patches authored by parallel sessions during post-1A
coordination phase:

- 2026-05-16-bfr-default-upstream-verification.md (Track 2) — BFR-default
  survey of 2 of 7 alt-targets (oh-my-opencode + microsoft/agent-framework)
- 2026-05-16-companion-target-comparison.md (Track 4b CONDENSED) —
  comparative R-phase across all 7 alt-targets; Superpowers verdict
  COMPANION; 6 of 7 do not pass companion-test; deployment-surface
  category introduced for IDE/CLI runtimes
- 2026-05-16-principle-11-q1q5-evidence.md (Track 3) — Q1/Q5 evidence
  pool for principle 11 (BFR-default executable test)
- 2026-05-16-prose-rules-audit-research.md — prose rules audit research

Per Artifact Ownership Contract, research-patches are owned by their
authoring sessions; this commit lands them as-is without editing
substantive content. One mechanical markdown lint fix applied
(MD034 bare-URL wrap on companion-target-comparison.md:149) —
same category as typo/link-repair exception per
.claude/rules/doc-authority-hierarchy.md §4.

Bundle with the README subline widening (next commit) because the
README change cites the companion-target-comparison patch as evidence.

Prior-art: skipped — research-patch landing under existing docs/meta-factory/research-patches/ append-only register; no new capability artifact, no new explicit dependency, no new file under packages/.
… (Commit 7)

Applies research-patch 2026-05-16-companion-target-comparison.md verdicts
to README:

Subline (line 8) — add Superpowers as 3rd named companion (rules-as-tests
alignment confirmed via TDD-for-Skills discipline); add deployment-surface
sentence enumerating IDE/CLI runtimes (Claude Code / Cursor / Cline /
Codex / Aider) — clarifies they are install-into surfaces, not companions
at our framework layer.

«What this project is and isn't» section:

- **Is:** Superpowers added.
- **Isn't:** new clause distinguishing IDE/CLI runtime layer from
  companion layer (closes the «is Cursor a companion?» question
  the research-patch §3 §4.3 surfaced).
- **Roadmap signals:** comparative survey shipped — verdicts inline
  (1 ADD as companion + 2 REFERENCE-only + 4 framework-consumers).

Decisions B/C/D from research-patch §7 deferred to a separate maintainer
session per atomic-umbrella discipline — surfaced as observations in this
PR's summary, NOT actioned here.

Prior-art: skipped — 8-LOC delta documentation edit applying already-landed research-patch verdicts; no new capability artifact, no new dependency, no new file ≥50 LOC under new subdirectory of packages/core/, no new file ≥80 LOC under packages/.
@artyhoo
artyhoo marked this pull request as ready for review May 16, 2026 20:02
@artyhoo
artyhoo merged commit 9cb2043 into main May 16, 2026
30 of 31 checks passed
artyhoo added a commit that referenced this pull request May 22, 2026
…plan (DECISION=C) (#135)

* feat(principles): principle 17 — no paid LLM in CI (DN-6) [→staging live-test] (#132) (#133)

* docs(research): memory coverage audit (memory → docs → tests) 2026-05-22 (#126)

R-phase report: triages all 51 project-memory files against the project
goal (rule = executable test), builds a 30-row coverage matrix by pipeline
stage (0 memory-only / 1 prose / 2 executable), and proposes a forward-going
memory-codification discipline (write-time + local-audit + periodic re-audit).
No implementation — gap-closure + new rule are a separate PR after maintainer GO.

Successor to 2026-05-13 memory-to-docs codification audit (extends memory→docs
for 6 entries to memory→docs→tests over all 51 files). Surfaces T16 stale-header
finding (principle tests 11/12/13 shipped but rule headers say "pending").

Prior-art: skipped — research-patch doc only, no new capability/dependency; reuses 2026-05-13 §7 REUSE verdict (Cline Memory Bank + CC scope hierarchy).

* feat(principles): Wave 10.6 — port hook-stub-completeness audit to principle 16 (#127)

- Add packages/core/principles/16-hook-stub-completeness.test.ts (7 tests):
  (a) real-tree vacuous pass: empty hard-fail set post-migration → passes, not dies
  (b) paired-negative: make_test_repo() test file missing stub → ❌ violation detected + message text asserted
  (c) non-empty happy path: stub present → no violation
  + scope gate, multi-script, dedup, T15 self-application arms
- Delete packages/core/audit-self/hook-stub-completeness.test.sh (bash predecessor)
- Remove requireSelfTest('…hook-stub-completeness.test.sh') invocation from pre-push.ts §3a
- Remove requireSelfTest() helper (zero call sites remaining → genuinely dead)
- Leave phantom stub in tests/hooks/prior-art-trailer-hook.test.sh (harmless; out of scope)

Prior-art: skipped — bash→TS port of existing hook-stub-completeness audit (Wave 10.6), no new capability

* docs(automerge): codify branch-from-main staging flow + resync discipline (#128)

* docs(automerge): codify branch-from-main→staging flow + resync discipline; sync doc to LIVE state

main's copy was stale (still called ci-success a placeholder). Updates: status LIVE (settings applied 2026-05-22); new §2.1 branching flow — always branch FROM main, auto-merge INTO staging, with the load-bearing RESYNC discipline (ff staging→main after each promotion) that keeps staging a disposable buffer not a divergent develop; §5 recipe marked APPLIED with the real ci-success+actionlint+zizmor contexts + main owner-only protection; §6 #2 RESOLVED (#125).

Prior-art: skipped — doc codification of an already-decided flow, no new capability/dependency/subdir.

* docs(§2.1): drop trunk-based exception — everything routine → staging (0 clicks)

Maintainer's point: direct-to-main is owner-only → forces a manual merge
click per PR, the exact toil being removed. staging auto-merges (0 clicks).
So all routine work → staging; direct-to-main only for owner hotfixes.

Added dependency note: for true zero-click walk-away the agent must set
auto-merge on staging-targeted PRs, currently blocked by the git-safety
hook (allows only feat→epic). Relaxing it (permit auto-merge --base staging)
is the actual zero-click lever, and is a maintainer-side hook edit.

Prior-art: skipped — doc refinement of the codified flow, no new capability.

* feat(hooks): Wave 10.5 — bash-fallback + install.sh feature detection (#129)

Ships the critical-only bash fallback for the pre-push hook and updates
the consumer-facing dispatcher template to runtime feature detection.

Artifacts:
- packages/core/hooks/checks/registry.ts (~114 LOC): declarative
  check-registry ({ id, criticalForFallback, runner }[]) decoupling
  check-set selection from execution (ADAPT from Aider §4.8.X.2).
  Critical entries: prior-art-presence + s17-presence (both runner: 'bash'),
  per D2 + research patch §7.2.
- packages/core/hooks/checks/registry.test.ts: unit tests asserting
  bash-expressible invariant (every criticalForFallback entry → runner: 'bash')
  AND presence of both required critical entries.
- packages/core/hooks/pre-push.fallback.sh (~63 LOC): critical-only bash gate.
  Runs §7 Prior-art presence + §1.7 presence checks on origin/main..HEAD commits.
  Historical cutoff (2026-05-12) respected. bash 3.2-compatible. exit 1 if either
  required trailer is absent; exit 0 when both present or no discipline files touched.
- packages/core/templates/shared/husky-pre-push.sh: updated from OLD consumer
  pre-push to runtime dispatcher (per research patch §7.4). Node ≥20 + pre-push.ts
  present → TS-core; otherwise → bash fallback. Capability-check, NOT brand-name.
- install.sh: also copies pre-push.fallback.sh to consumer project so the
  runtime dispatcher can find it at $REPO_ROOT/packages/core/hooks/pre-push.fallback.sh.
- docs/meta-factory/prior-art-evaluations.md: SSOT entry #59 added in-commit
  (registry.ts ≥80 LOC under packages/ → capability commit gate fires).

T15 self-application: the registry invariant (every criticalForFallback check is
bash-expressible) is itself unit-tested in registry.test.ts — the rule applies to
itself. Zero edits to pre-push.ts (parallel-overlap avoidance; 10.6 owns that file).

Prior-art: prior-art-evaluations.md#59 (Aider parse_lint_cmds / self.languages, verdict ADAPT — structural pattern of decoupling selection-table from execution-runner transfers; semantic axis differs: file-language vs project-stack. Wave 10.5 registry.ts is 114 LOC ≥80 threshold, capability commit gate fires, SSOT entry added in same commit per CLAUDE.md discipline).

* fix(ci): make ci-success the sole required gate; fold actionlint+zizmor under it (#130)

Branch protection on main/staging required ci-success + actionlint + zizmor, but
actionlint/zizmor lived in workflow-integrity.yml path-filtered to
.github/workflows/** — so PRs not touching workflows (docs, packages) never
triggered them, their required contexts never reported, and the PR deadlocked
(auto-merge could never fire). PR #126 hit this exact wall.

Fix: cross-workflow `needs:` is impossible, so move actionlint + zizmor into
audit-self.yml (no path filter → runs every PR) and add them to ci-success's
`needs:`. ci-success now transitively gates the linters and always reports, so
branch protection can require ONLY ci-success. workflow-integrity.yml keeps just
the R11 branch-protection-assertion. Checks are stricter, not weaker: a broken
workflow YAML on a docs PR is now caught (previously it wasn't).

Synced: rules-manifest R11 check.command + re-rendered RULES.md table + snapshot;
RULES.md R11 prose; ci-success-gate.sh comment; automerge-staging-plan.md §5
recipe (was telling the maintainer to re-add the deadlocking contexts).

Maintainer-side follow-up: re-run the branch-protection PUT with single-context
payload {"contexts":["ci-success"]} per automerge-staging-plan.md §5.

Prior-art: skipped — moves existing CI jobs between workflow files + doc sync; no new capability, dependency, or ≥80-LOC file.

* feat(principles): principle 17 — no paid LLM in CI (DN-6 stage-1→2 promotion)

Promotes .claude/rules/no-paid-llm-in-ci.md from "Class A, grep mechanism
ready, test pending" to a real executable gate (memory-coverage-audit §10
DN-6 — the one clean stage-1→2 win in-repo). Scans .github/workflows/*.yml
for paid-LLM *usage* (ANTHROPIC/OPENAI api-key assignment or secret ref,
api.{anthropic,openai}.com hostnames, paid SDK imports) and fails CI if any
is present.

Usage-precise, not mention-counting: full-line comments are stripped first,
so the project's own negation mention (framework-self-template-render.yml:
"NO ANTHROPIC_API_KEY reference") does NOT false-positive. Negative-controls
in the test prove that, plus session/MCP tooling (claude CLI, context7) is
out of scope per rule §2.

Slot 17 (01-16 occupied). Runs in CI via principles-meta-tests → gated by
ci-success. 7/7 local; full suite 17 files / 106 tests green.

§1.7: forward-check applied — principle 17 IS the executable artifact for an existing prose rule (no-paid-llm-in-ci.md §1/§6 "pre-merge grep" counter); paired-negatives at packages/core/principles/17-no-paid-llm-in-ci.test.ts:91 (api-key assignment), :96 (hostname), :101 (SDK) prove detection, negative-controls at :107/:112 prevent false-positives. Backward-check sweep — reviewed principle slots 01-16 (17 next free) + prior-art-evaluations.md; no overlap (secret-scanners detect leaked creds, this bans a paid-LLM dependency surface — inverse problem class).
Prior-art: skipped — principle test for the existing no-paid-llm-in-ci.md rule (DN-6 promotion); no new capability/dependency/subdir, mirrors principle 15/16 precedent.

* docs(research-patches): N7 dogfood-companions process-layer adoption plan (DECISION=C, axis B)

Read-only research deliverable for roadmap Wave N7. Inventories Superpowers process-layer
artefacts (SDD skill, using-git-worktrees) dogfoodable in our own dev under DECISION=C;
ADOPT both at process layer with explicit substrate-purity boundary (axis A never coupled).
Verifies isolation:"worktree" compatibility (DeepWiki, not name-assumed). Proposes SSOT
#60/#61 in-text (not written — surfaced for maintainer application after the §4-step-5
empirical trial). N0-storm overlap noted. §7 carries the §1.7 forward/backward self-review.

Prior-art: skipped — research-patch doc only, no capability artefact (DeepWiki ×3 + WebSearch ×3 evidence in §2; SSOT rows proposed not written).
artyhoo added a commit that referenced this pull request May 22, 2026
…le (#139)

* feat(principles): principle 17 — no paid LLM in CI (DN-6) [→staging live-test] (#132) (#133)

* docs(research): memory coverage audit (memory → docs → tests) 2026-05-22 (#126)

R-phase report: triages all 51 project-memory files against the project
goal (rule = executable test), builds a 30-row coverage matrix by pipeline
stage (0 memory-only / 1 prose / 2 executable), and proposes a forward-going
memory-codification discipline (write-time + local-audit + periodic re-audit).
No implementation — gap-closure + new rule are a separate PR after maintainer GO.

Successor to 2026-05-13 memory-to-docs codification audit (extends memory→docs
for 6 entries to memory→docs→tests over all 51 files). Surfaces T16 stale-header
finding (principle tests 11/12/13 shipped but rule headers say "pending").

Prior-art: skipped — research-patch doc only, no new capability/dependency; reuses 2026-05-13 §7 REUSE verdict (Cline Memory Bank + CC scope hierarchy).

* feat(principles): Wave 10.6 — port hook-stub-completeness audit to principle 16 (#127)

- Add packages/core/principles/16-hook-stub-completeness.test.ts (7 tests):
  (a) real-tree vacuous pass: empty hard-fail set post-migration → passes, not dies
  (b) paired-negative: make_test_repo() test file missing stub → ❌ violation detected + message text asserted
  (c) non-empty happy path: stub present → no violation
  + scope gate, multi-script, dedup, T15 self-application arms
- Delete packages/core/audit-self/hook-stub-completeness.test.sh (bash predecessor)
- Remove requireSelfTest('…hook-stub-completeness.test.sh') invocation from pre-push.ts §3a
- Remove requireSelfTest() helper (zero call sites remaining → genuinely dead)
- Leave phantom stub in tests/hooks/prior-art-trailer-hook.test.sh (harmless; out of scope)

Prior-art: skipped — bash→TS port of existing hook-stub-completeness audit (Wave 10.6), no new capability

* docs(automerge): codify branch-from-main staging flow + resync discipline (#128)

* docs(automerge): codify branch-from-main→staging flow + resync discipline; sync doc to LIVE state

main's copy was stale (still called ci-success a placeholder). Updates: status LIVE (settings applied 2026-05-22); new §2.1 branching flow — always branch FROM main, auto-merge INTO staging, with the load-bearing RESYNC discipline (ff staging→main after each promotion) that keeps staging a disposable buffer not a divergent develop; §5 recipe marked APPLIED with the real ci-success+actionlint+zizmor contexts + main owner-only protection; §6 #2 RESOLVED (#125).

Prior-art: skipped — doc codification of an already-decided flow, no new capability/dependency/subdir.

* docs(§2.1): drop trunk-based exception — everything routine → staging (0 clicks)

Maintainer's point: direct-to-main is owner-only → forces a manual merge
click per PR, the exact toil being removed. staging auto-merges (0 clicks).
So all routine work → staging; direct-to-main only for owner hotfixes.

Added dependency note: for true zero-click walk-away the agent must set
auto-merge on staging-targeted PRs, currently blocked by the git-safety
hook (allows only feat→epic). Relaxing it (permit auto-merge --base staging)
is the actual zero-click lever, and is a maintainer-side hook edit.

Prior-art: skipped — doc refinement of the codified flow, no new capability.

* feat(hooks): Wave 10.5 — bash-fallback + install.sh feature detection (#129)

Ships the critical-only bash fallback for the pre-push hook and updates
the consumer-facing dispatcher template to runtime feature detection.

Artifacts:
- packages/core/hooks/checks/registry.ts (~114 LOC): declarative
  check-registry ({ id, criticalForFallback, runner }[]) decoupling
  check-set selection from execution (ADAPT from Aider §4.8.X.2).
  Critical entries: prior-art-presence + s17-presence (both runner: 'bash'),
  per D2 + research patch §7.2.
- packages/core/hooks/checks/registry.test.ts: unit tests asserting
  bash-expressible invariant (every criticalForFallback entry → runner: 'bash')
  AND presence of both required critical entries.
- packages/core/hooks/pre-push.fallback.sh (~63 LOC): critical-only bash gate.
  Runs §7 Prior-art presence + §1.7 presence checks on origin/main..HEAD commits.
  Historical cutoff (2026-05-12) respected. bash 3.2-compatible. exit 1 if either
  required trailer is absent; exit 0 when both present or no discipline files touched.
- packages/core/templates/shared/husky-pre-push.sh: updated from OLD consumer
  pre-push to runtime dispatcher (per research patch §7.4). Node ≥20 + pre-push.ts
  present → TS-core; otherwise → bash fallback. Capability-check, NOT brand-name.
- install.sh: also copies pre-push.fallback.sh to consumer project so the
  runtime dispatcher can find it at $REPO_ROOT/packages/core/hooks/pre-push.fallback.sh.
- docs/meta-factory/prior-art-evaluations.md: SSOT entry #59 added in-commit
  (registry.ts ≥80 LOC under packages/ → capability commit gate fires).

T15 self-application: the registry invariant (every criticalForFallback check is
bash-expressible) is itself unit-tested in registry.test.ts — the rule applies to
itself. Zero edits to pre-push.ts (parallel-overlap avoidance; 10.6 owns that file).

Prior-art: prior-art-evaluations.md#59 (Aider parse_lint_cmds / self.languages, verdict ADAPT — structural pattern of decoupling selection-table from execution-runner transfers; semantic axis differs: file-language vs project-stack. Wave 10.5 registry.ts is 114 LOC ≥80 threshold, capability commit gate fires, SSOT entry added in same commit per CLAUDE.md discipline).

* fix(ci): make ci-success the sole required gate; fold actionlint+zizmor under it (#130)

Branch protection on main/staging required ci-success + actionlint + zizmor, but
actionlint/zizmor lived in workflow-integrity.yml path-filtered to
.github/workflows/** — so PRs not touching workflows (docs, packages) never
triggered them, their required contexts never reported, and the PR deadlocked
(auto-merge could never fire). PR #126 hit this exact wall.

Fix: cross-workflow `needs:` is impossible, so move actionlint + zizmor into
audit-self.yml (no path filter → runs every PR) and add them to ci-success's
`needs:`. ci-success now transitively gates the linters and always reports, so
branch protection can require ONLY ci-success. workflow-integrity.yml keeps just
the R11 branch-protection-assertion. Checks are stricter, not weaker: a broken
workflow YAML on a docs PR is now caught (previously it wasn't).

Synced: rules-manifest R11 check.command + re-rendered RULES.md table + snapshot;
RULES.md R11 prose; ci-success-gate.sh comment; automerge-staging-plan.md §5
recipe (was telling the maintainer to re-add the deadlocking contexts).

Maintainer-side follow-up: re-run the branch-protection PUT with single-context
payload {"contexts":["ci-success"]} per automerge-staging-plan.md §5.

Prior-art: skipped — moves existing CI jobs between workflow files + doc sync; no new capability, dependency, or ≥80-LOC file.

* feat(principles): principle 17 — no paid LLM in CI (DN-6 stage-1→2 promotion)

Promotes .claude/rules/no-paid-llm-in-ci.md from "Class A, grep mechanism
ready, test pending" to a real executable gate (memory-coverage-audit §10
DN-6 — the one clean stage-1→2 win in-repo). Scans .github/workflows/*.yml
for paid-LLM *usage* (ANTHROPIC/OPENAI api-key assignment or secret ref,
api.{anthropic,openai}.com hostnames, paid SDK imports) and fails CI if any
is present.

Usage-precise, not mention-counting: full-line comments are stripped first,
so the project's own negation mention (framework-self-template-render.yml:
"NO ANTHROPIC_API_KEY reference") does NOT false-positive. Negative-controls
in the test prove that, plus session/MCP tooling (claude CLI, context7) is
out of scope per rule §2.

Slot 17 (01-16 occupied). Runs in CI via principles-meta-tests → gated by
ci-success. 7/7 local; full suite 17 files / 106 tests green.

§1.7: forward-check applied — principle 17 IS the executable artifact for an existing prose rule (no-paid-llm-in-ci.md §1/§6 "pre-merge grep" counter); paired-negatives at packages/core/principles/17-no-paid-llm-in-ci.test.ts:91 (api-key assignment), :96 (hostname), :101 (SDK) prove detection, negative-controls at :107/:112 prevent false-positives. Backward-check sweep — reviewed principle slots 01-16 (17 next free) + prior-art-evaluations.md; no overlap (secret-scanners detect leaked creds, this bans a paid-LLM dependency surface — inverse problem class).
Prior-art: skipped — principle test for the existing no-paid-llm-in-ci.md rule (DN-6 promotion); no new capability/dependency/subdir, mirrors principle 15/16 precedent.

* docs(research): rule-enforcement channel-selection prior-art survey

Survey of just-in-time rule delivery to AI agents (companion-first:
Superpowers/aif-handoff/AIF/OhMyOpencode -> CC-native -> ecosystem).
Validates+refines the narrowest-reachable-channel principle into a
two-axis model (detectability->gate/inject; relevance->breadth).
Proposes SSOT rows #60-#63; codification home deferred to maintainer (Option A).

* feat(rules): rule-enforcement channel-selection (Class C)

Codify the narrowest-reachable-channel principle from the 2026-05-22
prior-art survey: deliver each rule by two axes (detectability->gate/inject;
relevance->breadth), reliability-ordered (deterministic matcher >= always-on
> semantic > memory). Reserve always-on for 3-4 invariants; never memory for
load-bearing rules. Register the rule in principle 09 REQUIRED_HEADER_DOCS so
its authority header is enforced. Class C (mechanism deferred: ADAPT
rule-injector hook per patch section 4).

Prior-art: research-patches/2026-05-22-rule-enforcement-channel-selection.md — prior-art survey (Superpowers / aif-handoff / AIF / OhMyOpencode / Cursor / Agent RuleZ). Verdict: the meta-discipline (which-channel selection) is BUILD — no upstream rule-selection discipline to adopt verbatim; delivery mechanisms are REFERENCE (CC hooks native, SSOT #20). Proposed SSOT rows #60-#63 surfaced for maintainer, not written.

§1.7: forward-check applied — rule complies with no-paid-llm-in-ci (deferred ADAPT hook is deterministic bash, not an LLM call), doc-authority-hierarchy (Class + Authoritative-for header present; registered at packages/core/principles/09-doc-authority-hierarchy.ts:43 so principle 09 enforces its header — verified test 17/17), and README earliest-reachable-channel (delivery-scope companion on a separate axis, not a conflicting goal claim); backward-check sweep — the channel-declaration obligation (rule §3 step 5) is forward-going per the §6 'Existing rules' note, parallel to dual-implementation-discipline §9; no retroactive sweep of the existing .claude/rules/*.md required, no CI gate checks channel declaration (Class C).
artyhoo added a commit that referenced this pull request May 22, 2026
…#154)

Backfills the prior-art register for the channel-selection wave (#139): the
rule + inject-matching-rule.sh hook shipped without their SSOT rows. Adds the
four candidates from research-patch §5 (2026-05-22-rule-enforcement-channel-selection):
- #60 Agent RuleZ — REFERENCE (Rust dep for native CC-hook capability)
- #61 OhMyOpencode rulesInjector — REFERENCE + ADAPT (our inject-matching-rule.sh)
- #62 Cursor rule types — ADOPT VOCABULARY (breadth ladder 1:1)
- #63 agent-situations — REFERENCE (check-gated injection)

Prior-art: skipped — SSOT register append documenting channel-selection prior-art, no new capability in this commit
@artyhoo
artyhoo deleted the docs/readme-subline-widening branch May 22, 2026 18:09
artyhoo added a commit that referenced this pull request May 22, 2026
…E Superpowers + SSOT #64/#65 + retention=A coexist (#166)

N7 (DECISION=C) repo-side application. Source-verified the Superpowers
adoption against shipped SKILL.md (dual-channel DeepWiki + raw WebFetch,
2026-05-22) instead of assuming from name.

- .claude/rules/parallel-subwave-isolation.md §4: drop the homegrown
  AST-detection build-target; REFERENCE Superpowers `using-git-worktrees`
  (Step 0 GIT_DIR!=GIT_COMMON skip → compatible with isolation:"worktree").
  Stays Class C; new §5 §1.7 forward/backward note.
- prior-art-evaluations.md: append SSOT #64 (SDD, ADOPT process-layer) +
  #65 (using-git-worktrees, ADOPT + REFERENCE). NOT #60/#61 — those were
  taken by the parallel channel-selection wave (the exact ID-collision §6
  warned about). "#27 = Git-Isolation" was a misattribution (#27 is
  HANDOFF_MODE) — corrected, void #27-update skipped.
- N7 patch §9 closure: source-verification findings, retention verdict
  A (coexist), ID corrections, classifier-blocked items.
- roadmap banner reconciled (DECISION=C set, original framing preserved
  append-only); sequencing-plan N7 status updated.

Retention=A: SDD review is post-implementation, orchestrator Phase -1 is
pre-dispatch + owns quota/Mode/bootstrap meta-layer SDD lacks → coexist.

Blocked (maintainer-applied): global Superpowers install + orchestrator-
skill annotation — both denied by the auto-mode classifier (untrusted
external code / self-modification). Live-dogfood trial pending those.

§1.7: Forward — demotion complies with build-first-reuse-default.md (REFERENCE-over-BUILD) + no-paid-llm-in-ci.md (using-git-worktrees pure-git); Backward — scope-reducing, only edited bullet is parallel-subwave-isolation.md:37 (§4), SSOT cross-ref at prior-art-evaluations.md row #65, full self-reflexive note at parallel-subwave-isolation.md:46
Prior-art: skipped — N7 process-layer dogfood adoption; SSOT #64/#65 appended documenting ADOPT verdicts, no new dependency or capability code added
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