---
id: 12217
title: Refactor tickets index emitter → chunked-by-folder + path de-duplication
state: CLOSED
labels:
  - enhancement
  - ai
  - performance
  - build
assignees:
  - neo-gpt
createdAt: '2026-05-30T17:27:07Z'
updatedAt: '2026-05-31T20:51:18Z'
githubUrl: 'https://github.com/neomjs/neo/issues/12217'
author: neo-opus-ada
commentsCount: 0
parentIssue: 12204
subIssues: []
subIssuesCompleted: 0
subIssuesTotal: 0
blockedBy: []
blocking:
  - '[x] 12220 Correct tickets.mjs module JSDoc to the chunked-index reality'
  - '[x] 12218 Opt-in load-on-folder-expand for the shared portal TreeList'
closedAt: '2026-05-31T20:51:18Z'
---
# Refactor tickets index emitter → chunked-by-folder + path de-duplication

## Context
Part of epic #12207 (Track B; realizes **#11372 Phase 2**). `apps/portal/resources/data/tickets.json` is ~1.5 MB / ~8,772 rows eager-loaded (`autoLoad:true`); measured `path` = 34 % of the file and is redundant (duplicates `id` + version). No body is inlined (already lazy).

## The Fix
Change `buildScripts/docs/index/tickets.mjs` to emit (i) a small ROOT group-index and (ii) one per-chunk leaf file under `apps/portal/resources/data/tickets/<chunk>.json`, mirroring the on-disk `chunk-N/` folders — **the chunk IS the lazy unit**. De-duplicate `path` (drop + reconstruct from parentId+id+chunk, or shared-prefix+tail). Add a crawler manifest so SEO ingestion still discovers all groups. Use the **same chunked shape** as the pulls/discussions generators (sub 6) — decide it once. Fold the JSDoc correction (sub 15) in here.

## Acceptance Criteria
- [ ] tickets index emitted as root group-index + per-chunk leaf files; `path` de-duplicated; crawler manifest added.
- [ ] Leaf shape identical to pulls/discussions output.

## Related
Epic #12207; #11372 Phase 2. Unblocks the lazy folder-load (sub 13). Subsumes sub 15.

## Timeline

- 2026-05-30T17:27:09Z @neo-opus-ada added the `enhancement` label
- 2026-05-30T17:27:09Z @neo-opus-ada added the `ai` label
- 2026-05-30T17:27:09Z @neo-opus-ada added the `performance` label
- 2026-05-30T17:27:09Z @neo-opus-ada added the `build` label
- 2026-05-30T17:30:22Z @neo-opus-ada added parent issue #12207
- 2026-05-30T17:35:04Z @neo-opus-ada removed parent issue #12207
- 2026-05-30T17:35:05Z @neo-opus-ada added parent issue #12204
- 2026-05-30T17:35:59Z @neo-opus-ada marked this issue as blocking #12218
- 2026-05-30T17:36:48Z @neo-opus-ada cross-referenced by #11372
- 2026-05-31T18:26:42Z @neo-gpt cross-referenced by #12265
- 2026-05-31T18:28:40Z @neo-gpt cross-referenced by #12204
- 2026-05-31T19:16:12Z @neo-gpt cross-referenced by #12220
- 2026-05-31T19:20:04Z @neo-gpt marked this issue as blocking #12220
- 2026-05-31T19:41:23Z @neo-gpt assigned to @neo-gpt
- 2026-05-31T19:52:07Z @neo-gpt cross-referenced by PR #12271
- 2026-05-31T20:51:19Z @tobiu closed this issue
- 2026-05-31T20:51:19Z @tobiu referenced in commit `3315515` - "feat(portal): emit chunked ticket indexes (#12217) (#12271)

Co-authored-by: tobiu <tobiasuhlig78@gmail.com>"
- 2026-05-31T22:32:13Z @neo-gpt cross-referenced by PR #12279
- 2026-06-01T07:30:40Z @neo-opus-ada cross-referenced by #12219
- 2026-06-01T12:57:14Z @neo-gpt cross-referenced by #12304

