data: Ornn roadmap — full milestone refactor + auto-sync (region-map 1:1 GitHub milestones)#6
Merged
Merged
Conversation
…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>
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>
5 tasks
… 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>
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).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
End-to-end refactor of the Ornn roadmap. Three layers changed:
marketing.md.New roadmap shape
Ornn-M0-Engineering-FoundationOrnn-M1-Skill-Lifecycle-CoreOrnn-M2-Build-ExperienceOrnn-M3-Trust-QualityOrnn-M4-Go-Live-PrepOrnn-M5-QA-Pre-LaunchOrnn-M6-Code-Review-HardeningOrnn-M7-Platform-PowerOrnn-M8-Community-EngagementOrnn-Marketing-L0-Prelaunch-WarmupOrnn-Marketing-L1-LaunchOrnn-Marketing-L2-PostlaunchDependency graph
Auto-sync mechanism (step 5 of the brief)
Each region with a
milestone_reffield:has an
AUTO_GH_ISSUESmarker block in bothdesc.enanddesc.zh:The sync script regenerates the block between markers; manual text outside the markers is preserved.
Triggers (
.github/workflows/sync-milestone-issues.yml):workflow_dispatchbutton on Actions tabRequired secrets (only one):
CROSS_REPO_PAT— PAT withreposcope. Needed because Ornn-Marketing is a private repo and the defaultGITHUB_TOKENis 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— newtools/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.py→OK: regions.json valid (57 regions)python3 -m unittest discover tools/→12 tests OKpython3 tools/sync_milestone_issues.py→ all 12 regions synced, no-op on re-runManual followups
CROSS_REPO_PATsecret on this repo to enable Ornn-Marketing sync in CI (optional — public Ornn regions sync without it)quarto previewto eyeball the new 12-node Ornn layout🤖 Generated with Claude Code