Released: 2026-05-18
A patch on the Ionic line that fixes two regressions shipped in earlier 3.0.x releases — the multi-architect dashboard pane collapsing to ~1/4 height (introduced in 3.0.6), and the Gitea/Forgejo forge crashing Tower overview (since 3.0.3).
PR #762 in v3.0.6 introduced .architect-pane / .architect-pane-body wrappers in the multi-architect (N>1) left-pane render path, but never added matching CSS. The wrappers collapsed to intrinsic height, shrinking the architect terminal to roughly 1/4 of the SplitPane left side.
The fix uses position: absolute; inset: 0 on .architect-pane so it fills the relatively-positioned parent regardless of the parent's height computation. Solo-architect workspaces (N=1) use a different render path that was never broken.
A Playwright regression test now pins the invariant: in an N=2 workspace, .architect-pane height must match .split-left within 2px, and .architect-pane-body must reach the bottom of the SplitPane left side. The test was written to fail against the v3.0.6 state and pass against the v3.0.7 fix.
Gotcha worth knowing: by default Playwright tests hit localhost:4100, which serves the globally-installed dashboard, not the worktree's built bundle. Setting TOWER_TEST_PORT=<unused-port> spawns a fresh Tower from the worktree — that's what you need for actual change verification. The architect-pane-layout test enforces this implicitly; future dashboard tests should follow the same pattern.
External adopter Chris Dodge (@pseudoseed) reported two coupled regressions running Codev against a Forgejo instance:
Forgejo/Gitea returns labels: "" or null for unlabeled issues, where GitHub always returns []. parseLabelDefaults() in lib/github.ts called .map() unconditionally and crashed.
Fix: coerce non-array inputs to [] before mapping (Array.isArray(labels) ? labels.map(...) : []), widen the parameter type to reflect the cross-forge runtime shape, add 4 regression tests covering empty-string / null / undefined / array paths.
Once the 500 was patched, Tower overview displayed #undefined for every issue number and NaNd for every age — the Gitea preset scripts piped raw tea --output json straight through, but tea's field names don't match the GitHub-compatible shape Tower expects.
Fix: each of the four affected forge scripts (issue-list.sh, pr-list.sh, recently-closed.sh, recently-merged.sh under scripts/forge/gitea/) now requests an explicit --fields list and normalizes via jq:
tea returns |
Tower expects |
|---|---|
index (string) |
number (int) |
created |
createdAt |
author (flat string) |
author.login |
labels (CSV or "") |
labels[].name |
assignees (CSV or "") |
assignees[].login |
description |
body |
recently-closed.sh maps updated → closedAt; recently-merged.sh filters select(.merged == true) and maps updated → mergedAt. jq was already a runtime dep of the Gitea preset (pr-exists.sh, user-identity.sh).
Verified end-to-end on the reporter's Forgejo instance. Acknowledged test debt: no committed fixture-based test for the jq filters; CMAP-Codex flagged this as a REQUEST_CHANGES, accepted as cost-benefit (4 unit tests cover the upstream TypeScript path, reporter verified runtime, fixture tests would add ~30 min for limited value).
None.
npm install -g @cluesmith/codev@3.0.7
afx tower stop && afx tower startIf you're running v3.0.6 with multiple architects, this release fixes the broken dashboard layout. If you're running Codev against a Forgejo / Gitea instance, this release fixes the Tower overview crash and the #undefined / NaNd rendering.
- Chris Dodge (@pseudoseed) — reported #749 and #750 with verbatim suggested fix shapes; verified end-to-end against Forgejo.
- External Codev consumer (Shannon multi-architect testing) — surfaced the architect-pane layout regression.
- M Waleed Kadous (@waleedkadous) — architect review, release coordination.
- Builders working under BUGFIX protocol.