Repository navigation
feat(deploy): #431 sectioned train renderer with attributed warnings - #440
Merged
Merged
Conversation
Sectioned output through a presentation seam: DeployTrainRenderService (mirroring WorkspaceBuildRenderService) implemented by cli/render/deploy-train.ts — Build / Upload / Publish sections in deterministic target order; the train reports, the renderer shows, and parallel upload units can no longer interleave their lines. Attributed warnings: WorkspaceDeployResult gains the warnings field the CLI was already rendering (dead plumbing wired — the schema had no field, nothing set it). buildOneWorkspace buffers child stderr, extracts warning segments (WARNING/⚠ lines through the next blank line; "$ " command echoes never count), and attributes them to the workspace; raw stderr streams only under --verbose. One line per workspace upload by default: the ✓ row carries the aligned 28-char name column, bundle base, upload/skip counts, and duration; detail lines (manifest-diff skips, the version-manifest pin row — which padded an EMPTY name before, source archive) print only under --verbose. uploadWorkspaceBundle is silent — it returns structured detail (base/manifest/notes) and the renderer decides; the train attaches it to the #430 upload outcomes. Output snapshot tests (chalk.level 0): column alignment, default vs verbose, the publish section (registry URL, fingerprint, slot pins, audit manifest), warnings attribution, and the silence of the leg. 1,624 tests green across workspaces (140 host + 1,293 everything-dev + 191 auth); lint 0 errors; typecheck at the 2 known baselines; build train green.
…gs rows extractBuildWarnings reads the onChunk buffer only — the template also concatenated proc.stderr (the same captured bytes), rendering every warning twice. The unit test feeds chunks through onChunk, matching the real stream. renderBuildWarnings prints one attributed sub-block per workspace (name-padded rows; multi-line segments indent continuations under the same column), replacing cli.ts's unattributed flatMap block; snapshot-pinned. upload-leg drops dead defensiveness; the changeset now describes the version-manifest row accurately (attributed by nesting under the workspace's named line) and scopes Image+Railway to the existing leg rows.
|
🚅 Deployed to the everything-dev-pr-440 environment in heartfelt-ambition
8 services not affected by this PR
|
elliotBraem
added this pull request to stack #442
October 16, 2026 18:34
Sectioned output through a presentation seam: DeployTrainRenderService (mirroring WorkspaceBuildRenderService) implemented by cli/render/deploy-train.ts — Build / Upload / Publish sections in deterministic target order; the train reports, the renderer shows, and parallel upload units can no longer interleave their lines. Attributed warnings: WorkspaceDeployResult gains the warnings field the CLI was already rendering (dead plumbing wired — the schema had no field, nothing set it). buildOneWorkspace buffers child stderr, extracts warning segments (WARNING/⚠ lines through the next blank line; "$ " command echoes never count), and attributes them to the workspace; raw stderr streams only under --verbose. One line per workspace upload by default: the ✓ row carries the aligned 28-char name column, bundle base, upload/skip counts, and duration; detail lines (manifest-diff skips, the version-manifest pin row — which padded an EMPTY name before, source archive) print only under --verbose. uploadWorkspaceBundle is silent — it returns structured detail (base/manifest/notes) and the renderer decides; the train attaches it to the #430 upload outcomes. Output snapshot tests (chalk.level 0): column alignment, default vs verbose, the publish section (registry URL, fingerprint, slot pins, audit manifest), warnings attribution, and the silence of the leg. 1,624 tests green across workspaces (140 host + 1,293 everything-dev + 191 auth); lint 0 errors; typecheck at the 2 known baselines; build train green.
…gs rows extractBuildWarnings reads the onChunk buffer only — the template also concatenated proc.stderr (the same captured bytes), rendering every warning twice. The unit test feeds chunks through onChunk, matching the real stream. renderBuildWarnings prints one attributed sub-block per workspace (name-padded rows; multi-line segments indent continuations under the same column), replacing cli.ts's unattributed flatMap block; snapshot-pinned. upload-leg drops dead defensiveness; the changeset now describes the version-manifest row accurately (attributed by nesting under the workspace's named line) and scopes Image+Railway to the existing leg rows.
railway-app
Bot
temporarily deployed
to
heartfelt-ambition / everything-dev-pr-440
October 16, 2026 19:50
Destroyed
railway-app
Bot
temporarily deployed
to
heartfelt-ambition / everything-dev-pr-440
October 16, 2026 20:44
Destroyed
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #431
Stacked on #439 (base
fix/runtime-diagnostics), which is stacked on #438 (feat/cli-split) — the full restructure chain: #432 → #433 → #434 → #435 → #436 → #437 → #438 → #439 → this. No file overlap with #439.What
The deferred output bucket (ADR 0031's last piece: presentation lives in
cli/render/, services never print):DeployTrainRenderService(theWorkspaceBuildRenderServiceexemplar) implemented bycli/render/deploy-train.ts: Build / Upload / Publish sections in deterministic target order. Parallel upload units (Deploy speed: parallel uploads, content-hash rebuild oracle, network dedupe #430) can no longer interleave their lines.WorkspaceDeployResultgains thewarningsfield the CLI was already rendering (dead plumbing wired: the schema had no field, nothing set it). Build stderr is buffered per workspace, warning segments extracted (WARNING/⚠lines through the next blank line;$command echoes never count), rendered as name-padded per-workspace rows in the Build section. Raw stderr streams only under--verbose.--verbose, indented under the workspace's named line — the version-manifest row no longer pads an EMPTY name and scatters into other workspaces' output.uploadWorkspaceBundlereturns structured detail (base/manifestFile/notes); the renderer decides how it shows.chalk.level = 0): column alignment, default-vs-verbose, the publish section, warnings attribution, and the leg's silence.Verification
test:structure11onChunk, matching the real stream), snapshot diffs reviewed