chore(harness): reopen the 0.0.6 runtime lane for three public-runtime blockers - #1555
chore(harness): reopen the 0.0.6 runtime lane for three public-runtime blockers#1555rickylabs wants to merge 73 commits into
Conversation
Narrow reopen. Records the grouping decision from located surfaces rather than titles: three distinct files across two packages, no overlap, nothing technically inseparable, so three independent PRs. Routes evaluation through the automatic label-driven policy per D-4/D-5. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
#1548: the browser read is unreachable by static substitution for two reasons (import.meta passed by value, keys read by computed index), corroborated by this repo's own Vite plugin emitting define keys as literal import.meta.env.X. #1459 is larger than scoped: DeferIsland is not registered as an island at all, and a second defect sets f-client-nav false in exactly the partial-miss case. Its client-bundle regression criterion needs capability the repo lacks, so it moves to #1557 with a written reason rather than being ticked on weaker evidence. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…ble-trigger All three evaluations running on the automatic label-driven policy with exactly one summary comment each. Records that flipping #1556 to ready and then also swapping to status:impl-eval produced two dispatcher runs -- no duplicate spend observed, but avoidable, and not repeated for the other two. Records the #1459 pre-dispatch rescope: its client-bundle regression criterion moved to #1557 rather than being ticked on evidence that does not prove it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
The SDK is a structural precedent only -- it carries the same substitutability defect, so the plan must not claim it as a fix precedent. arch:check is confirmed not to cover plugin-streams-core, making the explicit target scan a hard gate step rather than a conditional. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Resolves D1 feasibility from the cached @fresh/plugin-vite source -- it exposes islandSpecifiers, documented for declaring islands from remote packages -- so the specifier route is locked and copy-mode dropped. Picks the D3 technique, enumerates the single DeferComponent render site, and names the scaffold migration. Corrects one verdict finding: the dev-server probe it proposed is a liveness fetch with no browser, so it cannot prove the client issues the partial request. Commits instead to building the client bundle and asserting island presence, which attacks the exact evidence the issue reports. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Verdict is PASS in the body; the machine marker read NONE because the token was a markdown heading (filed as #1563). Not re-run -- that would be duplicate evaluator spend to work around a formatting bug. Corrects my own citation: the scaffold pins @fresh/plugin-vite ^1.1.2, not the 1.0.8 I read from the local cache. islandSpecifiers exists in both, so the D1 conclusion stands. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
|
[CHECKPOINT] — consumer-visible merge, for the fixes/release coordinator Reporting a merged consumer-visible change per the 0.0.6 intermediary-canary strategy. This lane does not cut releases; this is a report, not a request to publish. Landed
Why it matters to a consumer: durable chat subscribers lost resume and live-polling semantics because the proxy silently dropped the query string. Surface change: additive only — a new optional Evidence
Caveat worth carrying into any canary noteThe package-quality verdict for Still in flight in this lane
I will report each of these as its own checkpoint when merged. |
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Records that an intermediate 0-failing reading coexisted with a pending scaffold-runtime gate; counting failures alone would have cleared the merge early. Also records the third auto-added duplicate status label in this lane. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
|
[CHECKPOINT] — consumer-visible merge, for the fixes/release coordinator Second consumer-visible checkpoint from this lane. This lane does not cut releases; reporting only. Landed
Why it matters to a consumer: with Surface change: none. Evidence
Two caveats that belong in any canary note
Also carried: Remaining in this lane#1459 (p1, deferred coordinator hydration) — PLAN-EVAL PASS, implementation next. Its client-bundle regression criterion is split to #1557, so its PR will carry |
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Records that I announced the dispatch without performing it -- the lane sat at the plan head with no session until the watcher caught it. Records the intervention on the live slice: deno.lock had +388/-9 including an exact @fresh/plugin-vite pin against the repo's range convention, steered through codex-resume on the same thread with revert as the default. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Audit shows zero Fable usage in this lane: every review ran on Opus, research on Opus, evaluation on MiniMax/DeepSeek/Qwen, implementation on Codex Sol. Nothing to stop or unwind. Reports the one configured route that would have selected Fable -- review_codex_complex for the in-flight Sol-high #1459 slice -- which is stopped and reassigned to this Opus session, the route's own documented fallback. Corrects supervisor.md, which advertised a Fable review binding that was never exercised. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
deno.lock matches HEAD; no committed delta. Records that the +397/-9 churn was Babel/Preact/Vite resolver entries -- the signature of a client-bundle build side effect from the B3 fixture, not a manifest dependency. Flags two generated files for attribution at audit: embedded.generated.ts is legitimately implied by the template change, agent-docs.generated.ts is not. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…t lock The added specifiers are a Vite/Rollup/Babel client-build toolchain, so the B3 bundle fixture's real vite build is writing deno.lock. A plain revert cannot hold; the next test run regenerates it. Records that this is a second-order consequence of my own B3 requirement, and steers with three ordered resolutions including an explicit 'B3 is not viable under the lock policy, rescope it' as an acceptable answer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
deno.lock reached the PR head at 1a5c1d6 despite two explicit steers. Advancement stopped -- PR still draft at status:plan-eval, no eval triggered, nothing merged. Records both root causes: the vite build writes the lock so revert alone cannot hold, and my guard was prose rather than a mechanism. Corrective slice delegated to the live thread rather than self-performed, because codex-status showed it still owns that worktree. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Confirms ownership of all seven remaining leaves, records the connected-group split and the verified surface separation enabling parallel dispatch, and adopts the fixes lane's wall-time short-circuit detector as a canary check. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
The P0 worktree existed with no process while #1583 ran. Verified file and suite independence concretely -- including that packages/fresh/deno.json does not declare @netscript/sdk, removing the one theoretical overlap -- then dispatched plan-first so the design choice still gets PLAN-EVAL. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…f prohibitions A second, still-running Fable IMPL-EVAL process was found and terminated; no evaluate.md was written and the leaf work is intact. Audit shows three of five dispatched briefs carried no Fable prohibition at all, including #1583's. Same shape as D-7: a constraint stated where the actor cannot see it is not a mechanism. Adds a standard prohibitions block for all future briefs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
The exit-143 was the background dispatch wrapper, not slice work; leaf, PR and the automatic Actions-hosted evaluation were all unaffected. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…cles Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…ispositions D-9 records that both automatic evaluators stalled at once and the authorized native fallbacks that replaced them, including why the fallback evaluators were denied GitHub write access rather than audited for trigger tokens, and that the resume path silently drops the brief's effort tier. D-10 records C2 closed by inspection: the hub is per-connection, so the late-join suffix window is the duplicate-subscriber window the fix removes. C6 was filed instead as #1598. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…the ready-merge rerun trap Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…etry leaves Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…the PR head D-11. Measured across four PRs: label-triggered dispatches report headSha equal to the branch head, draft-to-ready dispatches report the base/merge ref. #1595 reached ready-merge on a PASS whose run metadata pointed at old main, and #1602's evaluator was running against main itself. Standing rule: flip to ready and apply the status label as a separate action, assert run.headSha == pr.headRefOid before consuming any verdict, and treat any post-ready change as voiding the prior verdict. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…AL PASS Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…ivergence Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…an evaluator read For pull_request events github.sha is the merge ref by design, so the metadata never described the evaluator's checkout. The rule cost one rollback and one cancelled evaluation on verdicts that were already valid. Authority is the verdict's declared head; a new generation is for a genuinely new head or a failed/no-verdict run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…ycle Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
The default scaffold emits only static createRouteReference patterns, so a generated dynamic Form-C scaffold does not exist to test. The fixture proves the runtime reference shape, not generator provenance. Decision: strengthen with a mechanical shape anchor, state the residual limitation, and file the gap rather than reword the criterion. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…ion on #1562 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…r the scaffold reading The route-manifest generator in packages/fresh already handles dynamic segments, so a test can drive the browser fixture from real generator output today. I searched packages/cli, found only static patterns, and generalized from 'the scaffold cannot' to 'nothing can'. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…hed JSDoc twice D-14. Since #1587's codename gate, an issue reference in a published doc comment is a CI failure. Both occurrences trace to brief wording that used issue numbers as shorthand and asked for the reasoning to be recorded in source. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…correction Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
…ne close Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKxrWGp5uxEHQ2NyZiZSMF
|
Closing as a non-merge orchestration record. This control PR carried orchestration evidence only and never had a closing keyword. Its lane is complete, so it is closed rather than merged, at owner direction, so it does not remain an open item against the 0.0.6 milestone. What it recordedThe narrow reopen of the 0.0.6 runtime / public-surface lane. Everything it coordinated has landed through its own leaf branch and PR against
Plus, earlier in the run: #1457, #1459, #1548, #1571, #1580, #1227, and the terminal-green Canary.4. Every referenced issue is closed and carries Verified before closing72 commits, zero non-run-artifact files — it is what it claimed to be, an evidence-only control branch, and merging it would add nothing to One consequence, stated so it is not discovered laterThe artifacts now live only on This lane's first control PR, #1525, was merged at Please do not prune this branch as a stale HandoverNo release was dispatched from this lane. Canary.5's blockers are both cleared — #1599 merged carrying Release ownership hands to ns006-fixes. |
Summary
Control PR for the narrow reopen of the 0.0.6 runtime / public-surface lane, covering three newly triaged public-runtime blockers. Carries orchestration evidence only — the run dir and nothing else. It is not an implementation umbrella and carries no closing keyword; each issue lands through its own leaf branch and PR against
main.The lane's first pass is closed and unchanged: #1405 →
8ff1bcb8f, #1398 →d7e2b67b2, control #1525 →0f0b6b6a3.Scope
.llm/runs/**)Grouping decision — three separate PRs
Instructed to group only if technically inseparable. Decided from located surfaces, not titles:
packages/fresh/src/runtime/ai/stream-proxy.tsDeferComponentnever hydratedpackages/fresh/src/application/defer/{DeferPage,DeferIsland}.tsx,policy.tspackages/plugin-streams-core/src/application/stream-url-resolver.tsNo file overlap. #1457 and #1459 both live in
packages/freshbut in unrelated subtrees (runtime/aivsapplication/defer), so they neither conflict nor share acceptance. #1548 is in a different package, andstream-url-resolver.tswas not touched by #1405 — no interaction with what this lane already landed.Nothing is technically inseparable, so they stay three independent PRs.
Slices
fe9bb409eValidation
Diff is
.llm/runs/**only — no publishable source, so no package gate applies to this PR. Gate evidence lands on the three implementation PRs.Harness
.llm/runs/release-0.0.6-features--orchestration/(extended below a# Reopendivider; the closed first pass is not rewritten).llm/harness/workflow/milestone-run.md; role skillagent-milestone-orchestratororigin/main@0f0b6b6a3openhands+status:plan-evallabel pair; initial IMPL-EVAL automatically on draft → ready; reruns only by moving away from and back to the relevantstatus:label. No manual OpenHands dispatch, no local evaluator.impl-eval:skipis deliberately not applied.Drift / Debt
Carried from the first pass, still in force: D-1 sub-agent lane override · D-2 evaluator transport · D-3 IMPL-EVAL waiver for the small deterministic class · D-4 automatic dispatcher · D-5 label-driven trigger contract.
Open follow-ups filed by this lane and not adopted here: #1542 (
quality:gateroot coverage), #1543 (undeclaredplugin-streams-coreimports).Definition of Done
mainthrough the pre-merge gate, acceptance truthfully ticked with linked evidencemainthrough the pre-merge gate, including the client-bundle regression test its acceptance requiresmainthrough the pre-merge gate, with the resolver decision recorded rather than left implicitcut-trace.mdextended with each merge captured fromgit log origin/mainafter the fact