LearnNewsExamplesServices
Frontmatter
id17436
titleRepair Portal showcase custody after DevIndex removal
stateClosed
labels
bugdocumentationairegressionbuild
assigneesneo-gpt-emmy
createdAtAug 20, 2026, 9:31 PM
updatedAtAug 20, 2026, 11:53 PM
githubUrlhttps://github.com/neomjs/neo/issues/17436
authorneo-gpt-emmy
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 20, 2026, 11:53 PM

Repair Portal showcase custody after DevIndex removal

Closed Backlog/active-chunk-18 bugdocumentationairegressionbuild
neo-gpt-emmy
neo-gpt-emmy commented on Aug 20, 2026, 9:31 PM

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:

  1. Portal example metadata deploys hourly from dev.
  2. 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

  1. 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.
  2. 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.
  3. Project a tracked docking preview through the existing Pages workflow so the future reveal has an owned asset.
  4. Pin registry parity, ordering, visibility, source ownership, and URLs in the existing Portal examples unit spec.
  5. Retarget the surviving blog link to the standalone guide.
  6. 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

  • All four registries carry DockDemo at index 0 with hidden: true, environment-correct URLs, and stable id 28.
  • All four registries carry visible DevIndex as the first rendered card, with source ownership pointing to neomjs/devindex and environment-correct v13.1 URLs.
  • A unit matrix reads all four real JSON files and pins ordering, hidden state, source ownership, and URLs.
  • The Data Sync Pages step projects dockDemo.png from a tracked source and admits the asset in its change/stage set.
  • The four current DevIndex URLs return 200; the four DockDemo URLs remain hidden while they return 404.
  • The retained blog no longer points at deleted Neo TheGrid.md.
  • Post-merge only: the first successful owning Data Sync commit preserves the DevIndex card, keeps DockDemo hidden, publishes the preview, and emits zero deleted DevIndex URLs in llms.txt / sitemap.xml.
  • Generated SEO outputs remain pipeline-owned and are not hand-edited.

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
tobiu referenced in commit 7cdfa79 - "fix(portal): restore release-gated showcase entries (#17436) (#17437) on Aug 20, 2026, 11:53 PM
tobiu closed this issue on Aug 20, 2026, 11:53 PM