Skip to content

research(meta-orchestrator-ux): F.1 — prior-art on multi-stage dispatch UX - #203

Merged
artyhoo merged 1 commit into
stagingfrom
research/meta-orchestrator-ux-f1
May 24, 2026
Merged

research(meta-orchestrator-ux): F.1 — prior-art on multi-stage dispatch UX#203
artyhoo merged 1 commit into
stagingfrom
research/meta-orchestrator-ux-f1

Conversation

@artyhoo

@artyhoo artyhoo commented May 24, 2026

Copy link
Copy Markdown
Owner

Что сделано

Sub-wave F.1 от kickoff .claude/orchestrator-prompts/meta-orchestrator-followup-audit/kickoff.md §1 — UX research (R-phase, read-only): prior-art sweep на multi-stage orchestrator/CI dispatch UX по build-first-reuse-default.md §3 методологии (≥3 phrasings WebSearch + DeepWiki).

Output: новый файл docs/meta-factory/research-patches/2026-05-24-meta-orchestrator-ux-research.md — 350 строк, 10 candidates исследованы, T16 problem-class evidence inline per candidate, 6-item search-coverage применён к negative-existence claim, Q1-Q5 отвечены, 4 конкретных рекомендации для F.3 + falsifiers + decision log.

Headline verdict

