LearnNewsExamplesServices
Frontmatter
id16493
titleThe update-chain goal bar has nowhere honest to land while it is red
stateClosed
labels
enhancementaitesting
assigneesneo-opus-vega
createdAtAug 4, 2026, 1:43 PM
updatedAtAug 5, 2026, 1:33 PM
githubUrlhttps://github.com/neomjs/neo/issues/16493
authorneo-opus-vega
commentsCount0
parentIssue16455
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 5, 2026, 1:33 PM

The update-chain goal bar has nowhere honest to land while it is red

Closed Backlog/active-chunk-12 enhancementaitesting
neo-opus-vega
neo-opus-vega commented on Aug 4, 2026, 1:43 PM

Refs #16455 · parent of the gate-flip half

Context

#16455 owns the Epic's close condition and prescribes its own delivery order: "The harness lands first and lands red… It runs opt-in — outside the default CI gate — while the implementation leaves are open, and moves into the gate when it goes green. That flip is this leaf's completion."

So #16455 has two separable halves with a real sequencing boundary: the harness, deliverable now against five open legs, and the gate-flip, which cannot happen until those legs land and the scenario goes green. This ticket is the first half, filed per §9.1 — a PR delivering the harness cannot honestly Resolves #16455, because pointing a closing keyword at it would auto-close a ticket whose completion condition is not met. Precedent: #16486 / PR #16483, four hours earlier, same shape.

The Problem

A red-first harness has nowhere honest to land. Refs-only is permitted for drafts, and draft PRs cannot be reviewed — so the delivery either lies about its close target or sits unreviewable.

The harness itself is also not trivially placeable. test/playwright/integration-parity/ already provisions a disposable Compose plane and is already in the default gate, so reusing it would turn the shared gate red on day one — which #16455's own Avoided Traps section forbids, since a permanently-red check gets routed around within a week and stops meaning anything.

The Architectural Reality

  • test/playwright/playwright.config.integration-parity.mjs — the sibling precedent: testDir, a webServer fixture that materialises Compose children, and resolveFreePortSync for port handling. Gated via .github/workflows/test.yml.
  • test/playwright/integration-parity/fixtures/parityComposeWebServer.mjs — the provisioner (waitForServices, readComposeServices, cleanup). Reusable; nothing in that project touches neo-revision, deploy-pipeline, redeployPreflight or ls-remote, which is why #16455's premise holds.
  • ai/scripts/maintenance/migrateDeployment.mjs — the one chain leg with a shipped executable surface today.

The Fix

A separate opt-in Playwright project carrying the Epic's outcome sentence as one scenario, absent from .github/workflows/ until green.

Two properties do the work. The red names which leg is missing, with owner and obligation, so the failure is a work list rather than an opaque wall — and the shipped leg is asserted by name, so a sibling landing cannot go unnoticed. And an unrunnable scenario reports INCONCLUSIVE and fails: a harness that cannot provision has measured nothing, and reporting that as green would make the goal bar satisfiable by breaking the harness.

retries: 0, because a scenario that passes on attempt two has told you the chain is unreliable and a retry converts that finding into a green tick.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback / Error Semantics Docs Evidence
playwright.config.update-chain.mjs this ticket A new opt-in project, not referenced by any workflow Referenced by a workflow before green ⇒ the shared gate goes red on day one; absence of a workflow entry is the enforcement config JSDoc a check asserting the config appears in no .github/workflows/ file, with integration-parity as the positive control
the goal-bar scenario #16455's outcome sentence Fails while the chain is incomplete, naming each missing leg and owner Cannot provision ⇒ INCONCLUSIVE and fails; never reports pass scenario JSDoc observed run: 1 passed, 1 failed with five legs named
gate membership .github/workflows/test.yml Unchanged by this ticket — the flip belongs to #16455 Flipped early ⇒ #16455's own trap workflow file the workflow diff is empty

Decision Record impact

none — an acceptance harness over surfaces the sibling leaves define. It sets no contract of its own.

Acceptance Criteria

  • An opt-in Playwright project carries the Epic's outcome sentence as one executable scenario.
  • It lands red, and the failure names each missing leg with its owning ticket rather than failing opaquely.
  • The count of shipped legs is asserted, so a sibling landing changes the result instead of passing unnoticed.
  • An unrunnable scenario reports INCONCLUSIVE and fails; it never reports pass.
  • The project is referenced by no workflow file, verified with a positive control that the check can detect gate membership at all.
  • retries: 0, so a flaky result cannot be converted into a green tick.
  • It implements none of the machinery it measures — no caller, no selector, no admissibility rule.

Out of Scope

  • The gate-flip. #16455's completion condition; it needs the sibling legs green first.
  • Implementing any chain leg#16450 / #16451 / #16452 / #16453 / #16320.
  • Per-leg unit coverage. Each sibling owns its own; this fails only when they do not compose.

Avoided Traps

  • Reusing the gated integration-parity project. Cheaper edit, wrong one: red-by-design in a gated project turns the shared gate red immediately.
  • test.skip instead of opt-in. A skip inside a gated project reads as green and proves nothing; an unreferenced config cannot read as anything.
  • Refs-only on a draft PR. Permitted by the lint, but a draft cannot be reviewed — the operator has named draft PRs as an anti-pattern. Filing the honest narrow close target is the substrate's own prescription.
  • Letting the harness grow the machinery it measures. That is how a proof leaf becomes a second umbrella and the goal bar disappears into it.

Related

  • #16455 — parent; owns the gate-flip and the standing property. Stays open.
  • #16448 — the Epic whose close condition this measures.
  • #16486 / PR #16483 — @neo-opus-ada's precedent for the honest-narrow-close-target split, same day.

Live latest-open sweep: checked the latest open issues immediately before filing; no equivalent found. A2A claim sweep: no [lane-claim]/[lane-intent] overlapping this scope — #16455 is assigned to me.

Origin Session ID: 11695cce-9854-4be2-80c3-8ea4322298bf

Retrieval Hint: query_raw_memories("red-first goal bar opt-in playwright project outside CI gate inconclusive never passes update chain")

tobiu closed this issue on Aug 5, 2026, 1:33 PM