Summary
V1 features that intentionally shipped AFTER V0. Expands the rule
catalog (8 more rules), hardens the driver (wait-for, auth scripts,
Playwright storage-state, Chromium auto-fetch), expands the MCP
surface (lint_page_html, compare_viewports, HTTP transport), and
adds codegen + watch mode + suggest-ignores.
This is long. Phase 7 runs in batches of related work; each batch
can ship on its own milestone if the V1 release needs to fan out.
Parking / release-readiness blocker
Status: PARKED until release-readiness automation lands, then Phase 7 Gate 1 may dispatch.
Aram updated the sequence on 2026-05-02: the manual first distribution release (#101) comes after Phase 7 Gate 1, not before it.
Phase 7 Gate 1 (#66 #67 #68 #69 #70 #71 #72 #73 #79 #80 #81) is dispatchable once release-readiness automation is complete:
Manual release gate now follows Gate 1:
PRD references
- PRD §10.6
- PRD §11.2
- PRD §11.4
- PRD §14.1
- PRD §14.2
- PRD §14.4
- PRD §15.3
- PRD §15.4
- PRD §15.5
- PRD §16
Acceptance criteria
Batches
Gates run sequentially (every PR in Gate N must merge before Gate N+1 starts). Within a gate, batches are parallel. For each batch, a recommended dispatch strategy is shown — you can always pick a different shape if it fits. See .agents/rules/dispatch-strategy.md for the heuristic.
Gate 1
2 parallel batches (7A, 7C) — every batch below can run concurrently. Each batch still has its own recommended shape.
Batch 7A — Remaining rules (8 in parallel)
| # |
Ticket |
Crate |
Effort |
Extras |
| #66 |
rule type/family-conformance |
plumb-core |
S |
— |
| #67 |
rule type/weight-conformance |
plumb-core |
S |
— |
| #68 |
rule color/contrast-aa (WCAG 2.1 AA) |
plumb-core |
L |
— |
| #69 |
rule shadow/scale-conformance |
plumb-core |
S |
— |
| #70 |
rule sibling/padding-consistency |
plumb-core |
S |
— |
| #71 |
rule z/scale-conformance |
plumb-core |
S |
— |
| #72 |
rule opacity/scale-conformance |
plumb-core |
S |
— |
| #73 |
rule baseline/rhythm (font metrics + CDP textBoxes) |
plumb-core |
L |
— |
Dispatch (cluster): mix of small and large — bundle 6 small, split 2 large to keep review <400 LOC.
/gh-issue 66 67 69 70 71 72 --worktree # 6 small: one bundled PR
/gh-issue 68 --worktree # L: rule-color-contrast-aa
/gh-issue 73 --worktree # L: rule-baseline-rhythm
Batch 7C — MCP V1 — new tools + HTTP transport
| # |
Ticket |
Crate |
Effort |
Extras |
| #79 |
lint_page_html tool |
plumb-mcp |
M |
security |
| #80 |
compare_viewports tool |
plumb-mcp |
M |
— |
| #81 |
HTTP transport + PLUMB_MCP_TOKEN auth |
plumb-mcp |
S |
security |
Dispatch (bundle): same crate, similar effort — bundling keeps related changes atomic.
/gh-issue 79 80 81 --worktree
Advance to Gate 2 when: every PR in Gate 1 is merged.
Gate 2 after Gate 1
3 parallel batches (7B, 7D, 7E) — every batch below can run concurrently. Each batch still has its own recommended shape.
Batch 7B — Driver ergonomics — wait-for, auth, animation disable, auto-fetch
| # |
Ticket |
Crate |
Effort |
Extras |
| #74 |
--wait-for and --wait-ms flags |
plumb-cli |
S |
— |
| #75 |
--cookie / --header / --auth-script flags |
plumb-cli |
M |
security |
| #76 |
Playwright storage-state loading |
plumb-cli |
M |
security |
| #77 |
disable animations + hide scrollbars + pin DPR |
plumb-cdp |
S |
security |
| #78 |
Chromium auto-fetch via chromiumoxide fetcher |
plumb-cdp |
L |
security |
Dispatch (split): touches 2 crates — split so each gets focused review.
/gh-issue 74 --worktree
/gh-issue 75 --worktree
/gh-issue 76 --worktree
/gh-issue 77 --worktree
/gh-issue 78 --worktree
Batch 7D — Codegen + watch + suggest-ignores
| # |
Ticket |
Crate |
Effort |
Extras |
| #82 |
plumb-codegen crate + plumb init --from ./ |
plumb-cli |
L |
— |
| #83 |
plumb watch |
plumb-cli |
M |
— |
| #84 |
plumb lint --suggest-ignores |
plumb-cli |
M |
— |
Dispatch (cluster): mix of small and large — bundle 2 small, split 1 large to keep review <400 LOC.
/gh-issue 83 84 --worktree # 2 small: one bundled PR
/gh-issue 82 --worktree # L: plumb-codegen-crate-init-from
Batch 7E — VS Code extension (separate repo — tracked here)
| # |
Ticket |
Crate |
Effort |
Extras |
| #85 |
VS Code extension consuming plumb JSON + SARIF |
docs |
L |
— |
Dispatch (single): only one ticket in this batch.
Phase gate follows — see below.
Phase gate
All V1 batches closed with tests + docs AND plumb lint supports
the full CDP capability surface AND MCP surface stable on both
transports AND cargo xtask pre-release green.
Unblocks: (terminal; V2 begins a new runbook)
How to execute
- Create GitHub milestone
v1.0-phase-7 if it doesn't already exist.
- Run
bash create-issues.sh from this directory to create all child issues.
- Dispatch
/gh-issue <child-number> for each batch in order; sessions within a batch run in parallel.
- Close this parent issue when every child is merged and the phase gate holds.
Generated
- Generated at: 2026-04-24T13:16:46Z
- Source spec:
docs/runbooks/phase-7-spec.yaml
- Repo:
aram-devdocs/plumb
Summary
V1 features that intentionally shipped AFTER V0. Expands the rule
catalog (8 more rules), hardens the driver (wait-for, auth scripts,
Playwright storage-state, Chromium auto-fetch), expands the MCP
surface (lint_page_html, compare_viewports, HTTP transport), and
adds codegen + watch mode + suggest-ignores.
This is long. Phase 7 runs in batches of related work; each batch
can ship on its own milestone if the V1 release needs to fan out.
Parking / release-readiness blocker
Status: PARKED until release-readiness automation lands, then Phase 7 Gate 1 may dispatch.
Aram updated the sequence on 2026-05-02: the manual first distribution release (#101) comes after Phase 7 Gate 1, not before it.
Phase 7 Gate 1 (#66 #67 #68 #69 #70 #71 #72 #73 #79 #80 #81) is dispatchable once release-readiness automation is complete:
NPM_TOKEN, install-smoke auth/no-secret-leak behavior, and attestations.Manual release gate now follows Gate 1:
PRD references
Acceptance criteria
plumb lintsupports the full CDP capability surface (auth, cookies, wait-for, storage-state, animation disable).Batches
Gates run sequentially (every PR in Gate N must merge before Gate N+1 starts). Within a gate, batches are parallel. For each batch, a recommended dispatch strategy is shown — you can always pick a different shape if it fits. See
.agents/rules/dispatch-strategy.mdfor the heuristic.7A,7C7B,7D,7EGate 1
2 parallel batches (
7A,7C) — every batch below can run concurrently. Each batch still has its own recommended shape.Batch
7A— Remaining rules (8 in parallel)plumb-coreplumb-coreplumb-coreplumb-coreplumb-coreplumb-coreplumb-coreplumb-coreDispatch (cluster): mix of small and large — bundle 6 small, split 2 large to keep review <400 LOC.
Batch
7C— MCP V1 — new tools + HTTP transportplumb-mcpplumb-mcpplumb-mcpDispatch (bundle): same crate, similar effort — bundling keeps related changes atomic.
Advance to Gate 2 when: every PR in Gate 1 is merged.
Gate 2 after Gate 1
3 parallel batches (
7B,7D,7E) — every batch below can run concurrently. Each batch still has its own recommended shape.Batch
7B— Driver ergonomics — wait-for, auth, animation disable, auto-fetchplumb-cliplumb-cliplumb-cliplumb-cdpplumb-cdpDispatch (split): touches 2 crates — split so each gets focused review.
Batch
7D— Codegen + watch + suggest-ignoresplumb init --from ./plumb-cliplumb-cliplumb-cliDispatch (cluster): mix of small and large — bundle 2 small, split 1 large to keep review <400 LOC.
Batch
7E— VS Code extension (separate repo — tracked here)docsDispatch (single): only one ticket in this batch.
Phase gate follows — see below.
Phase gate
All V1 batches closed with tests + docs AND
plumb lintsupportsthe full CDP capability surface AND MCP surface stable on both
transports AND
cargo xtask pre-releasegreen.Unblocks: (terminal; V2 begins a new runbook)
How to execute
v1.0-phase-7if it doesn't already exist.bash create-issues.shfrom this directory to create all child issues./gh-issue <child-number>for each batch in order; sessions within a batch run in parallel.Generated
docs/runbooks/phase-7-spec.yamlaram-devdocs/plumb