Parent epic: #12225
Context
PR #12239 corrected the most obvious discovery-surface drift in package.json: the description now uses the concise organism apex, and several framework-trap / stale keywords were removed. The remaining keyword list still needs a separate pass. The operator explicitly called out that keyword ordering must be priority-based and that the team must genuinely challenge what belongs in the list at all.
V-B-A before filing:
origin/dev:package.json currently has 88 keywords after PR #12239.
- The list mixes apex/Brain terms (
agent-operating-system, active-hybrid-graphrag, dreamservice, professional-ai-engineering-team) with Body/application-engine terms (multi-threaded, multi-window, web-engine), generic JS terms (javascript, json, css), and product-example or low-signal terms (browser-email-client, web-based-email-client, monaco-editor, smooth-ui).
- Duplicate sweep found historical archived keyword tickets (#6462, #6830, #8357) and active parent #12225 / completed #12227 context, but no active ticket dedicated to priority ordering plus keep/drop challenge.
- Live GitHub search for open issues matching
package.json keywords returned no duplicates.
The Problem
package.json keywords are a machine-facing and human-facing discovery surface. They are not the same as README prose, but they still encode Neo's identity. Leaving the current 88-keyword array in inherited order risks diluting the organism / Agent OS apex with generic or stale terms. It can also make the metadata read like SEO stuffing instead of a deliberate ranked signal.
This ticket must avoid an unsupported claim that npm keyword order directly determines ranking. The verified problem is narrower and enough: order and inclusion are consumed by humans, package registries, crawlers, agents, and downstream tooling as metadata. A high-noise list communicates poor priority even if a given registry treats the array as unordered.
The Architectural Reality
package.json is an ADR 0018 identity surface. It carries both:
- FACT-adjacent package metadata (
name, version, repository, scripts), which must remain mechanically correct.
- FRAMING metadata (
description, keywords), which must stay audience-segmented but compatible with the canonical apex from #12225 / ADR 0018.
PR #12239 intentionally performed a trap purge and first-pass recategorization; it did not perform a full priority taxonomy or inclusion audit. This follow-up owns that second pass.
The Fix
Audit and rewrite package.json keywords[] using an explicit priority taxonomy:
- Define the intended consumer model for the keyword surface: package registry search, machine/agent discovery, and cold human metadata scanning.
- Classify every current keyword as
keep, drop, or defer, with one-line rationale.
- Reorder kept keywords by priority, not by append history or alphabetic convenience.
- Cap the list or explicitly justify retaining a larger count. High-value specificity beats broad stuffing.
- Keep the top cluster aligned with the current identity apex and concise machine register: organism / Agent OS / cross-model team / Neural Link / Active Hybrid GraphRAG / DreamService / self-healing / Body engine terms as appropriate.
- Challenge low-signal terms aggressively, especially app-example terms and generic tech terms that do not help the intended consumer understand what Neo is.
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
package.json keywords[] |
#12225, ADR 0018, #12227 / PR #12239 |
Ordered by explicit priority taxonomy; every retained keyword supports identity-compatible discovery |
Leave existing keyword if removal risk is uncertain, but document rationale in PR body |
PR body audit table |
node -e / JSON parse plus printed ordered categories |
| Keyword inclusion audit |
This ticket |
Every current keyword gets keep / drop / defer rationale |
Defer only when a concrete follow-up owner/surface is named |
PR body |
Reviewer can verify no unclassified keyword remains |
| GitHub repo topics proposal (optional, out-of-tree) |
ADR 0018 Class 4 external-surface rule |
If package keywords imply topic changes, list exact proposed topics or intentional divergence |
No GitHub topic change if out of scope |
PR body Out-of-tree section |
Human/operator can apply or reject separately |
Decision Record Impact
Aligned-with ADR 0018. No ADR change expected. If implementation discovers a new rule for keyword count/order semantics that should govern future identity updates, file a follow-up against the neo-identity-update skill rather than burying it in this ticket.
Acceptance Criteria
Out of Scope
- Rewriting the already-updated
package.json description from PR #12239.
- npm publication or registry-side experiments.
- GitHub topic changes performed by an agent; proposals are allowed, operator application is separate.
- Editing README, benefits docs, portal copy, or generated SEO output unless the keyword audit surfaces a narrowly scoped follow-up.
Avoided Traps
- Keeping all 88 keywords because they already exist.
- Alphabetizing the array and calling that priority.
- SEO stuffing with generic terms that bury the apex.
- Deleting all Body/application-engine terms and making the package undiscoverable to engine/runtime users.
- Assuming npm ranking semantics without evidence.
Related
- Parent: #12225
- Follow-up to: #12227 / PR #12239
- ADR 0018: Neo Identity Source-of-Truth Model
Origin Session ID: 87203e0b-c9ff-4a82-a67b-9a0dda760c32
Retrieval Hint: "package.json keywords priority ordering keep drop defer identity apex discovery metadata PR 12239"
Parent epic: #12225
Context
PR #12239 corrected the most obvious discovery-surface drift in
package.json: the description now uses the concise organism apex, and several framework-trap / stale keywords were removed. The remaining keyword list still needs a separate pass. The operator explicitly called out that keyword ordering must be priority-based and that the team must genuinely challenge what belongs in the list at all.V-B-A before filing:
origin/dev:package.jsoncurrently has 88 keywords after PR #12239.agent-operating-system,active-hybrid-graphrag,dreamservice,professional-ai-engineering-team) with Body/application-engine terms (multi-threaded,multi-window,web-engine), generic JS terms (javascript,json,css), and product-example or low-signal terms (browser-email-client,web-based-email-client,monaco-editor,smooth-ui).package.json keywordsreturned no duplicates.The Problem
package.jsonkeywords are a machine-facing and human-facing discovery surface. They are not the same as README prose, but they still encode Neo's identity. Leaving the current 88-keyword array in inherited order risks diluting the organism / Agent OS apex with generic or stale terms. It can also make the metadata read like SEO stuffing instead of a deliberate ranked signal.This ticket must avoid an unsupported claim that npm keyword order directly determines ranking. The verified problem is narrower and enough: order and inclusion are consumed by humans, package registries, crawlers, agents, and downstream tooling as metadata. A high-noise list communicates poor priority even if a given registry treats the array as unordered.
The Architectural Reality
package.jsonis an ADR 0018 identity surface. It carries both:name,version, repository, scripts), which must remain mechanically correct.description,keywords), which must stay audience-segmented but compatible with the canonical apex from #12225 / ADR 0018.PR #12239 intentionally performed a trap purge and first-pass recategorization; it did not perform a full priority taxonomy or inclusion audit. This follow-up owns that second pass.
The Fix
Audit and rewrite
package.jsonkeywords[]using an explicit priority taxonomy:keep,drop, ordefer, with one-line rationale.Contract Ledger Matrix
package.jsonkeywords[]node -e/ JSON parse plus printed ordered categorieskeep/drop/deferrationaleOut-of-treesectionDecision Record Impact
Aligned-with ADR 0018. No ADR change expected. If implementation discovers a new rule for keyword count/order semantics that should govern future identity updates, file a follow-up against the
neo-identity-updateskill rather than burying it in this ticket.Acceptance Criteria
package.jsonremains valid JSON and the keywords array is intentionally ordered by a documented priority taxonomy.*-frameworkmarketing terms.package.json, the PR body documents the exact proposed out-of-tree update or explains the intentional divergence.Out of Scope
package.jsondescription from PR #12239.Avoided Traps
Related
Origin Session ID: 87203e0b-c9ff-4a82-a67b-9a0dda760c32 Retrieval Hint: "package.json keywords priority ordering keep drop defer identity apex discovery metadata PR 12239"