Skip to content

research(meta-orchestrator-mode-triage): prior-art survey for 3 areas (discovery sweep + persistence + alias) - #239

Merged
artyhoo merged 1 commit into
stagingfrom
research/meta-orchestrator-mode-triage-prior-art
May 26, 2026
Merged

research(meta-orchestrator-mode-triage): prior-art survey for 3 areas (discovery sweep + persistence + alias)#239
artyhoo merged 1 commit into
stagingfrom
research/meta-orchestrator-mode-triage-prior-art

Conversation

@artyhoo

@artyhoo artyhoo commented May 26, 2026

Copy link
Copy Markdown
Owner

Summary

R-phase prior-art survey for the meta-orchestrator-mode-triage-and-planner umbrella Stage 1. Covers 3 mutually-exclusive capability areas per the binding kickoff spec.

  • Area A (discovery sweep extension): BUILD verdicts for all 3 new synthetic-namespace surfaces (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.
  • Area B (master-plan persistence + delta-tracking) — BINDING GATE 1 OUTPUT: β-2 recommended (new sibling _master-backlog-delta.json) over β-1 (extend _plan-cache.md). Evidence from references/plan-cache.md §4 #cache-writer-feature-creep anti-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 the update-cache.test.ts idempotency contract (the awk state machine in update-cache.sh only 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.json implementing design §7.1 schema (untracked_seen/closed_since_last arrays); 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 → internal Mode A/B/SDD/Queue/R-phase) in SKILL.md body after routing tree. oh-my-openagent (fix(hooks): force visible "🟢 Простыми словами" block in end-of-turn reminder #81 REFERENCE) confirms alias→dispatch 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 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 in docs/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 §1 satisfied: all survey work done via session-bound MCP tools (DeepWiki, WebSearch, WebFetch) — zero CI-side LLM. build-first-reuse-default.md §3 satisfied: ≥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.md LOC after: within file's own ≤500 LOC status note (was 151 lines; now 155 lines — well within threshold).

Test plan

… (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
artyhoo enabled auto-merge May 26, 2026 08:20
@artyhoo
artyhoo merged commit 69f3c0d into staging May 26, 2026
24 of 25 checks passed
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>
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