BUILD verdict (prior R-phase) stands — no ADOPT-verbatim upstream match. Но F.1 нашла 3 конкретных UX sub-pattern'а для ADAPT в F.3:

  1. ADAPT (i) — drop slash-tag format → slash + NL payload (per §A.5 (i), Q1 evidence): формат /Mode-A /Roles-worker /Skills-foo имеет ZERO upstream precedent в 10 surveyed tools (GHA, Cline, ChatOps, Discord, Copilot Chat, etc. — все используют /<command> <natural-language>). Глобальный ~/.claude/skills/orchestrator/SKILL.md парсит natural language после slash, не structured flags. Это объясняет maintainer's «не удобный формат» — category mismatch (CLI flag syntax inside a chat field).
  2. ADAPT (ii) — Argo Workflows ASCII tree (├─ / └─) (per §A.5 (ii), Q2 evidence): единственный CLI-renderable формат для prospective dependency graph в plaintext markdown. GHA/Concourse используют web UI; Mermaid не рендерится в CC chat.
  3. ADAPT (iii) — Cline new_task handoff structure (per §A.5 (iii), Q3 evidence): 5-column table из kickoff draft (# / Paste / Когда / Ждёшь / Можно параллельно с) структурно валидна; «Можно параллельно с» — genuine BUILD (нет upstream precedent для static parallel-plan column).
  4. + один architectural finding (iv) — closed-loop re-invocation matches LangGraph checkpoint pattern (mechanical state из gh pr list > human REPORT). Concrete gap: SKILL.md §1 Step 2 не имеет explicit «stale-REPORT reconciliation» line — recommended addition в F.3.

Полный 6-item search-coverage checklist в §A.3 подтверждает negative-existence claim чистым (confidence: high на Q1/Q2/Q4, medium на Q3/Q5).

Как проверить

  • research-patch создан — 350 строк, 8 sections (A.1-A.8 incl. bonus Decision log) — verified: wc -l + grep -c "^##" на файле
  • 10 candidates исследованы (above floor=6) — GHA / Concourse / Argo / Dagger / just / LangGraph / Cline new_task / Superpowers parallel / gh workflow run / Jason Liu chat-UX — verified: grep -c "^### Candidate" research-patch = 10
  • T16 problem-class evidence per candidate в §A.2 («Upstream problem class / Our problem class / Match? Evidence») — verified: read of §A.2 table
  • 6-item search-coverage применён к «no exact upstream match» claim — verified: read of §A.3
  • Q1-Q5 отвечены (paste-format, dep-graph, action-queue, closed-loop, iteration methodology) с evidence + URLs — verified: read of §A.4
  • §A.5 рекомендации цитируют §A.2 verdicts (не reframing kickoff draft — patch actually moves Q1/Q2/Q4) — verified: read of §A.5
  • §A.6 falsifier per recommendation present — verified: section presence by grep "^##.*A.6"
  • Principle 12 still greenverified: worker REPORT + npm --prefix packages/core run test 2>&1 | grep "12-ai-laziness" (worker side)
  • Conventional commit3a7c08d research(meta-orchestrator-ux): F.1 — prior-art on multi-stage dispatch UXverified: git log -1 --format
  • Read-only scope respected — no edits к SKILL.md / principles / hooks; только новый файл в research-patches/verified: git diff HEAD~1 --stat (1 file, +350)
  • §1.7 forward/backward спирит (BFR + T11/T12/T15/T16 self-applied) — verified: decision log §A.8 + recommendation provenance в §A.5
  • CI greenpending push trigger
  • Maintainer DECISION на следующий шаг: (a) dispatch Sub-wave F.2 (cold review of SKILL.md, parallel-safe с этой PR), (b) dispatch Sub-wave F.3 immediately based on §A.5 рекомендаций, (c) revise §A.5 recommendations before F.3, (d) park F findings, переключиться на другой umbrella. Это genuine fork (per reviewer-discipline.md §2) — research session не может выбрать за maintainer.

Что НЕ сделано (scope guard)

  • Sub-wave F.2 (cold review of SKILL.md) — separate dispatch.
  • Sub-wave F.3 (UX implementation — SKILL.md edits, references/output-format.md, principle 18) — depends on F.1 + F.2 verdicts, separate dispatch.
  • WIP files в local working tree (parallel-subwave-isolation.md, project-history-book*.md, wave-sequencing-plan.md) — unrelated к F.1, stashed под wip: pre-F1-PR — parallel-subwave + book + wave-sequencing edits, не вошли в эту PR.

Сценарий continue

F.1 verdict готов к консумации:

  • Если F.3 будет dispatch'ен следующим — kickoff §1 Sub-wave F.3 нужно обновить с поправкой §A.5 (i) (заменить slash-tag draft на slash + NL payload format) перед dispatch. Иначе F.3 будет codify-as-drafted (= повторение «не удобный формат» жалобы).
  • Если F.2 параллельно — file-conflict-safe (F.2 = read-only SKILL.md review, не пишет; F.1 PR не трогает SKILL.md).

§1.7 Skipped: research-patch in docs/meta-factory/research-patches/ — not a discipline-bearing artefact path (.claude/rules/ / packages/core/principles/ / EXECUTION-PLAN / prior-art-evaluations.md / CLAUDE.md / templates). Patch itself applies §1.7 substance: forward-check (BFR compliance via §A.3 verdict + 6-item) + backward-check (§A.6 falsifiers per recommendation) + self-reflection (§A.8 decision log on T15 self-application — verified that research moved Q1/Q2/Q4 substantively, не relay of kickoff draft).

…ch UX

Surveyed 10 upstream candidates (GitHub Actions, Concourse, Argo Workflows,
Dagger, just, LangGraph, Cline new_task, Superpowers dispatching-parallel-agents,
gh workflow run, slash-command+NL-payload pattern) for the /meta-orchestrator
output UX problem: paste-this-block format, dependency graph rendering,
action queue table, closed-loop re-invocation. BUILD verdict confirmed;
3 specific ADAPT patterns found: Argo ASCII tree (dependency visualization),
slash+NL-payload (drop slash-tag format — zero upstream precedent), Cline
handoff context structure (1-liner block template). §A.5 feeds F.3 directly.

Prior-art: skipped — research-patch only, no new capability
@artyhoo
artyhoo enabled auto-merge (squash) May 24, 2026 15:52
@artyhoo
artyhoo merged commit 0905f04 into staging May 24, 2026
22 checks passed
@artyhoo
artyhoo deleted the research/meta-orchestrator-ux-f1 branch May 24, 2026 16:20
artyhoo added a commit that referenced this pull request May 24, 2026
…205)

Closes Sub-wave F.3 from `.claude/orchestrator-prompts/meta-orchestrator-followup-audit/kickoff.md §1` per the binding scope in `docs/meta-factory/research-patches/2026-05-24-meta-orchestrator-refactor-f3-scope.md §1.5` (12 items, all addressed in this commit).

### G §1.5 items closed

