Skip to content

data: Ornn roadmap — full milestone refactor + auto-sync (region-map 1:1 GitHub milestones)#6

Merged
chronoai-shining merged 5 commits into
mainfrom
claude/sad-colden-701d52
May 18, 2026
Merged

data: Ornn roadmap — full milestone refactor + auto-sync (region-map 1:1 GitHub milestones)#6
chronoai-shining merged 5 commits into
mainfrom
claude/sad-colden-701d52

Conversation

@chronoai-shining

@chronoai-shining chronoai-shining commented May 18, 2026

Copy link
Copy Markdown
Contributor

Summary

End-to-end refactor of the Ornn roadmap. Three layers changed:

  1. GitHub — Deleted 13 old milestones (open + closed). Created 9 clean Ornn milestones (M0–M8) and 3 ornn-marketing milestones (L0/L1/L2). Re-bucketed all 283 Ornn issues + created 25 marketing issues from marketing.md.
  2. regions.json — Replaced 15 product regions with 12 milestone-mirror regions (1:1 with GitHub).
  3. Auto-sync — New script + GitHub Action that keeps each region's desc populated with its milestone's live issue list. Hourly cron + manual trigger.

⚠️ The GitHub state changes (deletes + creates + re-bucketing) are already applied. Snapshot of the pre-refactor state lives at _archive/ornn_milestone_snapshot_2026-05-18.json for audit.

New roadmap shape

# Milestone State Issues Region
M0 Engineering Foundation & Infra closed 33 Ornn-M0-Engineering-Foundation
M1 Skill Lifecycle Core closed 36 (7 open bugs) Ornn-M1-Skill-Lifecycle-Core
M2 Build Experience closed 10 Ornn-M2-Build-Experience
M3 Trust & Quality open 36 (3 open) Ornn-M3-Trust-Quality
M4 Go Live Prep closed 112 (6 open bugs) Ornn-M4-Go-Live-Prep
M5 QA Pre-Launch Gate open 13 Ornn-M5-QA-Pre-Launch
M6 Code Review Hardening open 38 Ornn-M6-Code-Review-Hardening
M7 Platform Power open 3 Ornn-M7-Platform-Power
M8 Community Engagement open 2 historical Ornn-M8-Community-Engagement
L0 Pre-flight & Warmup open 9 Ornn-Marketing-L0-Prelaunch-Warmup
L1 D-Day Launch open 10 Ornn-Marketing-L1-Launch
L2 Post-Launch Followup open 6 Ornn-Marketing-L2-Postlaunch

Dependency graph

M0 ── M1 ─┬─ M2
          ├─ M3 ─┐
          │     │
          └─────┴─ M4 ─┬─ M5 ──┐
                      │       ├─ M7
                      └─ M6 ──┘
                      │
                      └─ L0 ─ L1 ─┬─ M8
                                  └─ L2

Auto-sync mechanism (step 5 of the brief)

Each region with a milestone_ref field:

"milestone_ref": {
  "repo": "ChronoAIProject/Ornn",
  "milestone": "M5 — QA Pre-Launch Gate"
}

has an AUTO_GH_ISSUES marker block in both desc.en and desc.zh:

