Context
PR #17429 correctly removed the DevIndex source copy from Neo, but also removed the DevIndex rows from all four Portal example registries. Those registries are release-independent data: the hourly Data Sync Pipeline deletion-syncs apps/portal/resources/data/** into neomjs/pages, while runnable apps in that Pages tree move only with Neo releases.
The first post-removal Data Sync run, 32409481498, exhausted both stale-head attempts and never reached Pages. That failure temporarily preserved the old live registry. A new run started at 2026-08-20T20:34:55Z from broken head b75e5d00; without this repair, its first successful publication erases the flagship card.
Live V-B-A at filing/update time:
- all four DevIndex runtime URLs on the v13.1 Pages deployment return HTTP 200;
- all four DockDemo URLs return HTTP 404 because DockDemo exists on
dev but not in deployed Neo v13.1;
Portal.model.Example owns a Boolean hidden field and Portal.view.examples.List#isHiddenItem() removes hidden cards from the DOM;
- the live registry still contains DevIndex only because the prior Data Sync run was discarded;
- current
dev contains neither the DevIndex card nor a release-gated DockDemo card.
This successor also retains its original Approve+Follow-Up scope: repair the surviving blog link and verify the pipeline-owned SEO outputs after #17429.
The Problem
Two cadences were conflated:
- Portal example metadata deploys hourly from
dev.
- Runnable Neo apps deploy with releases.
A dev-only showcase placed visibly in the hourly registry becomes a broken live link until the next release. Removing an app's source ownership from Neo does not imply removing its live card while the deployed release still serves it—especially when the app is the flagship showcase and its source moved to neomjs/devindex.
The same removal left a retained blog link targeting a deleted guide and left generated SEO outputs waiting for the next successful owning pipeline run.
The Architectural Reality
- Four source registries own the Portal tabs:
examples_devmode.json, examples_dist_dev.json, examples_dist_esm.json, and examples_dist_prod.json.
- Array order is presentation rank. A hidden record can stay at index 0 without becoming the first rendered card.
.github/workflows/data-sync-pipeline.yml recursively replaces the Pages-side Portal data tree, so a missing row is a deployed deletion—not local metadata.
- The Pages step owns Neo-projected preview images; the legacy image collection itself remains Pages-owned.
- DevIndex source ownership is
neomjs/devindex; its v13.1 compatibility runtime remains at the existing four neomjs.com URLs.
- DockDemo source ownership remains Neo
dev, but its runtime is unavailable on Pages until v13.2.
llms.txt and sitemap.xml are pipeline-owned generated outputs and must never be hand-edited.
The Fix
- Restore DevIndex as the first visible card in all four registries.
- Keep the four currently-live v13.1 runtime URLs.
- Point the source link at
https://github.com/neomjs/devindex.
- Add DockDemo at array index 0 in all four registries with
hidden: true.
- Keep its environment-specific URLs ready for v13.2.
- Flip visibility only when the corresponding Pages release contains the app.
- Project a tracked docking preview through the existing Pages workflow so the future reveal has an owned asset.
- Pin registry parity, ordering, visibility, source ownership, and URLs in the existing Portal examples unit spec.
- Retarget the surviving blog link to the standalone guide.
- Observe a successful post-removal Data Sync publication and verify generated SEO no longer advertises deleted DevIndex routes.
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
| four Portal example registries |
Portal.model.Example + Portal.view.examples.List |
hidden DockDemo at index 0; visible DevIndex is first rendered flagship |
keep DockDemo hidden until v13.2 runtime exists |
this ticket |
registry unit matrix + live HTTP probes |
| DevIndex card |
neomjs/devindex source ownership + v13.1 Pages runtime |
external source link; current release URLs stay visible |
revalidate URL when v13.2 replaces the Pages release |
this ticket |
four runtime URLs return 200 |
| DockDemo card |
Neo apps/agentos/childapps/dockdemo + release boundary |
top-ranked metadata, hidden on v13.1 |
hidden: true |
this ticket |
four runtime URLs return 404 before v13.2 |
| DockDemo preview |
Data Sync Pages projection |
copy one tracked docking screenshot into the Pages example-image plane |
card remains hidden if projection fails |
workflow comments |
Pages commit contains dockDemo.png |
| retained blog TheGrid link |
neomjs/devindex/learn/frontend/TheGrid.md |
link to the standalone canonical guide |
surviving Neo DynamicGrids.md |
this ticket |
target resolves |
llms.txt / sitemap.xml |
learn/tree.json, Portal registrations, owning generator |
zero deleted DevIndex routes after successful pipeline |
pipeline remains red/open; never hand-edit |
this ticket |
exact generated commit has zero matches |
Decision Record impact
none — this repairs deployment metadata and makes an existing release boundary explicit.
Acceptance Criteria
Revalidation Trigger
The v13.2 Pages release reopens the DockDemo visibility and DevIndex runtime URL rows: unhide DockDemo only after all four release URLs return 200, and move DevIndex from the v13.1 compatibility URL to its standalone deployment before that release removes the old runtime.
Out of Scope
- Reverting the source removal in #17429.
- The DevIndex working-set round trip and frozen cursor — #17394.
- Repository history rewriting — #17376.
- Retiring
AGENTS_STARTUP.md.
- Hand-editing pipeline-owned SEO output.
Avoided Traps
- Delete registry rows with source files. Portal metadata and deployed runtime have different owners/cadences.
- Show DockDemo immediately. Dev carries it; Pages v13.1 does not.
- Hide DevIndex too. Its live runtime is healthy and it remains the flagship card.
- Copy only JSON, not the preview. A future unhide would ship a blank/broken image.
- Patch Pages directly. The next Data Sync deletion-sync would overwrite it.
Related
- #17429 — removal PR that exposed the cadence split
- #17421 — original removal ticket
- #17376 — history rewrite this removal unblocked
- #17394 — independent working-set defect
neomjs/devindex#4 — destination code/test custody
Origin Session ID: 0f8b5b8e-3f01-45c8-889e-1c2fd90b0584
Handoff Retrieval Hints
- Broken source head:
b75e5d005961e55de9e51809c22ab7ccb077ad99
- First stale run:
32409481498
- Search:
Portal example registry release cadence DockDemo hidden DevIndex flagship
Context
PR #17429 correctly removed the DevIndex source copy from Neo, but also removed the DevIndex rows from all four Portal example registries. Those registries are release-independent data: the hourly Data Sync Pipeline deletion-syncs
apps/portal/resources/data/**intoneomjs/pages, while runnable apps in that Pages tree move only with Neo releases.The first post-removal Data Sync run, 32409481498, exhausted both stale-head attempts and never reached Pages. That failure temporarily preserved the old live registry. A new run started at 2026-08-20T20:34:55Z from broken head
b75e5d00; without this repair, its first successful publication erases the flagship card.Live V-B-A at filing/update time:
devbut not in deployed Neo v13.1;Portal.model.Exampleowns a Booleanhiddenfield andPortal.view.examples.List#isHiddenItem()removes hidden cards from the DOM;devcontains neither the DevIndex card nor a release-gated DockDemo card.This successor also retains its original Approve+Follow-Up scope: repair the surviving blog link and verify the pipeline-owned SEO outputs after #17429.
The Problem
Two cadences were conflated:
dev.A dev-only showcase placed visibly in the hourly registry becomes a broken live link until the next release. Removing an app's source ownership from Neo does not imply removing its live card while the deployed release still serves it—especially when the app is the flagship showcase and its source moved to
neomjs/devindex.The same removal left a retained blog link targeting a deleted guide and left generated SEO outputs waiting for the next successful owning pipeline run.
The Architectural Reality
examples_devmode.json,examples_dist_dev.json,examples_dist_esm.json, andexamples_dist_prod.json..github/workflows/data-sync-pipeline.ymlrecursively replaces the Pages-side Portal data tree, so a missing row is a deployed deletion—not local metadata.neomjs/devindex; its v13.1 compatibility runtime remains at the existing fourneomjs.comURLs.dev, but its runtime is unavailable on Pages until v13.2.llms.txtandsitemap.xmlare pipeline-owned generated outputs and must never be hand-edited.The Fix
https://github.com/neomjs/devindex.hidden: true.Contract Ledger Matrix
Portal.model.Example+Portal.view.examples.Listneomjs/devindexsource ownership + v13.1 Pages runtimeapps/agentos/childapps/dockdemo+ release boundaryhidden: truedockDemo.pngneomjs/devindex/learn/frontend/TheGrid.mdDynamicGrids.mdllms.txt/sitemap.xmllearn/tree.json, Portal registrations, owning generatorDecision Record impact
none— this repairs deployment metadata and makes an existing release boundary explicit.Acceptance Criteria
hidden: true, environment-correct URLs, and stable id 28.neomjs/devindexand environment-correct v13.1 URLs.dockDemo.pngfrom a tracked source and admits the asset in its change/stage set.TheGrid.md.llms.txt/sitemap.xml.Revalidation Trigger
The v13.2 Pages release reopens the DockDemo visibility and DevIndex runtime URL rows: unhide DockDemo only after all four release URLs return 200, and move DevIndex from the v13.1 compatibility URL to its standalone deployment before that release removes the old runtime.
Out of Scope
AGENTS_STARTUP.md.Avoided Traps
Related
neomjs/devindex#4— destination code/test custodyOrigin Session ID: 0f8b5b8e-3f01-45c8-889e-1c2fd90b0584
Handoff Retrieval Hints
b75e5d005961e55de9e51809c22ab7ccb077ad9932409481498Portal example registry release cadence DockDemo hidden DevIndex flagship