- **Item 1 (M1)** — §5 dispatch table row «R-phase, single» routed to Mode A inline (was Queue mode); aligns with `queue-mode.md §1 Triggers` («single kickoff → Mode A»).
- **Item 2 (D3-MAJOR)** — §0 `disable-model-invocation: true` misattribution fixed: the flag suppresses CC's default auto-load into subagent contexts, NOT a recursive-invocation guard (subagent depth is hard-capped at 2 by CC's harness per `code.claude.com/docs/en/sub-agents.md`).
- **Item 3 (M2)** — `references/plain-language-tail.md:8` «injects» wording replaced with «enforces presence via Stop hook `decision:block` mechanism». Mirror synced.
- **Item 4 (m1)** — §5 added missing «R-phase, multiple sequential → Queue mode» row.
- **Item 5 (m2)** — §6 stage-gate `created:>=2026-05-23` hardcoded date filter removed; `head:<branch> base:staging` is specific enough; T-MOB-B notes the corner-case discipline.
- **Item 6 (m3)** — blank line added before `## See also` (Markdown convention + principle 09 header format).
- **Item 7 (F3-S1)** — §5 antipatterns added: `#worker-dispatch-via-subagent` + `#commit-on-behalf-of-worker`, each with falsifier.
- **Item 8 (F3-S2)** — §10 «Inline session report» expanded to specify the 3-layer structure (`## Dependency graph` ASCII tree + `## Action queue` 5-column table + `### Stage N` 1-liner blocks). SKILL.md stays under the 500-line gate by pointing the full grammar at `references/output-format.md` (kickoff §4 #10 split option).
- **Item 9 (F3-S3)** — NEW `references/output-format.md` (299 lines) with grammar + 4 worked examples (Mode A single / Mode SDD / Mode B × N parallel worktrees / Mode Queue) + ASCII templates + 1-liner anti-patterns. Mirror synced (consumer-relative paths in §A see-also block).
- **Item 10 (Gap-1)** — `launch-table-generator.sh detect_subwaves()` keyword filter added (`R-phase|execution|wiring|Mode [AB]|Direct Edit|SDD|Queue mode|I-phase|implementer|reviewer|sub-wave`) to avoid §1/§2 hook+dispatch tables being matched as sub-waves. Mirror synced + smoke-tested on this kickoff (8/8 sub-waves correctly detected).
- **Item 11 (§1 Step 2 REPORT reconciliation)** — added clause: when maintainer-passed REPORT contradicts `gh pr list`, emit reconciliation note and trust mechanical state (REPORT is supplementary, not load-bearing; per 3-layer responsibility model + memory `feedback_no_human_verification_ai_self_verifies`).
- **Item 12 (mirror sync)** — every edit propagated to consumer mirror (`skills/meta-orchestrator/`); helpers/launch-table-generator.sh byte-identical; SKILL.md mirror gains a condensed §10 carrying the same 6 required substrings; output-format.md mirror is identical content with consumer-relative §A links (markdown links replaced by plain text for project-internal refs so `check-skill-drift.sh` stays green).

### Principle 18 — new (`packages/core/principles/18-meta-orchestrator-output-format.test.ts`)

Mechanical structural check: for each of the 4 surfaces (authoring SKILL.md §10, mirror SKILL.md §10, authoring output-format.md, mirror output-format.md), asserts the 6 required substrings are present (`## Dependency graph`, `↓`, `## Action queue`, `Paste в новый CC tab`, `Можно параллельно с`, `### Stage`). Includes companion paired-negative tests proving the check fails on synthetic broken §10 content (per principle 02 discipline).

Slot 18 verified free (slots 01-17 occupied).

### Acceptance criteria

- ✅ SKILL.md §10 expanded with 3-layer output spec (compact pointer + substring spec); SKILL.md stays under 500-line gate (499 lines).
- ✅ `references/output-format.md` shipped with grammar + 4 worked examples (Mode A / SDD / Mode B × N / Queue).
- ✅ Consumer mirror synced; `check-skill-drift.sh` green; principle 14 green.
- ✅ Principle 12 still green (kickoff §5 AI-traps citations unaffected).
- ✅ Principle 18 green (new).
- ✅ Own cold-QA pre-handoff (T19): G §1.5 12 items + kickoff §4 #10 + §1.7 forward/backward verified.

§1.7: forward+backward-check applied. Forward — principle 18 = REFERENCE from principle 12 precedent at packages/core/principles/12-ai-laziness-traps.test.ts:24; Argo `├── / └──` ADAPT vocabulary cited from F.1 prior-art PR #203 at docs/meta-factory/research-patches/2026-05-24-meta-orchestrator-ux-research.md:30; deterministic TypeScript substring grep with no paid LLM (no-paid-llm-in-ci.md §1); references/output-format.md carries Authoritative-for header per doc-authority-hierarchy.md §2 at .claude/skills/meta-orchestrator/references/output-format.md:3; SKILL ↔ references spec-of pointer at .claude/skills/meta-orchestrator/SKILL.md:421 per dual-implementation-discipline.md §5. Backward — principle 18 scope = SKILL.md §10 of meta-orchestrator skill only (covers both authoring + mirror copies via SURFACES array at packages/core/principles/18-meta-orchestrator-output-format.test.ts:54-77); does NOT introduce retroactive sweep across other skills; paired-negative tests at packages/core/principles/18-meta-orchestrator-output-format.test.ts:152-185 prove the check is non-tautological per principle 02.

### See also

- Parent kickoff: `.claude/orchestrator-prompts/meta-orchestrator-followup-audit/kickoff.md §1` Sub-wave F.3
- G research-patch §1.5: `docs/meta-factory/research-patches/2026-05-24-meta-orchestrator-refactor-f3-scope.md`
- F.1 prior-art: `docs/meta-factory/research-patches/2026-05-24-meta-orchestrator-ux-research.md`

Prior-art: prior-art-evaluations.md#64 (subagent-driven-development KEEP-NARROW + REFERENCE — F.3 introduces no new capability beyond extending the existing meta-orchestrator skill per the G binding scope; no new SSOT row needed).
artyhoo added a commit that referenced this pull request May 25, 2026
… detection) (#220)

Run `bash .claude/skills/meta-orchestrator/helpers/plan-currency-check.sh`
(L2 Stage 3 detection shipped in #217) → 88 UNTRACKED-N entries surfaced
between the 2026-05-22 reconciliation and origin/staging tip (#217). Map
each to an existing §0 / Track row by adding the PR number to its evidence
cell, or to a new §0 row for two umbrellas that landed in full since the
prior snapshot. Re-run helper → 0 UNTRACKED remaining.

Key changes:

- Snapshot date 2026-05-22 → 2026-05-25 (header + §0).
- N8 row: A-phase 🔲 → 🟡 — C1 SSOT-existence (#170), C2 kickoff
  T-enumeration floor (#174), C3 principle 13 §1.7 substance (#178),
  C4 delivery-channel marker (#177), activation #180. C5 + cost-levers
  remain gated on §5.3 utilisation trigger.
- Track M.1 / M.4 → DONE: M.1 codified T20 via #212 (with NB note —
  recommendation-laziness took the T20 slot, mutation-equivalence
  T-bump 20→21 still pending); M.4 6 paired-negative bash-hook tests
  shipped #195/#196/#197/#198/#199/#200.
- Two new §0 rows: Meta-orchestrator skill (Track P) — BUILD #186 +
  audit rounds #192/#193/#194/#201/#202 + UX refactor #203/#204/#205
  + planner-completeness #213/#214/#217 + §1.7 PR-body mandate #216;
  Recommendation-laziness discipline — R-phase #206/#207, benchmark
  #210, I-phase Sub-waves A/C/D #211/#212/#215.
- N7 row: + dogfood research-patch #135 / §4 demotion #166 / live-trial
  verified #171. N4b row: + design #136 / record #118.
- Infra paragraph: PR refs for I.1 follow-ups (#121/#123/#124/#125/
  #128/#130/#131/#143/#145/#146/#147/#148/#149/#172/#187), I.2
  (#139/#142/#154/#175), I.3 DN-4 (#126/#132/#133/#138/#140/#152/
  #159/#161/#162/#167).
- Track 2.3 (channel-earliness audit) → DONE 2026-05-23 (#181); removed
  from "What actually remains".
- Footer subsection: standalone work (#191 satellite-arch / #189
  guard-liveness / #173 storm-readiness / #176 §10 port / #182 cleanup),
  Wave 10 follow-ups (#110/#112/#113), plan-revision history (#108/
  #109/#153/#155/#157/#160/#164/#165/#168/#179/#185).

Verification:
- `bash .claude/skills/meta-orchestrator/helpers/plan-currency-check.sh
  | grep -c '^UNTRACKED'` → 0 (down from 88).
- `npx markdownlint-cli docs/meta-factory/wave-sequencing-plan.md`
  → no violations.
- `npx vitest run packages/core/skills/plan-currency-check.test.ts`
  → 14/14 passed.

Prior-art: skipped — chore, doc reconciliation only, no new capability
or rule introduced.
artyhoo added a commit that referenced this pull request Sep 1, 2026
…1550)

* docs(s3-c5): D1 derivable-prose population inventory + entry re-verification

19 rows / 5 classes; enumeration strictly BEFORE migration (T5/T10).
Findings: presets row trigger fired (MIGRATE-now), INSTALL-FOR-AI rosters
derivable from setup.d manifest (MIGRATE-now x2), README count claims live-
drifted (20 hooks vs measured 21; 8 agents vs shipped 10 -> PROPOSE-to-owner),
aif-version population drifted 4 -> 6 files (P-2 park stands). T7 counter-
prompt run cold, non-empty; T15 self-application section present.

* feat(docs-gen): INSTALL-FOR-AI install-roster → getff:begin generated section + drift gate

S3 D2 (beta-ai-docs-agnosticism), inventory row B1: the «This installs» roster
(INSTALL-FOR-AI.md:76-96) becomes a getff:begin generated section rendered from
the installer manifests (setup.d/20-agents.sh skip-list + factory-gated pair,
setup.d/10-skills.sh cp-literals, setup.d/lib.sh GETFF_SKILLS_* constants).
Drift gate: scripts/render-install-roster.mjs --check (write/check modes,
render-rule-index.mjs pattern), wired into audit-self.yml manifest-render-check.
Caveat prose (KEEP-AIF notes, --profile core) preserved outside the fence (T17).
Inventory B2 verdict revised MIGRATE-now → STAYS-PROSE with owner+trigger
(§7 addendum: tree sits inside a ```text block + annotation-bearing judgment).

Prior-art: prior-art-evaluations.md#208 (deterministic digest renderer — same
render-rule-index/fence.ts pattern extended to a second source class; fence.ts
reused verbatim, zero new fence logic).

* feat(docs-gen): AI-USAGE-GUIDE §6a Launch presets → getff:begin rendered from shipped preset data

S3 D2+D5(i) (beta-ai-docs-agnosticism), inventory row A3: the §6 honesty-table
row «Launch presets … not shipped … this guide gains a §Presets rendered from the
shipped preset data» had its own trigger fire (beta-delivery-ux S2 merged, presets
on disk) — the row leaves the not-shipped table and the promised section lands as
a generated one. Renderer scripts/render-presets.mjs parses
.claude/skills/pipeline/references/presets/*.json (same source list-presets.sh
reads; line shape mirrors its output), writes the `pipeline-presets` fence via the
shared fence.ts machinery. Drift gate --check wired into audit-self.yml.
Baselines: 11 install fingerprints regenerated (SNAPSHOT_MODE=capture); audited
diff = only .ai-factory/AI-USAGE-GUIDE.md + .ai-factory/refresh-baseline.json
hashes; SNAPSHOT_MODE=compare 15/15 pass.

Prior-art: prior-art-evaluations.md#208 + #203/#204 (same render/--check +
marker-region drift-gate family — fence.ts reused verbatim, zero new fence logic).

* feat(agents): claims-conformance-auditor — cold docs-claims vs shipped-reality auditor

S3 D4 (beta-ai-docs-agnosticism, spec C5 r3 + §8): the named cold auditor the
assembly gate runs over docs-site claims (compliance-verifier class agents/*.md;
attention-is-not-a-mechanism §1 — checklist is merge authority, agent is the
detection layer). Cold-by-construction dispatch, claim taxonomy, per-claim
VERIFIED/GAP/UNVERIFIABLE with T3 evidence, GO/REVISE/STOP output grammar,
promotion trigger = spec §6 falsifier (repeated claim drift → deterministic check).
tools: line = harness-universal only (principle 21 green: 14/14).
Acceptance dry-run over README.md executed cold (56 claims: 47 VERIFIED / 6 GAP /
3 UNVERIFIABLE) — output pasted in the stage PR body; GAP rows are maintainer-owned
README drift → routed to the D3 proposal, never direct-edited here.

Prior-art: prior-art-evaluations.md#228 (fidelity-auditor class — session-bound
cold agent under no-paid-llm-in-ci; shape precedents compliance-verifier +
backward-sweep-auditor reused, protocol novel to the claims-taxonomy slice).

* S3 D3: owner-gated proposals (P1 zcode rollup renderer, P2 living-docs, P3 README) + install-roster regen

P1 ships scripts/render-zcode-parity-rollup.mjs — PROPOSAL renderer for the
zcode-parity-doctrine §2 derivable rollup (hook population / plugin twins /
classification counts; per-row rationale stays prose per the D7 falsifier).
--check refuses (exit 2) until the maintainer lands the target fence, so a
premature CI wiring fails loud, never silently green. Verified: --emit parses
21/21 census rows (escaped-pipe-aware + §2-scoped), rollup matches the hand
count at doctrine:65; plugin twins 15 of 21.

P2 (living-docs-auditor /aif-verify contradiction) and P3 (README claim drift
from the cold-auditor dry-run: agent count, ESLint major, husky/depcruise
wiring steps, probeR4 pass-vs-warn, Wave B status, hook count) are evidence
tables awaiting maintainer sign-off — zero direct edits to owner-gated paths.

INSTALL-FOR-AI.md roster regenerated after claims-conformance-auditor.md
landed (10 → 11 shipped agents) — the drift gate caught the same-PR change,
which is the live discrimination proof for this stage's D2.

* fix(s3-c5): cold-QA/fidelity round-1 findings — fail-loud roster guard + P3 ESLint retraction

Cold-audit rework (T19/T21 + fidelity Round 1, 2026-09-01):
- render-install-roster.mjs: zero-match skip-list now throws (fail-loud) instead of
  silently rendering ALL agents as shipped if setup.d/20-agents.sh is restructured.
- owner-proposals patch: P3 ESLint row RETRACTED — README:30 "ESLint 10 flat config" is
  correct (packages/core/package.json:94 "eslint": "^10.4.0"; root package.json has no
  eslint key; the dry-run's quoted probe was unreproducible). 6 GAP rows -> 5 actionable.
- same patch: "three S3 gates" -> two (render-rule-index/render-rules predate S3).

Fidelity Round-1 MAJOR (kickoff host-verify runner lines) is NOT discharged here:
the kickoff edit is harness-classifier-blocked for this session (sensitive file) —
stays as park P-KICKOFF for operator egress.

* fix(s3-c5): rework round-1 — sweep rows, prettier, baselines, P1 scope reconciliation

- wire install-roster-check + presets-check into run-local-ci-sweep.sh gate_table
  (coverage test PASS=9 FAIL=0; closes the two unwired CI commands)
- prettier-canonical output: format auditor + AI-USAGE-GUIDE; render-presets now
  emits prettier-canonical fence bodies (blank lines around the bullet list) so
  --check stays green after format:check
- re-capture 11 install baselines on the final tree (new claims-conformance-auditor
  ship line + prettierignore + guide hash); diff audited — only expected line-classes;
  byte-identical compare 15/15
- P1 scope reconciliation (fidelity MAJOR): owner-proposals §P1 now states the narrow
  scope explicitly — §2 rollup counts convert; §2 Status col judgment-bearing (D7
  falsifier, :61/:62 quoted); §3 table PARKED under §6 with Option A/B; inventory row
  A2 + §8 addendum made verbatim-consistent with P1
- P2 P-GH park resolved: S1's replacement wording carried verbatim from PR #1311 body
  (parked question 3), provenance recorded; still proposal-only (zero owner edits)

Prior-art: skipped — rework round 1: gate-table wiring + formatting + baseline regen + proposal scope reconciliation; no new capability

* docs(kickoff-s3): host-verify runner lines for the two S3 drift gates (W-1, coordinator host-side — container Edit on kickoffs is classifier-blocked)

* docs(s3-c5): owner-proposals patch — principle 10 scope slug + principle 13 §1.7 self-application section (pre-push meta-tests)

* docs(s3-c5): owner-proposals §1.7 — correct the P1 renderer reuse claim (no fence.ts import until the fence lands; round-3 fidelity note)

---------

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