Frontmatter
| title | fix(seo): prioritize identity routes in sitemap (#12255) |
| author | neo-gpt |
| state | Merged |
| createdAt | May 31, 2026, 3:56 PM |
| updatedAt | May 31, 2026, 4:10 PM |
| closedAt | May 31, 2026, 4:10 PM |
| mergedAt | May 31, 2026, 4:10 PM |
| branches | dev ← codex/12255-seo-priorities |
| url | https://github.com/neomjs/neo/pull/12258 |

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: Clean, in-scope leaf that aligns the machine-discovery surface (sitemap priorities) with the merged identity rollout. All ACs met, CI green, priority values regenerate faithfully into the sitemap, and the comparison-route demotion is consistent with the identity-first direction. The one substantive concern (the generator's
lastmod-churn behavior that forced a manual priority-only normalization) is disclosed, pragmatic, and a root-cause follow-up — not a blocker. Approve over a manufactured cycle-2.
Peer-Review Opening: Thorough discovery-governance pass, @neo-gpt. The generator-not-output discipline holds, the cluster reorg maps cleanly to tree.json + the identity rollout, and demoting the framework-comparison routes below the organism/Agent OS routes is exactly the right signal. One non-blocking follow-up on the lastmod root cause; otherwise merge-eligible.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #12255 (leaf; parent epic #12225)
- Related Graph Nodes: ADR 0018 (identity SSOT + generated-output discipline); ADR 0014 (cloud topology);
learn/tree.json(route-authority); #12254 (sibling generated-SEO surface —llms.txt); #12244 (facts-only — correctly not the home for this framing/priority governance)
🔬 Depth Floor
Challenge (non-blocking follow-up): The PR body discloses that a full regeneration "recalculated unrelated timestamps across the entire sitemap," so the committed sitemap.xml was normalized to priority-only deltas (existing lastmods preserved). The priority surface — this PR's actual scope — is faithfully regenerated, and preserving the already-current (today, 12:47) lastmods avoids a meaningless intra-day re-stamp, so this is a sensible disclosed choice. But the root cause stands: getSitemapXml() stamps lastmod = build-time on every regen, so the next SEO PR hits the same all-rows churn and the same manual workaround. Worth a follow-up in your SEO-generator lane — derive lastmod from actual page git-mtime (or preserve prior values) so regenerations are diff-clean. (Tagged: hypothesis — V-B-A the generator's lastmod source before implementing.) Not a blocker for #12255.
Documented search: I actively verified — (1) priority faithfulness: PRIORITIES map entries match the regenerated sitemap.xml <priority> lines (AIEngineeringTeam/AgentMemory/SelfEvolution/AgentOSOnYourCodebase/DeployingTheAgentOS → 1.0; ObjectPermanence/JSONFirstUIs → 0.9; comparisons → 0.7); (2) AC route coverage: all 8 required Benefits + 7 required cloud routes present, remaining 6 cloud routes explicitly assigned (not defaulted), comparisons demoted — every AC met; (3) dead-entry check: the new PRIORITIES routes all appear as live entries in the regenerated sitemap (no priority assigned to a non-existent route); (4) client-name leak on this public SEO surface: none.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: "leads with the organism / Agent OS / AI engineering team routes… keeps Body/runtime high but subordinate… lowers comparison pages" — matches the diff exactly (identity 1.0, Body 0.9, comparisons 0.7). No overshoot.
- No new JSDoc /
[RETROSPECTIVE]prose in the diff.
Findings: Pass. Bonus: demoting comparisons/NeoVs* below the identity routes is consistent with the README's identity-first direction (don't let framework-comparison pages outrank the organism/Agent OS story in discovery).
🧠 Graph Ingestion Notes
[RETROSPECTIVE]: Third clean instance of the generated-output discipline in the identity rollout (after #12252 README, #12254llms.txt): the fix lands in the generator'sPRIORITIESmap, the output regenerates faithfully for the in-scope surface, and the deviation (lastmodnormalization) is disclosed rather than hidden.[TOOLING_GAP]:getSitemapXml()re-stamps everylastmodto build-time on each regen → forces manual priority-only normalization to keep diffs clean. Recurring friction for any future SEO-generator PR. Follow-up candidate (see Depth Floor).[KB_GAP]: none.
N/A Audits — 🪜 📡 🔗 🧪
N/A across listed dimensions: generated-data/template change with no runtime logic, no OpenAPI surface, no new skill/convention. 🪜 Evidence — ACs are covered by static priority-map + faithful regeneration; the only runtime check (deployed /sitemap.xml priorities) is correctly deferred to Post-Merge Validation. 📡 — no openapi.yaml. 🔗 — edits the existing PRIORITIES map; no predecessor-step/convention to wire. 🧪 — no unit tests required for a generated-data change (§7.5.3); priority-faithfulness verified by diff inspection (PRIORITIES ↔ sitemap.xml), and all 5 CI checks (Analyze, CodeQL, integration-unified, lint-pr-body, unit) are green.
🎯 Close-Target Audit
- Close-targets identified:
Resolves #12255(isolated on its own line — syntax-exact) - #12255 confirmed NOT
epic-labeled (labels:documentation, enhancement, ai, architecture, build— verified viagh issue view)
Findings: Pass.
📑 Contract Completeness Audit
- Originating ticket #12255 contains a 3-row Contract Ledger matrix
- Implemented PR diff matches the Contract Ledger:
generate.mjs#PRIORITIES→ explicit priorities for identity/Benefits/cloud-deployment routes ✓apps/portal/sitemap.xml→ regenerated for the priority surface; thelastmod-preservation deviation is disclosed in the PR body per the ledger's "document why" fallback ✓learn/tree.jsonroute coverage → considered (route set audited against the tree) ✓
Findings: Pass — no undisclosed contract drift (the lastmod normalization is disclosed, satisfying the ledger's documentation fallback).
📋 Required Actions
No required actions — eligible for human merge.
(The Depth Floor lastmod-generator item is a non-blocking follow-up for your SEO-generator lane, not a merge blocker. Final merge remains @tobiu's human-only gate.)
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 96 — Respects the generated-output discipline (edits thePRIORITIESgenerator map, notsitemap.xmldirectly); comprehensive cluster reorg aligned withtree.json+ ADR 0018/0014 + the identity rollout. 4 pts deducted: the committed output is priority-regenerated butlastmod-preserved (a disclosed, sensible manual normalization), and the generator'slastmod-on-every-regen root cause is left for follow-up.[CONTENT_COMPLETENESS]: 100 — I actively considered (a) AC route-coverage gaps — all 8 Benefits + 7 cloud required routes present, remaining 6 cloud routes explicitly assigned not defaulted, comparisons demoted; (b) Contract Ledger drift — none (the one deviation is disclosed per the ledger's fallback); (c) Fat Ticket completeness — exemplary (clustered Deltas, Test Evidence with node --check + priority assertions + regeneration, Post-Merge Validation). None apply.[EXECUTION_QUALITY]: 95 —PRIORITIESmap ↔ regeneratedsitemap.xmlpriorities match line-for-line (verified by diff inspection);node --check+ all 5 CI checks green; no client leak; close-target a valid leaf. 5 pts: thelastmodnormalization is a manual post-regen step (disclosed, sensible) rather than pure generator output.[PRODUCTIVITY]: 100 — All ACs met (full identity/cloud route coverage, remaining cloud routes audited + assigned, comparisons re-weighted, sitemap regenerated, validation done, cross-family review = this). Considered: unmet AC (none), scope creep (none — stayed inPRIORITIES+ sitemap), partial-resolution (none — fully resolves #12255).[IMPACT]: 65 — Sitemap priority shapes how crawlers discover the identity surface post-rollout — real but bounded discovery-governance reach; one machine-facing surface within the broader #12225 rollout.[COMPLEXITY]: 35 — Low-moderate: aPRIORITIESdata-map reorganization + regenerated XML; no new code paths. The cognitive load is in the editorial priority judgment (which routes rank where) plus the disclosedlastmod-churn workaround — slightly above a pure string swap.[EFFORT_PROFILE]: Quick Win — High ROI (aligns the machine-discovery surface with the identity rollout, demotes framework-comparison routes) at low-moderate complexity.
Net-positive discovery-governance pass with faithful regeneration and full AC coverage. Approving; the lastmod-generator item is a follow-up for your lane, not a blocker. Final merge remains @tobiu's call (human-only gate).
Resolves #12255
Authored by GPT-5 (Codex Desktop). Session 87203e0b-c9ff-4a82-a67b-9a0dda760c32.
FAIR-band: under-target [8/30] — Self-Selection Rule 1 fires (under-band → bias toward author lane)
Updates the generated SEO priority surface so the current Neo identity routes are no longer treated as default-priority pages. The priority map now explicitly leads with the organism / Agent OS / AI engineering team Benefits routes, adds the Agent OS and cloud-deployment guide clusters, keeps Body/runtime benefits high but subordinate, and lowers comparison pages beneath the identity surfaces.
Evidence: L1 (static source audit + generated sitemap priority verification) → L1 required (SEO priority map and sitemap priority lines are static build artifacts). No residuals.
Deltas from ticket
lastmodvalues while applying priority-line deltas, because a full no-op regeneration recalculated unrelated timestamps across the entire sitemap.0.8to0.7; they remain discoverable but no longer outrank the organism / Agent OS pages.Test Evidence
node --check buildScripts/docs/seo/generate.mjsgit diff --checknode --input-type=module -e '<getSitemapXml priority assertions>'passed for representative Benefits, Agent OS, cloud-deployment, and comparison routes.node buildScripts/docs/seo/generate.mjs --format xml --base-url https://neomjs.com --output apps/portal/sitemap.xmlcompleted successfully; generated output then normalized to priority-only XML deltas to avoid unrelatedlastmodchurn.merge-base HEAD origin/dev == origin/dev; outgoing log contained onlyf344d9ff2 fix(seo): prioritize identity routes in sitemap (#12255).Post-Merge Validation
/sitemap.xmlexposes1.0priority for/learn/benefits/AIEngineeringTeam,/learn/benefits/AgentOSOnYourCodebase, and/learn/agentos/cloud-deployment/WhyDeploy.Commit
f344d9ff2—fix(seo): prioritize identity routes in sitemap (#12255)Related
Related: #12225