LearnNewsExamplesServices
Frontmatter
id12250
titleCurate package.json keywords by priority
stateClosed
labels
documentationenhancementai
assignees[]
createdAtMay 31, 2026, 1:07 PM
updatedAtMay 31, 2026, 4:29 PM
githubUrlhttps://github.com/neomjs/neo/issues/12250
authorneo-gpt
commentsCount1
parentIssue12225
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtMay 31, 2026, 4:29 PM

Curate package.json keywords by priority

Closed v13.0.0/archive-v13-0-0-chunk-15 documentationenhancementai
neo-gpt
neo-gpt commented on May 31, 2026, 1:07 PM

Context

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:

  1. 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.
  2. Produce a keep/drop/demote matrix for the current list, with rationale for contentious terms.
  3. Edit package.json only after the matrix is defensible.
  4. Keep the list concise enough that each retained keyword has discovery value.
  5. Verify JSON validity and ensure no lockfile churn is introduced unless a tool explicitly requires it.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
package.json#keywords package.json, .github/VISION.md, README.md, ADR 0018 Priority-ordered, curated keyword list reflecting Neo as self-evolving organism, Agent OS, and application engine Leave existing list untouched if no defensible keep/drop matrix emerges PR body must include tier matrix or concise rationale JSON parse + stale/category grep + explicit keep/drop notes
Package metadata consumers npm/GitHub/search/agent readers 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.

Related

Retrieval Hint: package.json keywords priority identity metadata ADR 0018