After the identity PR wave, the operator explicitly called out package.json keywords as a follow-up: the list should be ordered by priority and should be challenged hard for what belongs there at all.
V-B-A performed before filing:
nl -ba package.json | sed -n '83,172p' shows the current keyword list contains 88 entries and mixes apex identity, Agent OS, runtime engine, capability, product-specific, and legacy web-discovery phrases in one flat sequence.
rg -n '"keywords"' package-lock.json package.json shows only package.json owns the keyword field; package-lock.json does not need a keyword mirror.
rg duplicate sweep across resources/content/issues, resources/content/discussions, and package.json found no equivalent active ticket.
Live duplicate sweep via gh search issues 'package.json keywords ordering priority' --repo neomjs/neo --limit 10 --json number,title,state,url returned [].
Knowledge Base semantic duplicate sweep was attempted but unavailable: Failed to access collections: The requested resource could not be found.
The Problem
The current keyword list is not a prioritized discovery contract. It reads like an accumulated catch-all:
high-value identity terms (software-organism, application-engine, neural-link, agent-operating-system) sit beside lower-priority or product-specific terms (browser-email-client, web-based-email-client, browser-based-ide, multi-window-ide);
runtime and Agent OS terms are mixed without a clear audience order;
several terms may keep pulling Neo back toward older web-app or feature-demo categories rather than the current organism apex;
there is no explicit keep/drop/demote rationale, so future identity updates can append more terms without a quality bar.
The operator requirement is not just sorting. It is curation: decide what earns a keyword slot, what should be demoted, and what should be removed.
The Architectural Reality
package.json#keywords is a public metadata surface consumed by npm, GitHub rendering, search engines, package scanners, humans, and AI agents. It is not only cosmetic copy.
Current anchors:
package.json:4 carries the updated organism description.
package.json:83-172 carries the current flat keyword list.
.github/VISION.md and README.md now carry the canonical identity apex and should inform the keyword priority order.
ADR 0018 governs identity update coherence across surfaces.
The Fix
Curate package.json#keywords as a priority-ordered metadata contract:
Define keyword tiers before editing:
Tier 1: apex identity and category terms.
Tier 2: Agent OS / Brain terms.
Tier 3: runtime Body / application-engine terms.
Tier 4: capability/discovery support terms.
Drop: stale, overly narrow, duplicate, weak, or category-drifting terms.
Produce a keep/drop/demote matrix for the current list, with rationale for contentious terms.
Edit package.json only after the matrix is defensible.
Keep the list concise enough that each retained keyword has discovery value.
Verify JSON validity and ensure no lockfile churn is introduced unless a tool explicitly requires it.
First keywords communicate the highest-value identity, not narrow demos or historical web-app framing
Retain a smaller compatibility tail only with rationale
PR body evidence
Manual package metadata diff review
Decision Record Impact
Aligned-with ADR 0018. This ticket refines one identity surface already in ADR 0018 scope and should not amend ADR 0018 unless the work discovers a broader metadata governance rule.
Acceptance Criteria
package.json#keywords is reordered by explicit priority, not alphabetically.
The PR includes a keep/drop/demote rationale for existing contentious terms, including at minimum browser-email-client, web-based-email-client, browser-based-ide, web-based-ide, web-app, low-code-ui, standalone-ai-sdk, and typescript-without-typescript.
The first 10 keywords communicate the canonical apex without relying on stale web-app or narrow demo framing.
The final list remains valid JSON and does not introduce package-lock.json churn unless a verified tool path requires it.
Verification includes node -e "JSON.parse(require('fs').readFileSync('package.json','utf8'))" or equivalent JSON parse evidence.
Verification includes a stale/category grep over the final keyword list.
Out of Scope
GitHub repository topics. They may need a separate follow-up, but this ticket is limited to package.json#keywords.
README, VISION, benefits docs, or portal copy.
npm publishing behavior changes.
Avoided Traps
Alphabetical sorting is rejected because the operator explicitly asked for priority ordering.
Keyword stuffing is rejected because weak terms dilute the metadata signal.
AI-only keywords are rejected because Neo's Body/runtime identity is co-load-bearing with the Brain.
Web-app compatibility terms require explicit justification; they must not reintroduce the old category drift by default.
Context
After the identity PR wave, the operator explicitly called out
package.jsonkeywords as a follow-up: the list should be ordered by priority and should be challenged hard for what belongs there at all.V-B-A performed before filing:
nl -ba package.json | sed -n '83,172p'shows the current keyword list contains 88 entries and mixes apex identity, Agent OS, runtime engine, capability, product-specific, and legacy web-discovery phrases in one flat sequence.rg -n '"keywords"' package-lock.json package.jsonshows onlypackage.jsonowns the keyword field;package-lock.jsondoes not need a keyword mirror.rgduplicate sweep acrossresources/content/issues,resources/content/discussions, andpackage.jsonfound no equivalent active ticket.gh search issues 'package.json keywords ordering priority' --repo neomjs/neo --limit 10 --json number,title,state,urlreturned[].Failed to access collections: The requested resource could not be found.The Problem
The current keyword list is not a prioritized discovery contract. It reads like an accumulated catch-all:
software-organism,application-engine,neural-link,agent-operating-system) sit beside lower-priority or product-specific terms (browser-email-client,web-based-email-client,browser-based-ide,multi-window-ide);The operator requirement is not just sorting. It is curation: decide what earns a keyword slot, what should be demoted, and what should be removed.
The Architectural Reality
package.json#keywordsis a public metadata surface consumed by npm, GitHub rendering, search engines, package scanners, humans, and AI agents. It is not only cosmetic copy.Current anchors:
package.json:4carries the updated organism description.package.json:83-172carries the current flat keyword list..github/VISION.mdandREADME.mdnow carry the canonical identity apex and should inform the keyword priority order.The Fix
Curate
package.json#keywordsas a priority-ordered metadata contract:package.jsononly after the matrix is defensible.Contract Ledger Matrix
package.json#keywordspackage.json,.github/VISION.md,README.md, ADR 0018Decision Record Impact
Aligned-with ADR 0018. This ticket refines one identity surface already in ADR 0018 scope and should not amend ADR 0018 unless the work discovers a broader metadata governance rule.
Acceptance Criteria
package.json#keywordsis reordered by explicit priority, not alphabetically.browser-email-client,web-based-email-client,browser-based-ide,web-based-ide,web-app,low-code-ui,standalone-ai-sdk, andtypescript-without-typescript.package-lock.jsonchurn unless a verified tool path requires it.node -e "JSON.parse(require('fs').readFileSync('package.json','utf8'))"or equivalent JSON parse evidence.Out of Scope
package.json#keywords.Avoided Traps
Related
Retrieval Hint:
package.json keywords priority identity metadata ADR 0018