Skip to content

Proposal: canonical top-level locations field#12

Closed
paulbennun wants to merge 1 commit into
narrative-first:mainfrom
paulbennun:locations-proposal-2026-04-24
Closed

Proposal: canonical top-level locations field#12
paulbennun wants to merge 1 commit into
narrative-first:mainfrom
paulbennun:locations-proposal-2026-04-24

Conversation

@paulbennun

Copy link
Copy Markdown

Summary

Opens discussion on promoting locations from a producer-namespaced extension (we currently carry it as x-nm-locations) to a canonical top-level NCP field. Four-field shape: id, name, description?, environment_hints?.

Full proposal: docs/proposals/2026-04-24-locations.md.

This PR adds only the proposal document — it does not change schema/ or examples/. It is intentionally left as a draft to open discussion; if the direction is agreeable, a follow-up PR would add the schema + fixtures per CONTRIBUTING.

What's in the proposal

  • Motivation. 18 months of adopter experience emitting/consuming a locations array; a working 6-location corpus; and a downstream pattern (scene-level location_id FKs) that benefits from a canonical home for the list.
  • Proposed schema. Optional top-level locations: [] with {id, name, description?, environment_hints?} — two required, two optional. environment_hints specified as producer-defined free-form tags (no closed vocabulary at the canonical level).
  • Backward compatibility. Additive; optional; closed-root additionalProperties: false preserved by updating the root allow-list. Absent producers and absent consumers behave unchanged.
  • Out of scope explicitly. Per-beat presence graphs, scene-level FK definition, acoustic routing semantics, and adjacency/navigation graphs are all kept to the producer/consumer side.
  • Reference implementation. paulbennun/NCPKit has been running this shape for about 18 months (currently serialised as x-nm-locations under 2.1.0).

What this PR is not

  • Not a schema change. schema/ncp-schema.yaml / schema/ncp-schema.json are untouched.
  • Not urgent. We carry x-nm-locations happily and will continue to; this is a good-citizen proposal rather than a blocker for anything.
  • Not prescriptive on form — happy to restructure as a GitHub Issue first, or split into proposal + schema PR, per the maintainers' preferred workflow.

Test plan

  • Proposal document renders correctly on GitHub
  • Maintainers read and advise on preferred workflow (issue first? direct schema PR?)
  • If direction is agreed, follow up with schema PR per CONTRIBUTING.md (schema + examples + npm run validate:schema)

Proposes promoting `locations` from a producer-namespaced extension
(`x-nm-locations`) to a canonical top-level NCP field. Adds
docs/proposals/2026-04-24-locations.md with motivation (adopter use,
downstream scene-level FK, acoustic-routing background), proposed schema
snippet (four fields: `id`, `name`, `description?`, `environment_hints?`),
backward-compatibility notes, migration path, alternatives considered, and a
reference implementation link to NCPKit.

Proposal only — no changes to schema/ or examples/. Intended to open
discussion before a schema-side PR.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@jhull

jhull commented May 12, 2026

Copy link
Copy Markdown
Member

Paul, thank you for the great idea and the detailed proposal. The core point makes total sense: NCP should not require repeating the same place/setting details across Moments when several Moments share the same Setting. We accepted the concept using NCP terminology as story-level settings[] plus optional moment.setting_id, while preserving free-text moment.setting for lightweight cases. That schema/docs/example change is now merged in #13. Really appreciate you surfacing this and helping tighten the protocol shape.

@jhull jhull closed this May 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants