Mechanical rename produced by scripts/msd-rename.cjs: gsd/Gsd/GSD -> msd/Msd/MSD across contents and paths, upstream package/repo coordinates -> @golem15/msd-core and golem15com/msd-core. Deep links into upstream history, sibling upstream packages, the GSD-2 import feature, CHANGELOG.md and .changeset/ are kept as-is. Hand edits on top: MSD block-letter banner and logos, LICENSE copyright line, package/plugin identity, regenerated lockfile, install-tree fixtures, derived registries and benchmark baseline; migration checksum baseline re-locked (MSD keeps its own install state, so no install had applied the old sums); sort-order and regex-escaped expectations in tests adjusted.
49 lines
2.2 KiB
Markdown
49 lines
2.2 KiB
Markdown
# Dynamic context management — Option-E reference example
|
|
|
|
Reference example for [ADR-1671](../../docs/adr/1671-dynamic-context-management-platform.md),
|
|
"Dynamic context management platform."
|
|
|
|
> **This is a non-shipping reference example.** It lives outside the build
|
|
> (`src/` → `bin/lib/`), the npm package `files[]`, the installer, and the CI
|
|
> test suite (`tests/`). Nothing here is compiled into or installed with MSD.
|
|
> The production implementation lands in a later phase of the
|
|
> [Dynamic Context Management epic (#1671)](https://github.com/open-gsd/gsd-core/issues/1671).
|
|
|
|
## What it demonstrates
|
|
|
|
The **predicate fact-store → JIT selector** slice of the platform: parse the
|
|
repo-root `CONTEXT.md` `CLASS.subkey=value` predicates into structured records,
|
|
drift-guard a generated index, and select the relevant predicate subset for a
|
|
task — the building block for just-in-time agent-brief assembly instead of
|
|
hand-citing a 200 KB file.
|
|
|
|
## Files
|
|
|
|
- `context-predicates.cjs` — parser + selector + deterministic index builder (self-contained).
|
|
- `gen-context-index.cjs` — `--check` / `--write` drift-guarded generator + `--select`.
|
|
- `CONTEXT-INDEX.json` — sample generated output (415 predicates, 20 classes).
|
|
- `demo.cjs` — runnable usage example.
|
|
|
|
## Run (from the repo root)
|
|
|
|
```sh
|
|
node examples/dynamic-context-management/demo.cjs
|
|
node examples/dynamic-context-management/gen-context-index.cjs --select PRED.k320
|
|
node examples/dynamic-context-management/gen-context-index.cjs --check
|
|
```
|
|
|
|
## Validation
|
|
|
|
During research this slice was validated with 42 behavioral tests — predicate
|
|
forms, fenced-code / prose skipping, duplicate-id detection, the selector, a
|
|
deterministic index, and a fast-check property test. The production
|
|
implementation has since landed, with `tests/context-predicates.test.cjs` and
|
|
`tests/context-index-sync.test.cjs` as its behavioral tests under `tests/`,
|
|
and `scripts/lint-example-parser-parity.cjs` (wired into `npm run lint:ci`)
|
|
asserting this example and production agree.
|
|
|
|
Research also surfaced 3 latent duplicate predicate IDs in `CONTEXT.md`
|
|
(`RULESET.WORKFLOW_MARKDOWN.FENCES`, `RULESET.GEMINI.TOOLS.ask_user`,
|
|
`RULESET.GEMINI.TEST_SENTINEL`) at the time; all three have since been
|
|
resolved and the current index carries 0 duplicate ids.
|