<!-- AUTO_GH_ISSUES:START -->
**GitHub issues** — [M5 — QA Pre-Launch Gate](url) · 13 open / 0 closed
_Open:_
- [#546](url) [QA] 安全、权限与敏感信息处理测试
- [#545](url) [QA] CLI、Agent 与 NyxID proxy 功能测试
- ...
<!-- AUTO_GH_ISSUES:END -->

The sync script regenerates the block between markers; manual text outside the markers is preserved.

Triggers (.github/workflows/sync-milestone-issues.yml):

  • Hourly cron at :05 — auto-commits and pushes if anything changed
  • Manualworkflow_dispatch button on Actions tab

Required secrets (only one):

  • CROSS_REPO_PAT — PAT with repo scope. Needed because Ornn-Marketing is a private repo and the default GITHUB_TOKEN is scoped only to this repo (and can read public repos like Ornn unauthenticated). Without this secret, sync of the 3 marketing regions logs a WARN and the other 9 still update.

File changes

  • regions.json — 15 old Ornn regions out, 12 new milestone-mirror regions in
  • .github/workflows/sync-milestone-issues.yml — new
  • tools/sync_milestone_issues.py — new, marker-block replacement strategy
  • _archive/*.json — snapshots of pre-refactor state + categorization rationale (audit trail)

Validation

  • python3 tools/validate_regions.pyOK: regions.json valid (57 regions)
  • python3 -m unittest discover tools/12 tests OK
  • python3 tools/sync_milestone_issues.py → all 12 regions synced, no-op on re-run

Manual followups

  • Add CROSS_REPO_PAT secret on this repo to enable Ornn-Marketing sync in CI (optional — public Ornn regions sync without it)
  • Run quarto preview to eyeball the new 12-node Ornn layout

🤖 Generated with Claude Code

chronoai-shining and others added 2 commits May 18, 2026 14:20
…iew / Launch)

Surface the launch-gate and post-launch buckets that were missing from the
Ornn track. Net change: 4 new regions, 1 dep update.

- Ornn-QA-PreLaunch (obligation, focus) — #534 umbrella + 12 module trackers
  (#535-#546). SOP-style "上线准出 checklist". Parallel to Code-Review-Hardening,
  not part of it (functional UI tests vs code-level audit findings).

- Ornn-Code-Review-Hardening (obligation, focus) — 36 findings from the W19
  automated code review, split across 5 sub-milestones (Security #438-#442,
  Vulnerability #443-#447, Coding Standards #448-#454, Industry Standards
  #456-#465, OSS Readiness #466-#474). Launch gate, parallel to QA.

- Ornn-Launch-Marketing (seed, focus) — 10-channel pre-launch playbook in
  the private ChronoAIProject/Ornn-Marketing repo (created 2026-05-15).
  Currently pre-launch with 0 posts; blocked on account warmup + ≥50 stars
  + QA/Code-Review green.

- Ornn-Community-Engagement (seed) — post-launch social layer: ratings,
  reviews, likes, per-skill discussion. Replaces the abandoned M5 marketplace
  direction (billing/revenue-share). Concept seed in #3; GitHub Discussions
  already enabled at repo level (#377). Depends on Launch-Marketing so the
  graph correctly shows it as a post-launch direction.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Complete restructuring driven by user instruction: delete all 13 existing
Ornn milestones, re-bucket every issue (open + closed) into a fresh
9-milestone Ornn taxonomy, create 3 marketing milestones + 25 issues in
ornn-marketing, refactor regions.json to 1 region per milestone, and add
an auto-sync workflow that keeps each region's desc populated with its
milestone's live GitHub issues.

## GitHub state changes (already applied, not undoable from this PR)

ChronoAIProject/Ornn:
- Deleted 13 milestones (Refactor / M1-M5 / Go Live Prep / i18n Coverage /
  Review · {Security, Vulnerability, Coding Standards, Industry Standards,
  OSS Readiness}). Snapshot saved at _archive/ornn_milestone_snapshot_2026-05-18.json.
- Created 9 new milestones with descriptions + objectives:
  - M0 Engineering Foundation & Infra (closed, 33 issues)
  - M1 Skill Lifecycle Core (closed, 36 issues)
  - M2 Build Experience (closed, 10 issues)
  - M3 Trust & Quality (open, 36 issues, 3 still open)
  - M4 Go Live Prep (closed, 112 issues, 6 still open)
  - M5 QA Pre-Launch Gate (open, 13 issues)
  - M6 Code Review Hardening (open, 38 issues)
  - M7 Platform Power (open, 3 issues)
  - M8 Community Engagement (open, 2 historical)
- Re-bucketed all 283 issues. Categorization rationale persisted at
  _archive/categorization.json.

ChronoAIProject/Ornn-Marketing:
- Created 3 milestones (L0 Pre-flight & Warmup / L1 D-Day Launch / L2
  Post-Launch Followup) with objectives.
- Created 25 issues per marketing.md sections §0.5–§10 (account audits,
  warmup, prep, copy drafts, launch executions, post-launch followups).

## regions.json refactor

Replaced 15 Ornn product regions with 12 milestone-mirror regions:
- Ornn-M0-Engineering-Foundation through Ornn-M8-Community-Engagement
- Ornn-Marketing-L0/L1/L2

Each carries a new `milestone_ref` field linking it to a real GitHub
milestone, plus an AUTO_GH_ISSUES marker block in both desc.en and
desc.zh that the sync script fills in.

NyxID-Skill-Install-CLI's dep updated:
  Ornn-Skill-Lifecycle-Core → Ornn-M1-Skill-Lifecycle-Core

## Auto-sync mechanism

tools/sync_milestone_issues.py — pulls every region's milestone_ref,
fetches open+closed issues from that milestone, replaces the
AUTO_GH_ISSUES block in desc.{en,zh}. Updates issue_count to match.

.github/workflows/sync-milestone-issues.yml — runs hourly + on
workflow_dispatch + on repository_dispatch event-type milestone-issues-sync.
Cross-repo / private-repo access via CROSS_REPO_PAT secret (fallback
to default GITHUB_TOKEN for public repos only).

tools/upstream-trigger-sample.yml — sample workflow to drop into Ornn /
Ornn-Marketing repos. Fires repository_dispatch on every issue/milestone
event so region-map updates near-real-time instead of waiting for hourly
cron. Requires REGION_MAP_DISPATCH_PAT secret in the upstream repo.

## Validation

- python3 tools/validate_regions.py → OK: regions.json valid (57 regions)
- python3 -m unittest discover tools/ → 12 tests OK
- python3 tools/sync_milestone_issues.py → 12 regions synced, all match

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@chronoai-shining chronoai-shining changed the title data: Ornn roadmap — add 4 missing regions (QA / Community / Code-Review / Launch) data: Ornn roadmap — full milestone refactor + auto-sync (region-map 1:1 GitHub milestones) May 18, 2026
chronoai-shining and others added 2 commits May 18, 2026 15:01
Owner doesn't need near-real-time updates; hourly latency is fine.

- Remove tools/upstream-trigger-sample.yml (the sample workflow that
  would have lived in upstream Ornn / Ornn-Marketing repos)
- Remove repository_dispatch trigger from sync-milestone-issues.yml
  (it would have received those upstream events)

Sync now runs on: hourly cron (:05) + workflow_dispatch only.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Each Ornn milestone region becomes a cytoscape compound parent containing
its OPEN issues as child nodes. Issue→issue dependencies extracted from
issue body (Depends/Blocks/Tracks/checklist items) become edges within /
across the milestone bubbles. Only regions with milestone_ref (Ornn) get
this treatment — other products' regions render unchanged.

## Sync script (tools/sync_milestone_issues.py)

Extract dependencies from issue body via regex:
  - "Depends on #N"   / "Depends-on: #N"   → blocked_by[N]
  - "Blocks #N"       / "Blocks: #N"       → blocks[N]
  - "Tracks #N"       / "Tracks: #N"       → tracks[N]
  - "Tracked by #N"   / "Tracked-by: #N"   → tracked_by[N]
  - Checklist items "- [ ] #N" / "- [x] #N" → tracks[N]

Write a new artifact ornn-issues.json (alongside regions.json) with the
per-region structured issue map + extracted deps. 308 issues across
12 regions; 20 carry at least one extracted dep, 35 tracks edges
(mostly umbrella → checklist children like #534 → #535–#546), 18
blocked_by, 3 blocks.

regions.json AUTO_GH_ISSUES side-panel rendering is unchanged.

## Viz (visualization.qmd)

- New script tag: cytoscape-expand-collapse@4.1.1
- loadData() also fetches ornn-issues.json (tolerates absence)
- buildCytoscapeElements():
  - Each region still emits its node + milestone-level dep edges
  - If the region has issues, every OPEN issue emits a child node with
    parent: <region_id> (makes the region a compound parent in cytoscape)
  - Issue→issue edges added for deps where both endpoints are OPEN
- Style additions:
  - node[?is_issue]: small blue ellipse, label "#N"
  - node:parent: dashed outline + low-opacity tinted fill when expanded
  - edge[edge_type='blocks']: red solid arrow
  - edge[edge_type='tracks']: dashed grey tee arrow
- renderCy() inits expand-collapse, immediately collapses every compound
  so the default view matches the old milestone-only layout
- Click handler: issue nodes route to showIssueDetail (new), region
  nodes still route to showNodeDetail
- showIssueDetail(): renders issue title + state badge + labels + deps +
  "Open on GitHub" link. Dep numbers are clickable → jumpToIssue() which
  expands the parent (if needed) and centers on the target issue
- highlightSubgraph(): updated isKept() helper so issue children of a
  highlighted region don't fade

## Workflow

sync-milestone-issues.yml also stages ornn-issues.json on commit.

## What I couldn't test locally

quarto isn't installed in this sandbox. JS structure validates
(stack-based brace check is balanced). publish.yml will auto-deploy
on push, so the live preview can be eyeballed at
chronoaiproject.github.io/region-map/visualization.html within ~1 min.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… grid layout + clean detail panel

Smoke-tested locally with quarto preview. Four bugs found + fixed:

1. **cytoscape({elements: {nodes,edges}}) silently dropped compound children.**
   Cytoscape's object-form elements drops nodes whose `parent` references
   another node in the same call. Switched to flat array form
   `[...nodes, ...edges]` — all 153 elements (57 region + 96 issue children)
   now register, 10 compounds correctly identified.

2. **Detail panel rendered AUTO_GH_ISSUES markdown as escaped raw text.**
   showNodeDetail used escapeHtml on the full desc, so the marker block
   `<!-- AUTO_GH_ISSUES:START --> … <!-- AUTO_GH_ISSUES:END -->` along
   with raw markdown links rendered as plain visible text. Fix: strip the
   marker block from rendered desc and synthesize a proper HTML issues
   section directly from ORNN_ISSUES — collapsible <details> for Open
   (default open) and Closed (default closed), clickable issue links via
   jumpToIssue().

3. **dagre laid issue children in a single vertical column.**
   With all 153 elements visible at layout time, dagre treated each issue
   as a rank, producing a 3500px-tall stack per compound. Fix: change
   initial layout to `preset` (no layout), collapse all compounds first,
   THEN run dagre — it now only sees the 57 outer nodes and produces a
   clean LR layout.

4. **Expanding a compound piled children at a single point.**
   With layoutBy: null in expand-collapse, expanded children inherited the
   parent's position. Added __layoutCompoundChildren helper that arranges
   children in a grid centered on the parent's spot after each expand.
   M5 (13 issues) renders as a 5×3 grid bubble; M6 (38 issues) as ~8×5.

Also:
- Click handler: tapping a compound region now toggles expand/collapse
  AND shows detail panel (the +/- hover cue was easy to miss).
- highlightSubgraph treats issue children as kept iff their parent is kept.
- Added .gitignore entries for local single-file render artifacts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@chronoai-shining chronoai-shining merged commit dff77fd into main May 18, 2026
2 checks passed
@chronoai-shining chronoai-shining deleted the claude/sad-colden-701d52 branch May 18, 2026 07:48
potter-sun pushed a commit to potter-sun/region-map that referenced this pull request May 25, 2026
…e migration

## New NyxID regions (11)

Epic-level (8) — backed by new GitHub milestones ChronoAIProject#8-ChronoAIProject#15 on ChronoAIProject/NyxID:
- NyxID-CLI-Wizard (M1, public, focus, owner ctkm-aelf, 5 hardening bugs)
- NyxID-UX-Redesign (M1, obligation, focus, owner dannick-aelf, 4 issues)
- NyxID-Channel-Phase4 (M2, obligation, owner kaiweijw, 2 issues)
- NyxID-Device-Code-Grant (M2, seed, focus, owner kaiweijw, 12 issues)
- NyxID-Skill-Install-CLI (M2, obligation, owner chronoai-shining, 1)
- NyxID-Internal-Datasources (M1+, obligation, focus, owner kaiweijw, 5)
- NyxID-Anonymous-Endpoints (M2, scoped, owner chronoai-shining, 1)
- NyxID-Org-Managed-Nodes (M1+, seed, focus, owner kaiweijw, 6)

Marketing (3) — backed by GitHub milestones ChronoAIProject#16-ChronoAIProject#18, mirroring Ornn's
Marketing-L0/L1/L2 pattern:
- NyxID-Marketing-Prelaunch (4 issues: #183 #525 #619 #657 #766 lark-cli
  positioning, demo brainstorm, README v2, ArmorerLabs comparison, CDN)
- NyxID-Marketing-Show-HN (4 issues: #791 submission copy, #792 demo video,
  #793 day-of triage, #794 outreach list — all filed fresh)
- NyxID-Marketing-Postlaunch (1 issue: #795 funnel analytics dashboard)

## M1-Milestone rewired around the real user-growth gate

NyxID is MVP-ready. Engineering is not the gate; distribution is. M1 desc
explicitly says so, and deps now reflect the marketing attack:

  M1-Milestone deps:
    + NyxID-M0-Milestone (✅ mature)
    + NyxID-Marketing-Show-HN (⛔ seed — real gate)
    + NyxID-Marketing-Prelaunch (🟠 obligation — real gate)
    + NyxID-Quickstart-NPM (✅ bridged, Sprint 5 gate #558 cleared)
    + NyxID-Landing-Page (🟢 public, dormant)

Removed from M1 deps (parallel improvement, not gating):
    - NyxID-CLI-Wizard, NyxID-UX-Redesign, NyxID-Internal-Datasources
    - NyxID-Quickstart-Docker (moved to M1+, self-hosted ≠ hosted-user-growth)
    - NyxID-Invite-Code-System (foundation, already shipped)

## Drift fixes + existing-region updates

- NyxID-OAuth-flow 1→5 + refreshed bug refs (#683 #694 #695 #735)
- NyxID-Credential-Injection 1→5 + cross-ref to Org-Managed-Nodes
- NyxID-MCP-Wrap 1→0
- NyxID-Hosted-Instance desc refreshed (W19 quickstart cluster closed)
- NyxID-Invite-Code-System expanded → "Invite Codes + Org Model"
- NyxID-NAT-Traversal + NyxID-SSH-Tunneling — dropped over-broad gh_query
- NyxID-Reverse-Proxy 2→4
- NyxID-Quickstart-NPM 1→0 (Sprint 5 Show HN gate cleared 2026-05-18)
- NyxID-UX-Redesign 3→4 (+#772)
- Cross-product: Aevatar-NyxID-Integration 9→16, Ornn-NyxID-Integration 2→4

## Milestone schema migration

All new NyxID epic regions adopt shining's milestone_ref schema (from PR ChronoAIProject#6)
in addition to gh_query, mirroring the dual-field pattern Ornn uses. Issue
data flows through tools/sync_milestone_issues.py into ornn-issues.json.

Auto-sync workflow (.github/workflows/sync-milestone-issues.yml) will keep
ornn-issues.json fresh hourly going forward.

## GitHub side-effects (already applied)

- 11 milestones created on ChronoAIProject/NyxID
- 5 new issues filed (#791-#795 for Show HN prep)
- ~37 issues assigned to epic milestones
- 10 Device-Code-Grant sub-issues annotated with `Blocked by #NNN` lines for
  phase-DAG visualization
- 4 W20 sprint issues moved to epic milestones (#352 #695 #706 #711 #713) —
  W20 sprint loses those tags, gain epic-level grouping

## Validators

OK regions.json valid (82 regions). 12/12 unit tests pass. Strict drift audit
shows zero drift on NyxID + Ornn; remaining drift is on Aevatar regions
(eanzhao's territory, accrued naturally — not modified here).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant