Add target-realm index page for the software factory#5342
Conversation
Preview deploymentsHost Test Results 1 files ±0 1 suites ±0 2h 29m 6s ⏱️ + 1m 48s Results for commit 80c9bda. ± Comparison against earlier commit 8528ecb. Realm Server Test Results 1 files ±0 1 suites ±0 8m 22s ⏱️ -49s Results for commit 80c9bda. ± Comparison against earlier commit 8528ecb. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: dcaa6b601a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
With integrated issue-tracker and dashboard add try/catch for test artifact setup failure add a bounded retry-on-empty search, enabled only on the last-chance backstop refactor
There was a problem hiding this comment.
Pull request overview
This PR upgrades the “freshly created target realm” experience in software-factory by writing a RealmDashboard-backed index.json (with Overview/Board/Artifacts tabs) and wiring the bootstrap-created IssueTracker board + Project back into the realm index/seed issue as soon as bootstrap completes (with a post-loop backstop).
Changes:
- Add new realm dashboard cards/components (
realm-dashboard.gts,overview.gts,empty-state.gts) plus an acceptance test for the dashboard. - Add post-bootstrap “linking” helpers + shared retry/search/link utilities (
factory-realm-index.ts,factory-seed.ts,realm-operations.ts) and thread a newonBootstrapCompletehook through the issue loop and factory entrypoint. - Update
TabbedHeadersoheaderTitleis optional and refresh its CSS variable surface + usage docs.
Reviewed changes
Copilot reviewed 20 out of 20 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/software-factory/tests/issue-loop.test.ts | Adds tests validating onBootstrapComplete behavior (fires once, no-op for non-bootstrap, swallowed errors). |
| packages/software-factory/tests/index.ts | Registers new software-factory unit tests in the test bundle. |
| packages/software-factory/tests/factory-seed.test.ts | Adds coverage for linkProjectToSeedIssue patching/idempotency/no-op behavior. |
| packages/software-factory/tests/factory-realm-index.test.ts | Adds coverage for realm index writing + board-linking (including retry polling). |
| packages/software-factory/tests/factory-entrypoint.test.ts | Adds entrypoint tests for writing the dashboard index, linking board/project, hook timing, and createdRealm gating. |
| packages/software-factory/src/realm-operations.ts | Introduces shared searchUntilNonEmpty, inferIssueTrackerModuleUrl, and linkRelationshipToCard utilities. |
| packages/software-factory/src/issue-scheduler.ts | Refactors issue-tracker module URL inference to use the shared helper. |
| packages/software-factory/src/issue-loop.ts | Adds onBootstrapComplete hook invoked after the bootstrap issue cycle. |
| packages/software-factory/src/factory-seed.ts | Adds linkProjectToSeedIssue to patch the bootstrap seed issue’s project relationship after bootstrap. |
| packages/software-factory/src/factory-realm-index.ts | New module to write index.json as RealmDashboard and later link its board relationship. |
| packages/software-factory/src/factory-issue-loop-wiring.ts | Threads onBootstrapComplete through the factory loop wiring. |
| packages/software-factory/src/factory-entrypoint.ts | Writes the dashboard index for created realms and wires bootstrap artifacts via hook + post-loop backstop. |
| packages/software-factory/realm/realm-dashboard.test.gts | Acceptance test suite covering the dashboard’s Overview/Board/Artifacts behavior and empty states. |
| packages/software-factory/realm/realm-dashboard.gts | Defines the RealmDashboard card (tabs + computed link projections for Overview widgets). |
| packages/software-factory/realm/overview.gts | Implements the Overview tab UI: KPIs, funnels, setup roadmap, knowledge + validation search panels. |
| packages/software-factory/realm/empty-state.gts | Shared empty-state “hero” component used by dashboard panels. |
| packages/software-factory/README.md | Updates docs to describe the new index dashboard and artifact layout. |
| packages/software-factory/docs/architecture.md | Updates the architecture sequence diagram to include dashboard writing and post-bootstrap linking. |
| packages/boxel-ui/addon/src/components/tabbed-header/usage.gts | Updates usage docs and adds CSS-variable controls for new title overrides + optional title behavior. |
| packages/boxel-ui/addon/src/components/tabbed-header/index.gts | Makes headerTitle optional; renames CSS vars and adjusts header/tab styling. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| // drains, which a stalled or interrupted implementation issue may never | ||
| // reach. There is only ever one bootstrap issue, so this fires at most | ||
| // once. The link is best-effort and must not abort the loop. | ||
| if (onBootstrapComplete && issue.issueType === 'bootstrap') { |
| Args: { | ||
| model: PartialBaseInstanceType<typeof RealmDashboard>; | ||
| fields: FieldsTypeFor<RealmDashboard>; | ||
| context?: CardContext; |
| border-bottom: 4px solid transparent; | ||
| transition: | ||
| border-bottom-color 0.3s ease-in-out, | ||
| font-weight 0.3s ease-in-out; | ||
| } |
Summary
A freshly-created target realm now gets a
RealmDashboardindex page instead of a bareCardsGrid. The dashboard has three tabs:IssueTrackerCardsGridof everything the factory createdPre-existing realms are untouched; only realms the factory just created get the
dashboard.
What's included
New index page
realm/realm-dashboard.gts— the index card for the freshly created realm. Composed of the tabbed header, the embeddedIssueTrackerboard, and the overview dashboard.realm/overview.gts— the dashboard component: KPIs, status/priority/type funnels,roadmap, validation runs, and a knowledge-base section.
realm/empty-state.gts— shared empty-state component for the dashboardsections.
Factory wiring (links the page on bootstrap)
src/factory-realm-index.ts—linkBoardToRealmIndex: links the realm'sIssueTrackerboard into the index card.src/factory-seed.ts—linkProjectToSeedIssue: links the seed issue to itsProject.src/factory-entrypoint.ts—wireBootstrapArtifactsruns both links (and aone-shot workspace sync) via a new
onBootstrapCompletehook that fires themoment the bootstrap issue finishes.
Both paths are gated on
createdRealmand are best-effort: a wiring failureis logged, never fatal to the run.
src/issue-loop.ts,src/factory-issue-loop-wiring.ts— thread the optionalonBootstrapCompletehook through the loop.boxel-ui —
tabbed-headerheaderTitleis now optional; the title group renders only when a title ispassed.
--boxel-header-*namespace, with new--boxel-header-title-*override custom properties for consumers.Tests
factory-entrypoint.test.ts,factory-realm-index.test.ts,factory-seed.test.ts,issue-loop.test.ts,realm-dashboard.test.gtscover the new wiring and the index card.
Screenshots:
1- Running the


factory:gowithout a pre-existing realm, this is what you first see.2- Tickets in progress:


3- Run complete:
