research(meta-orchestrator-mode-triage): prior-art survey for 3 areas (discovery sweep + persistence + alias) - #239
Merged
artyhoo merged 1 commit intoMay 26, 2026
Conversation
… (discovery sweep + persistence + alias) Area A (discovery sweep extension): BUILD verdicts for 3 new synthetic-namespace surfaces (openq-§13-<id>, todo-<file>-<line>, residual-<patch>-<anchor>) — no upstream multi-source discovery aggregator; tickgit KEEP-NARROW (git-history-aware TODO tracker vs our simpler in-session bash scan). Area B (master-plan persistence + delta-tracking): β-2 recommended (sibling `_master-backlog-delta.json`) over β-1 (extend `_plan-cache.md`). Evidence: `references/plan-cache.md §4 #cache-writer-feature-creep` anti-pattern explicitly names adding sections beyond `## Last invocation` as the violation; β-1 would also break `update-cache.test.ts` idempotency contract. β-2 is a new gitignored JSON sidecar implementing design §7.1 schema with zero changes to existing `update-cache.sh` or its test. Area C (triage alias layer): BUILD + ADOPT-VOCABULARY — 6-alias table (DIRECT/SOLO/BUNDLE/PAIR/DECOMPOSE/RESEARCH) maps to internal Mode A/B/SDD/Queue/R-phase; oh-my-openagent REFERENCE confirms alias→dispatch pattern is production-grade; internal Mode terms unchanged per DN-3=RESOLVED. SSOT rows added: #78 (tickgit KEEP-NARROW), #79 (Backlog.md REFERENCE), #80 (aif-handoff DEFER), #81 (oh-my-openagent REFERENCE). T-traps applied: 15 (T1/T3/T7/T10/T11/T12/T13/T15/T16/T17/T19/T20/T-MO-design-A/T-MMT-R-A/T-MMT-R-B). Cold-QA: PASS. Prior-art: skipped — research-patch under docs/meta-factory/research-patches/ not a capability commit per CLAUDE.md (no packages/ surface change, no package.json dep added, no new subdirectory under packages/core/).
artyhoo
enabled auto-merge
May 26, 2026 08:20
artyhoo
added a commit
that referenced
this pull request
May 31, 2026
…и версии) (#309) Продолжение хроники с места обрыва (v1/v3 ~22 мая, v2 до «большого переезда»): - Чужой меч в руке: мост к рантайму aif-handoff (#289/290/293/296/298/299) + superset REJECT/KEEP-NARROW/REFERENCE (SSOT #86) + N7-догфуд worktree (SSOT #65) - Распорядитель над распорядителями: /meta-orchestrator (#239-245) + inflight-check (#303) - Застава, что не выдержала испытания: recommendation-laziness — FP=84.2% → снято, оставлены H1 + ловушка T20 (#206/207/210/211/212/215) - Сторожа стерегут сторожей: Stryker-порча (#183), git.ts 0 тестов → 486 строк - v1: догоняющие главы (Wave 10, staging-ствол, аудит памяти, worktree dual-channel #297/300/301) со сносками [^6]-[^13] на первоисточники; v2: догоняющая Часть XIV (переезд+двор+память) Все falsifiable-утверждения сверены с git/research-patches/SSOT (T3-протокол). Примечание: ~468 строк pre-push верны для .husky/pre-push (bash, до миграции, история 468/476) — не путать с pre-push.ts (TS-порт, 447); строки 6/439 — историч. факт-чек, оставлены как есть. Prior-art: skipped — docs/narrative chronicle edit, no new capability
artyhoo
added a commit
that referenced
this pull request
Aug 7, 2026
…run protocol + umbrella closure (#1262) * feat(consumer-matrix): python unfamiliar-stack e2e cell + ci-success wiring (getff S4 W6 v1) W6 acceptance cell for the getff-any-stack-trace umbrella closure (spec §9.1) — a python end-to-end chain that Discriminates: RED on a planted print() / GREEN on conforming logger.info() / REJECT on a non-direct-dep practice / R1-input asserts the delivered workflow carries `branches: [master]` (deliver_getff_workflow substitutes via git symbolic-ref origin/HEAD). The cell wires into ci-success needs — without this line a RED cell could merge while ci-success stayed green (same `#warning-nobody-reads` shape as the alwayson-budget incident). Cell chain (10 assertions, fail-closed polarity): (1) scripted fresh python project (FastAPI/SQLAGMA-class fixture, master default) (2) install.sh python under Node-stripped PATH — F-A DECLARE on the install path (3) agent surface present (4 skills + curated 2 agents + hooks + .mcp.json + AGENTS.md + .ai-factory/ + .getff/) (4) Tier-1 generation via rule-bootstrap-cli --from-practice — vendored .dist-info METADATA exposes docs.sqlalchemy.org as a `Project-URL: Documentation` host; allowlistKey sqlalchemy.official is ABSENT from Tier-0 (allowlist.ts) so the chain falls through to Tier-1; pip:sqlalchemy prefix matches the pip adapter ecosystem (research-source-trust.md §4); URL host matches → ADMITS (5) RED arm: ast-grep fires non-zero (rc=1) on planted print() (6) GREEN arm: ast-grep silent (rc=0) on conforming logger.info() (adapter-jig E1 paired-clean-control, mirrors setup.d/45-python.sh:397 _py_firing_self_check) (7) REJECT arm: a practice citing pip:requests (NOT a direct dep) is downgraded to research-only by Tier-1 FF2007 — honest degrade, no rule written (8) R1-input: delivered getff-python.yml trigger carries branches: [master] (the substitution is what R1 §5.1 parked the question on; this cell settles it for the python lane mechanically — do NOT widen to cargo/go) Deterministic + API-free (no-paid-llm-in-ci.md §1). ast-grep pinned per ci-tool-pinning.md Rule A (@ast-grep/cli@0.44.1, the version setup.d/45-python.sh:437 advertises). Actions pinned by SHA (audit-self.yml:1511 + :1514, mirroring the existing consumer-matrix-start-cell job). Prior-art: skipped — wiring only, no new capability (the cell reuses install.sh python, rule-bootstrap-cli, deliver_getff_workflow, and the S2 curated agent surface — all shipped by predecessor stages S1/S2/S2b/S3 + R1). * feat(agents): one-beat cold-run protocol (framework-only) + SSOT #239 (getff S4 §9.3) Spec docs/superpowers/specs/2026-07-23-getff-any-stack-closure-design.md §9.3 binds: a NAMED `agents/`-class artefact that hands a fresh subagent ONLY a consumer project path (no kickoff, no framework-source access, no second human prompt) and verifies the framework's shipped docs suffice to reach a firing stack-specific rule. Single-pass journey-completion, NOT RED→GREEN two-pass — the rule has not been authored yet, which is the point. Framework-only default per kickoff §2 item 2: run BY the framework against a consumer, not BY the consumer. install.sh:613 skip-cased, matching the shipped-agent-liveness-prober pattern; principle 09's enumerateFlatRequiredDocs still auto-covers the file for the header requirement, verified live (37/37 green). T16 problem-class comparison (binding per kickoff §1 prior-art obligation): manual-rule-liveness-prober (#115) = "does a manifest RULE change agent behaviour under pressure?" (two-pass RED→GREEN on same baseline); shipped-agent-liveness-prober = "does a shipped SUB-AGENT use its declared tools?" (two-pass RED→GREEN on same fixture); ours = "do the SHIPPED DOCS suffice for a COLD agent + FRESH consumer to reach a FIRING stack-specific rule?" (single-pass; the cold run IS the verdict). Match: operational class identical (session-bound/DORMANT/\$0-in-CI/reporting-only/top-level-only); methodology structurally distinct (single-pass journey-completion vs two-pass delta; file-open audit vs text markers). Verdict: ADAPT the class, build the methodology. WebSearch ×3 phrasings 2026-08-07 surfaced zero drop-in operator tools for this problem class. The artefact is build-only at ship time per the shipped-agent-liveness-prober T-M2PROBE-A pattern — first operator run (the S4 closure's binding deliverable per spec §9.3) is the honest point of validation. If the S4 container cannot produce a genuinely cold agent + fresh consumer, the RUN parks per kickoff §4 trigger #2; the AUTHORING stands either way. Prior-art: prior-art-evaluations.md#239 (added in this PR) — ADAPT verdict; #239's Rationale records the T16 problem-class comparison + WebSearch ×3 evidence. * docs(getff-any-stack-trace): done.md — umbrella closure S4 is the last stage of this umbrella. done.md lands now per the docs/meta-factory/operational-conventions.md §1 schema; it gates getff-freshness-widening (spec §10) and is the load-bearing priority-score.sh Layer C3 fallback. Content (kickoff §2 item 4 + §5 T-S4-B): - names every stage that landed across S1-S4 + S2b + R1 with PR + content - names every descoped item: cell full, cargo/go widening, --refresh, cargo rung-5 cascade, the one-beat protocol RUN (parked per §4 trigger #2 — container cannot produce a cold agent + isolated consumer CWD; authoring stands, run defers to host) - names the load-bearing claims the umbrella proved (Tier-1 real, agent surface closes the journey at delivery, Node-free hook delivery, cell discriminates, framework docs become an empirical question) - explicit Gate section pointing the widening umbrella at the W6 cell pattern + routed-onward findings + the cold-run protocol Not a success narrative: the parked RUN and the four routed-onward findings are named, not elided. Prior-art: skipped — closure doc, no new capability (rationale ≥20 chars per CLAUDE.md syntax). * fix(setup.d): add getff-cold-run-prober to fresh-install skip-list (follow-up to d19bbf8) Commit d19bbf8 added getff-cold-run-prober.md to install.sh's do_refresh() skip-list but missed setup.d/20-agents.sh, which is the FRESH-install path (snapshot harness exercises this arm, surfacing the omission). Symptom: SNAPSHOT_MODE=compare reported 7/15 fail with the new agent file appearing under .claude/agents/ + a cascade .prettierignore hash drift (merge_prettierignore generates different content when an extra file is present). After this edit: SNAPSHOT_MODE=compare = 15/15 pass. T20 evidence: re-ran the snapshot harness; quoted output above. T3 evidence: setup.d/20-agents.sh:31 = the new skip arm. Prior-art: skipped — follow-up registration, no new capability (rationale ≥20 chars per CLAUDE.md syntax). * fix(workflow): add npm ci + workspace install steps to consumer-matrix-python-unfamiliar-stack-cell job (rework 3f1dfebbebd9) The new consumer-matrix-python-unfamiliar-stack-cell job at audit-self.yml:1505-1535 invoked `bash tests/consumer-matrix/python- unfamiliar-stack-cell.sh` directly after actions/setup-node, but the cell at lines 300-303 invokes `cd "$FRAMEWORK_ROOT" && npx --no-install tsx ... rule-bootstrap-cli.ts` from the framework ROOT. tsx was not installed by any preceding step — the cell passed locally only because the container masks the gap three ways: ambient /app/node_modules/.bin/tsx, /home/node/.npm-global/bin/tsx (npm global prefix), and the workspace- hoisted root node_modules/.bin/tsx. In a clean CI checkout none of those exist — the cell would fail at the Tier-1 generation arm with "tsx not found". destination-environment-verification.md §2 incident-1 pattern. The reviewer's rework instruction (add `npm ci --prefix packages/core`) was necessary but turned out insufficient: empirical test hiding all three masking layers showed `npm ci --prefix packages/core` returns rc=0 but does NOT install tsx (workspace-aware npm hoists it out of packages/core/node_modules). The cell's invocation (`cd $FRAMEWORK_ROOT && npx --no-install tsx`, no --prefix) needs tsx at ROOT, which requires Pattern B precedent (audit-self.yml:467-469, 555-557, 641-643, 881-883, 911-913): npm ci --prefix packages/core FOLLOWED BY npm install --silent (commented "hoists tsx to root"). Pattern A precedents (lines 165, 212) only work because they invoke via `npx --prefix packages/core vitest` (with --prefix); the cell uses no --prefix. T20 evidence: re-ran host-verify contract (4 commands) — quoted output: bash tests/consumer-matrix/python-unfamiliar-stack-cell.sh → rc=0, "✓ W6 acceptance cell — python unfamiliar-stack e2e (spec §9.1) PASSED" (RED/GREEN/REJECT/R1-input arms all discriminated) vitest principles/09 → 37/37 pass vitest principles/21 → 10/10 pass SNAPSHOT_MODE=compare → 15/15 byte-identical T3 evidence: audit-self.yml:1528-1531 = the two new install steps - name: Install packages/core deps (tsx for rule-bootstrap-cli) run: npm ci --prefix packages/core --silent - name: Install workspace deps (hoists tsx to root) run: npm install --silent Prior-art: skipped — fix to existing workflow job, no new capability (rationale ≥20 chars per CLAUDE.md syntax). * fix(consumer-matrix): ci-tool-pin escape token on the indirect ast-grep pin Egress-seam fix by the ACCEPTING session, not the worker: the container has no push channel, so `.husky/pre-push` ran for the first time on the host and went RED on three lines of the new cell. The pin is real — ASTGREP_PKG expands to @ast-grep/cli@0.44.1, literal at :56 — but the Rule-A regex gate (packages/core/hooks/checks/unpinned-tool-install.ts) resolves no variables, so `npm install -g "$ASTGREP_PKG"` reads as unpinned. Two of the three flagged lines were not installs at all: an error-message branch and a PATH assertion whose text contains the phrase. Restructured the `|| { … }` continuation into an if-block so the escape token can sit on the install line itself (§3 requires same-line), and tagged the two message lines. No behavioural change: `bash -n` clean, same commands, same order. Prior-art: skipped — escape-token annotation on an existing test script to satisfy a regex gate that cannot resolve shell variables, no new capability. * docs(getff-any-stack-trace): fill done.md final-PR placeholder (#1262) The closure doc shipped with a literal placeholder the worker could not resolve — the PR number does not exist until the accepting session opens the PR. Prior-art: skipped — one-token placeholder substitution in a closure doc, no new capability. * fix(consumer-matrix): iterative Node-strip — single pass missed the runner's second node Second egress-seam fix by the ACCEPTING session. The cell went RED on the GitHub runner at its own guard: ✗ FAIL: PATH strip INCOMPLETE — node still reachable at /usr/local/bin/node under the stripped PATH (F-A DECLARE overclaim) The guard was RIGHT and the enumeration was wrong. `command -v node` reports only the FIRST match on PATH; the runner carries TWO — setup-node's /opt/hostedtoolcache/node/<ver>/x64/bin and a system /usr/local/bin/node. One pass stripped the first, left the second, and the guard correctly refused to claim the python install ran Node-free. It aborted at arm 2 of 9, so arms 3-9 (including the RED/GREEN/REJECT discrimination this stage exists to prove) had never executed on the runner at all. Replaced the single-shot enumeration with a bounded loop that re-resolves node/npm/npx against the partially-stripped PATH until nothing more resolves. Environment-agnostic: converges in 1 pass on this macOS host (verified — node gone, /bin/cat and /usr/bin/git intact), expected 2 on the ubuntu runner. Honest caveat: stripping a directory removes ALL of it, so on a host where an essential tool shares a directory with node the install could lose it. On ubuntu runners jq/git/ python3 live in /usr/bin, not /usr/local/bin, so the removal is safe there; if a future runner image moves them, this arm will fail loudly at the install rather than silently. Prior-art: skipped — bug fix to an existing test script's PATH enumeration, no new capability. --------- Co-authored-by: Test <test@example.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
R-phase prior-art survey for the
meta-orchestrator-mode-triage-and-plannerumbrella Stage 1. Covers 3 mutually-exclusive capability areas per the binding kickoff spec.openq-§13-<id>,todo-<file>-<line>,residual-<patch>-<anchor>). No upstream multi-source discovery aggregator exists. tickgit (docs(research): cross-worktree gitignored coord-doc sync — verdict ADAPT (symlink-to-canonical) #78 KEEP-NARROW) is production-grade for git-history-aware TODO tracking but our surface-g is a narrower in-session bash scan with no git-history dependency — upstream complexity would be overhead._master-backlog-delta.json) over β-1 (extend_plan-cache.md). Evidence fromreferences/plan-cache.md §4 #cache-writer-feature-creepanti-pattern (file:line anchor): «adding sections to the helper interface beyond## Last invocation('last 5 invocations', 'kill-rate trend', 'favorite umbrella'). Counter: helper-scope contract above». β-1 would trigger this anti-pattern AND break theupdate-cache.test.tsidempotency contract (the awk state machine inupdate-cache.shonly rewrites 4 named fields; adding delta arrays requires new args or file structure — breaking the$1/$2-only interface). β-2: new gitignored JSON sidecar at.claude/orchestrator-prompts/_master-backlog-delta.jsonimplementing design §7.1 schema (untracked_seen/closed_since_lastarrays); zero changes to existingupdate-cache.shor its test.SSOT rows added: #78 (tickgit KEEP-NARROW), #79 (Backlog.md REFERENCE), #80 (aif-handoff delta-tracking DEFER), #81 (oh-my-openagent REFERENCE).
§1.7 Forward/Backward-check applied
Forward: Research patch follows
doc-authority-hierarchy.md §2(folder-level authority; patch is indocs/meta-factory/research-patches/). SSOT additions follow §3 entry-add procedure.Prior-art:trailer present (skipped — research-patch not a capability commit; packages/ untouched).no-paid-llm-in-ci.md §1satisfied: all survey work done via session-bound MCP tools (DeepWiki, WebSearch, WebFetch) — zero CI-side LLM.build-first-reuse-default.md §3satisfied: ≥3 phrasings per area.Backward: No existing rule superseded. SSOT rows #78-#81 are additive (append-only per §3). The research patch is read-only by subsequent sessions; no source files modified.
prior-art-evaluations.mdLOC after: within file's own≤500 LOCstatus note (was 151 lines; now 155 lines — well within threshold).Test plan
prior-art-evaluations.mdrows docs(research): cross-worktree gitignored coord-doc sync — verdict ADAPT (symlink-to-canonical) #78-fix(hooks): force visible "🟢 Простыми словами" block in end-of-turn reminder #81 correctly formatted (awk-verified line 146-149)<!-- scope:meta-orchestrator-mode-triage-prior-art -->(principle 10)