@ontrails/trails 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/CHANGELOG.md +1906 -0
  2. package/README.md +48 -0
  3. package/bin/trails.ts +3 -0
  4. package/package.json +57 -0
  5. package/src/app.ts +167 -0
  6. package/src/clack.ts +111 -0
  7. package/src/cli.ts +308 -0
  8. package/src/completions.ts +431 -0
  9. package/src/lifecycle-source-io.ts +33 -0
  10. package/src/load-app-mirror.ts +202 -0
  11. package/src/local-state-io.ts +129 -0
  12. package/src/mcp-app.ts +42 -0
  13. package/src/mcp-options.ts +92 -0
  14. package/src/mcp.ts +8 -0
  15. package/src/project-writes.ts +377 -0
  16. package/src/regrade/audit.ts +571 -0
  17. package/src/regrade/config.ts +152 -0
  18. package/src/regrade/history.ts +636 -0
  19. package/src/regrade/lifecycle.ts +76 -0
  20. package/src/regrade/live-api-preserve.ts +123 -0
  21. package/src/regrade/plan-artifact.ts +515 -0
  22. package/src/regrade/plan-derivation.ts +301 -0
  23. package/src/regrade/prepared-run.ts +259 -0
  24. package/src/regrade/receipt-history.ts +446 -0
  25. package/src/regrade/source-transaction.ts +185 -0
  26. package/src/release/bindings.ts +58 -0
  27. package/src/release/changeset-packages.ts +99 -0
  28. package/src/release/check.ts +1191 -0
  29. package/src/release/cli-bundle.ts +575 -0
  30. package/src/release/config.ts +73 -0
  31. package/src/release/contract-facts.ts +425 -0
  32. package/src/release/homebrew.ts +221 -0
  33. package/src/release/index.ts +180 -0
  34. package/src/release/lock-roundtrip-smoke.ts +255 -0
  35. package/src/release/lock-roundtrip-workspace.ts +107 -0
  36. package/src/release/native-bun-publish.ts +964 -0
  37. package/src/release/native-bun-registry.ts +848 -0
  38. package/src/release/notes-cli.ts +171 -0
  39. package/src/release/notes.ts +390 -0
  40. package/src/release/pack-coherence.ts +455 -0
  41. package/src/release/package-route-facts.ts +146 -0
  42. package/src/release/packed-artifacts-smoke.ts +236 -0
  43. package/src/release/policy.ts +1780 -0
  44. package/src/release/semver.ts +104 -0
  45. package/src/release/smoke.ts +56 -0
  46. package/src/release/stable-version-release.ts +80 -0
  47. package/src/release/wayfinder-dogfood-smoke.ts +762 -0
  48. package/src/release/zero-line-transition.ts +68 -0
  49. package/src/retired-topo-command.ts +36 -0
  50. package/src/run-adapter-check.ts +76 -0
  51. package/src/run-argv.ts +133 -0
  52. package/src/run-collision.ts +126 -0
  53. package/src/run-completions-install.ts +179 -0
  54. package/src/run-example.ts +149 -0
  55. package/src/run-examples.ts +148 -0
  56. package/src/run-quiet.ts +75 -0
  57. package/src/run-regrade-progress.ts +47 -0
  58. package/src/run-release-check.ts +74 -0
  59. package/src/run-schema.ts +74 -0
  60. package/src/run-trace.ts +273 -0
  61. package/src/run-warden.ts +39 -0
  62. package/src/run-watch-project.ts +52 -0
  63. package/src/run-watch.ts +381 -0
  64. package/src/run-wayfind-outline.ts +170 -0
  65. package/src/scaffold-version-sync.ts +183 -0
  66. package/src/scaffold-versions.generated.ts +12 -0
  67. package/src/trails/adapter-check.ts +244 -0
  68. package/src/trails/add-surface.ts +816 -0
  69. package/src/trails/add-trail.ts +141 -0
  70. package/src/trails/add-verify.ts +252 -0
  71. package/src/trails/compile.ts +118 -0
  72. package/src/trails/completions-complete.ts +236 -0
  73. package/src/trails/completions.ts +47 -0
  74. package/src/trails/config-explain.ts +43 -0
  75. package/src/trails/create-adapter.ts +785 -0
  76. package/src/trails/create-scaffold.ts +1215 -0
  77. package/src/trails/create-versions.ts +62 -0
  78. package/src/trails/create.ts +652 -0
  79. package/src/trails/deprecate.ts +59 -0
  80. package/src/trails/dev-clean.ts +80 -0
  81. package/src/trails/dev-reset.ts +48 -0
  82. package/src/trails/dev-stats.ts +71 -0
  83. package/src/trails/dev-support.ts +360 -0
  84. package/src/trails/doctor.ts +77 -0
  85. package/src/trails/draft-promote.ts +949 -0
  86. package/src/trails/guide.ts +106 -0
  87. package/src/trails/load-app.ts +1145 -0
  88. package/src/trails/operator-context.ts +66 -0
  89. package/src/trails/project-context-output.ts +304 -0
  90. package/src/trails/project-context.ts +613 -0
  91. package/src/trails/project.ts +65 -0
  92. package/src/trails/regrade.ts +4951 -0
  93. package/src/trails/release-check.ts +113 -0
  94. package/src/trails/release-smoke.ts +49 -0
  95. package/src/trails/revise.ts +53 -0
  96. package/src/trails/root-dir.ts +21 -0
  97. package/src/trails/run-example.ts +592 -0
  98. package/src/trails/run-examples.ts +149 -0
  99. package/src/trails/run.ts +496 -0
  100. package/src/trails/scaffold-json.ts +60 -0
  101. package/src/trails/scaffold-topo-identity.ts +479 -0
  102. package/src/trails/survey.ts +990 -0
  103. package/src/trails/topo-activation.ts +14 -0
  104. package/src/trails/topo-constants.ts +2 -0
  105. package/src/trails/topo-history.ts +47 -0
  106. package/src/trails/topo-output-schemas.ts +259 -0
  107. package/src/trails/topo-pin.ts +38 -0
  108. package/src/trails/topo-read-support.ts +368 -0
  109. package/src/trails/topo-reports.ts +809 -0
  110. package/src/trails/topo-store-support.ts +323 -0
  111. package/src/trails/topo-support.ts +247 -0
  112. package/src/trails/topo-unpin.ts +61 -0
  113. package/src/trails/topo.ts +92 -0
  114. package/src/trails/validate.ts +348 -0
  115. package/src/trails/version-lifecycle-support.ts +936 -0
  116. package/src/trails/warden-guide.ts +134 -0
  117. package/src/trails/warden.ts +598 -0
  118. package/src/trails/wayfind-diff.ts +716 -0
  119. package/src/trails/wayfind-outline.ts +876 -0
  120. package/src/trails/wayfind.ts +1319 -0
  121. package/src/versions.ts +31 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,1906 @@
1
+ # trails
2
+
3
+ ## 0.2.0
4
+
5
+ ### Patch Changes
6
+
7
+ - [`664e8bb`](https://github.com/outfitter-dev/trails/commit/664e8bb049e61f1d47cec1dd246606707af5d1a8): Point public installation examples at exact approved 0.2.0 versions and distinguish the prepared source release from pending npm publication.
8
+ - [`e19534f`](https://github.com/outfitter-dev/trails/commit/e19534f7b5cdaa2a8a8fba9267f1d27f766cb9da): Run lock round-trip smoke checks in a temporary copy of current working files so compile and cleanup do not rewrite caller lockfiles or overwrite concurrent edits.
9
+ - [`81fb41c`](https://github.com/outfitter-dev/trails/commit/81fb41c9c40b0a6052defedb1a8d9239d51c6671): Recognize generated stable version releases without a prerelease state file while retaining release-intent checks for source and manifest content changes.
10
+ - [`79d12ca`](https://github.com/outfitter-dev/trails/commit/79d12cae392436e21a1125f3517e08a6b38d12d0): Support the approved initial release on `latest` at `0.2.0`: recognize the unpublished `1.0.0` source reset and the old beta tag predecessor, while retaining downgrade guards for every other transition and requiring manual publication.
11
+
12
+ Recognize the approved manual version PR in publication discovery with exact repository, branch, version, and label checks; preserve the normal bot-generated release path.
13
+
14
+ Keep the generated Homebrew formula on version scheme 1 so ordinary upgrades move from the beta line to 0.2.0 and continue through subsequent releases.
15
+
16
+ Derive generated library runtime ranges from the installed compiler package version so emitted libraries follow the 0.2.x release line and future version changes.
17
+ - [`b3ddf91`](https://github.com/outfitter-dev/trails/commit/b3ddf918ada8211f44983512e2bbdfbc5b66d722): Prepare the first normal Trails release at `0.2.0` on `latest`, replacing the unpublished 1.0.0 source release. The target advances the original `0.1.0` source minor, which was never published under the current package names. Public packages remain in lockstep. Update consumer installation guidance and provide a temporary manifest bridge for old 1.0 beta sources. Published beta versions remain unchanged; minor 0.x releases may carry documented breaking changes.
18
+
19
+ The `1.0.0` section retained below records an unpublished preparation, not an npm release. Its accumulated changes are included in `0.2.0`; the section remains as source history alongside the published beta entries.
20
+
21
+ ## 1.0.0
22
+
23
+ ### Major Changes
24
+
25
+ - [`93607de`](https://github.com/outfitter-dev/trails/commit/93607deae7f5a6badb4fed40f9f6b7fef43c8b64): API simplification: unified trail model, intent enum, blaze, metadata.
26
+
27
+ **BREAKING CHANGES:**
28
+
29
+ - `hike()` removed — use `trail()` with optional `crosses: [...]` field
30
+ - `follows` renamed to `crosses` (matching `ctx.cross()`)
31
+ - `topo.hikes` removed — single `topo.trails` map
32
+ - `kind: 'hike'` removed — everything is `kind: 'trail'`
33
+ - `readOnly`/`destructive` booleans replaced by `intent: 'read' | 'write' | 'destroy'`
34
+ - `implementation` field renamed to `blaze`
35
+ - `markers` field renamed to `metadata`
36
+ - `testHike` renamed to `testCrosses`, `HikeScenario` to `CrossScenario`
37
+ - `surface()` now returns the surface handle (`Command` for CLI, `Server` for MCP)
38
+
39
+ - [`1eb5bdc`](https://github.com/outfitter-dev/trails/commit/1eb5bdc06142d8886f3870801b2ef71a0c5f3844): Rename first-class trail composition from the `cross` API family to the `compose` family across core contracts, testing helpers, topo projections, Warden rules, CLI scaffolds, and docs. `composes`, `ctx.compose`, `composeInput`, and `Compose*` type names are now the public authoring vocabulary; topo persistence migrates legacy composition rows and graph keys forward.
40
+ - [`abc8c68`](https://github.com/outfitter-dev/trails/commit/abc8c6872c83bdcb3a58ed8c2ee2c3ed58b4943d): Move the brief capability report from the bare `survey` flag surface to the role-anchored `survey.brief` trail.
41
+ - [`04e2a2e`](https://github.com/outfitter-dev/trails/commit/04e2a2e956a98d69b7ec7ed70b46ad1e3762afeb): Move saved contract diffing from the bare `survey` flag surface to the `survey.diff` trail, with optional `against` targets and `breakingOnly` filtering.
42
+ - [`ed171d5`](https://github.com/outfitter-dev/trails/commit/ed171d5c95da98c09ee6eb316d4dd65853228b6b): Split `trails survey` detail inspection into role-anchored `survey.trail`, `survey.resource`, and `survey.signal` trails while keeping bare `survey <id>` as an all-kinds lookup. Remove the temporary `survey --openapi` and `topo.show` CLI shapes. CLI command projection now supports executable parent commands with positional arguments alongside child commands.
43
+ - [`de30d6c`](https://github.com/outfitter-dev/trails/commit/de30d6c358048fba48822ac43b1c2cc04a3d30be): Introduce `topo.compile` as the canonical trail for writing `.trails` lockfile
44
+ and surface artifacts, remove the `survey --generate` mode, and update drift
45
+ guidance to point at the compile command.
46
+ - [`120caf5`](https://github.com/outfitter-dev/trails/commit/120caf57e6b6da4e01e53a1bff3a629cadf48d6e): Promote topo artifact commands to `trails compile` and `trails validate`.
47
+ - [`938f005`](https://github.com/outfitter-dev/trails/commit/938f0058de847c573299c6ff258ffd8511b94cb6): Cut CLI topo compile and survey diff surfaces over to the lock v3 artifact family. `topo.compile` now reports `topoPath` for `.trails/topo.lock`, survey diff accepts explicit `topo.lock` files and directories containing `topo.lock`, and new scaffolds no longer ignore committed root lock artifacts.
48
+ - [`10eae9a`](https://github.com/outfitter-dev/trails/commit/10eae9a96079dde67227191f670ba7ed1b40fef2): Migrate the Trails workspace to the documented `.trails/` layout: committed `.lock` files at the workspace root, ignored `cache/` for rebuildable derived data, ignored `state/` for mutable runtime state, and `.trails/config.local.{ts,js}` for local overrides. The default SQLite path is now `.trails/state/trails.db`. Workspace bootstrap creates only `cache/` and `state/` — the legacy `dev/` and `generated/` subdirectories are no longer created. Dev reset cleans both the new `.trails/state/` paths and legacy `.trails/trails.db*` and `.trails/dev/tracing.db*` paths for one cycle. Scaffold and workspace gitignores reflect the new layout.
49
+
50
+ Workspace bootstrap is now owned by a single canonical source in `@ontrails/core`. The package exposes `ensureTrailsWorkspace()`, `WORKSPACE_GITIGNORE_CONTENT`, and `WORKSPACE_GITIGNORE_LINES`. `@ontrails/config` no longer exports its own `ensureWorkspace` (consumers should import from `@ontrails/core`). `trails create` now writes `.trails/.gitignore` during scaffolding so a fresh-scaffolded project's initial commit includes the workspace gitignore (resolves TRL-703).
51
+
52
+ ### Minor Changes
53
+
54
+ - [`69057e9`](https://github.com/outfitter-dev/trails/commit/69057e9348006b2b70c9f6237572a5aa8de3ee1f): Add hierarchical CLI command trees and structured input, enforce established-only topo exports across surfaces, move developer topo and tracing state onto shared `trails.db` with pins and maintenance flows, and ship schema-derived stores through `@ontrails/store` and its Drizzle runtime.
55
+ - [`4fb20a6`](https://github.com/outfitter-dev/trails/commit/4fb20a68e1ed98972d99fed8b2df96bfa6804bd3): Derive deterministic, provenance-bearing vocabulary plan proposals from a minimal `from`/`to` seed, including morphology, public and compound identifier review, filename and reference-closure candidates, namespace census, and validated live-topo API preserves. Classified governed transitions retain their registry identity while routing every governed form to review instead of inventing a single safe successor.
56
+ - [`bb5a219`](https://github.com/outfitter-dev/trails/commit/bb5a219860a78fefa6122d32a3dc7b4550fa5a1a): Add the public `create.versions` trail (`trails create versions`). Scaffold dependency version derivation graduates from `scripts/sync-scaffold-versions.ts` into the `create` surface: check mode verifies `apps/trails/src/scaffold-versions.generated.ts` is current, write mode regenerates it, and the root script remains as a thin compatibility wrapper.
57
+ - [`5795bd2`](https://github.com/outfitter-dev/trails/commit/5795bd21abe44b0b91650c34981bf61080e4a7a3): HTTP surface and OpenAPI generation.
58
+
59
+ **http**: New `@ontrails/http` package — framework-agnostic HTTP route projection. `surface()` derives routes from trail IDs, maps intent to HTTP verbs (read→GET, write→POST, destroy→DELETE), and maps error taxonomy to status codes.
60
+
61
+ **trails**: Depend on `@ontrails/http` for `trails survey --openapi`.
62
+
63
+ - [`90d394c`](https://github.com/outfitter-dev/trails/commit/90d394c005fdf6b898ba7052d0b56755af0f4954): Derive nested worktree, repository, and submodule collection boundaries in the
64
+ shared Source walker. Regrade and Warden now observe one directly targeted
65
+ working tree per run, and Regrade audit summaries expose boundary skip counts.
66
+ - [`9518f5c`](https://github.com/outfitter-dev/trails/commit/9518f5cc892a87273a3bfdaa0d7319f98004ecb8): `trails regrade adjust <transition>` pulls a graduated transition back from consolidated history into an active plan minus the run ledger, preserving the stable transition id so subsequent applies append to the same history spine. Plan re-derivation (`regrade plan`) now carries `transitionId` forward from an existing active plan.
67
+ - [`d3215b0`](https://github.com/outfitter-dev/trails/commit/d3215b0966f13af2a72ece9adbcc2c68c70f81b6): Add governed file renames to vocabulary Regrade plans, with move-first derived reference closure and persisted policy-aware evidence across CLI and MCP.
68
+ - [`aa29fa7`](https://github.com/outfitter-dev/trails/commit/aa29fa7cb96ff7fd9cbd99ac6ef0d5540475ef42): Prove that one selected published or local-tarball Trails package matches the bytes installed in a downstream project throughout class-mode Regrade runs, saved-plan review, and prepared apply.
69
+ - [`714939d`](https://github.com/outfitter-dev/trails/commit/714939d6ec143c55a1aba55b65bd11a8a2bfbf1e): Stacked/phased regrades ride the primary tooling: class-mode Regrade plans accept `include` path globs so one transition can be applied in scoped parts that all append to the same consolidated history, and an authored `--name` keys multi-class transitions to a clean transition-name filename instead of concatenated class ids.
70
+ - [`65b362f`](https://github.com/outfitter-dev/trails/commit/65b362f65fa2a75e2121d1a8b31882d52fa0376b): Regrade history consolidates per transition, append-only: `regrade apply` appends a run entry stamped `{ planContentHash, lockHashAtRun }` to `.trails/regrade/history/<transition>.json` instead of overwriting lockhash-named files, identical re-runs are recognized as replays, the artifact carries a stable internal transition `id`, and `regrade check <transition>` verifies each recorded run at its own stamped lock. The report `history.status` union widens to `applied | checked | replay`.
71
+ - [`5a7d22a`](https://github.com/outfitter-dev/trails/commit/5a7d22ab9d674f86b28758f23c3e94a17efb5be1): Add three-tier vocabulary migration scope. Protected historical paths remain
72
+ scanned and counted as `historical-by-policy` without being rewritten, while
73
+ reports expose scope-tier totals and census-expected teaching-surface coverage
74
+ through equivalent CLI and MCP plan schemas. Applied vocabulary occurrences
75
+ remain auditable in history with an `applied` verdict, while policy-only
76
+ evidence does not make an active plan stale merely by being recorded.
77
+ - [`8424b67`](https://github.com/outfitter-dev/trails/commit/8424b67d929b8e48d5e27dbf5b0d2347fde8e481): Make `run`, Wayfinder navigation and semantic diff, Warden, and shell
78
+ completions use Config-owned project identity. Add stable `--app <id>`
79
+ selection and structured project provenance, preserve partial saved workspace
80
+ navigation, and require complete app-partitioned views for workspace diff.
81
+ Preserve canonical sole-app discovery for standalone run and live Wayfinder
82
+ consumers, and keep healthy shell completions available when configured sibling
83
+ apps cannot load. Keep nested app completion suggestions inside the selected
84
+ app, and retain selected project provenance plus authored inputs when running or
85
+ listing trail examples. Preserve completed `--app` selection and typed
86
+ `--root-dir` boundaries throughout dynamic completion, encode shell tokens
87
+ through the internal variadic input without losing flags, spaces, or empty
88
+ values. While an app value is still being completed, preserve its typed root
89
+ but defer app-local module selection until the app is complete. Validate
90
+ Config-owned identity on the same fresh Survey lease that derives live
91
+ Wayfinder responses. Record the executed app identity as `executedAppId` on
92
+ `run.examples` and `run.example` results so every listing and comparison names
93
+ the app that produced it, including standalone single-app runs.
94
+
95
+ Remove the superseded `buildWorkspaceTrailIndex()` package-workspace discovery
96
+ API now that no operator consumer uses it as identity.
97
+
98
+ Let Config-owning Warden consumers provide expected stable app bindings so topo
99
+ identity is validated before any safe source fixes run. Require every configured
100
+ app target to have committed app-local lock evidence before Warden claims the
101
+ workspace is current.
102
+ Expose deterministic per-app Warden drift evidence alongside the aggregate
103
+ workspace verdict.
104
+ Run the Warden artifact preflight for every topo-aware run that consumes saved
105
+ lock evidence, including `--fix` runs, and run that preflight before a fixing
106
+ run applies any safe source fix so invalid saved evidence can never rewrite
107
+ source first. Reject `wayfind diff` baselines whose recorded lock hash or
108
+ summary contradicts the embedded graph, including `--against-dir` directories.
109
+
110
+ - [`701ab85`](https://github.com/outfitter-dev/trails/commit/701ab85bd237e5fcf03725c56b70adb3612d6c15): Reuse fresh Regrade apply preflight evaluations without persisting cache state or weakening completion scans.
111
+ - [`a18a25d`](https://github.com/outfitter-dev/trails/commit/a18a25dfa4ca82e89efc1bd7c20c891c31386ea9): Update `trails warden` to use the shared `@ontrails/warden` command surface and final Sprint 1 flags.
112
+
113
+ The integrated CLI now projects `--ci`, `--pre-push`, `--depth`, `--fail-on`, `--strict`, `--format`, `--lock`, `--drafts`, `--apps`, `--no-lock-mutation`, and the local Warden aliases into the same runner used by the package `warden` bin. The old `lintOnly`, `driftOnly`, and `tier` inputs are replaced by `--depth` and `--lock` semantics.
114
+
115
+ - [`5adb995`](https://github.com/outfitter-dev/trails/commit/5adb99551c2dda6190d46cce7f60bb08d63c99aa): Complete the v1 hard cutover from the authored `blaze` field to
116
+ `implementation` across trail contracts, surface projections, tests, examples,
117
+ and public source-analysis helpers. Existing applications must rename authored
118
+ trail behavior fields and direct trail-object access before upgrading.
119
+ - [`88a6a62`](https://github.com/outfitter-dev/trails/commit/88a6a62a9e9e230ca6d368fa78dc3ece6c816204): Complete the v1 classification-first cutover from projection/project vocabulary
120
+ to derive/derived for contract-owned fact production and render/rendered for
121
+ surface presentation. Public type, helper, rule, relation, and report names move
122
+ without compatibility aliases; ordinary repository/project nouns remain
123
+ explicit preserves or structured review inventory.
124
+ - [`9f0842e`](https://github.com/outfitter-dev/trails/commit/9f0842ee9d7c7155d86a4fd023760ac0a5636f5d): Retire the temporary root vocabulary-cutover toolchain now that Regrade owns
125
+ structured migration plans, safe rewrites, classification, census, CLI/MCP
126
+ reports, and immutable history. Remove the obsolete source exemptions so
127
+ Oxlint and Warden enforce the durable transition contract directly, and add a
128
+ history-driven Regrade audit surface for current-tree regression checks.
129
+ - [`6712075`](https://github.com/outfitter-dev/trails/commit/67120754df3f614c7f4dd98be1fa0ba9d69b7765): Complete the v1 hard cutover from the `contour` domain-object declaration
130
+ vocabulary to `entity` across contracts, topo facts, store helpers, Warden,
131
+ Wayfinder, operator surfaces, examples, and generated locks. Existing
132
+ applications must rename contour APIs, run `trails dev reset --yes` to discard
133
+ pre-cutover local Topographer snapshots, and then recompile committed
134
+ `trails.lock` artifacts before upgrading. Those derived snapshots are
135
+ intentionally not read through a compatibility layer.
136
+ The entity-shaped wire contract advances `TopoGraph` and split lock manifests
137
+ from schema version 3 to 4; old split artifacts fail with regeneration guidance,
138
+ while the canonical root `trails.lock` remains schema version 5.
139
+ Wayfinder reports those stale rows as topo-store drift while keeping current
140
+ committed lock facts available for inspection.
141
+ - [`7c05376`](https://github.com/outfitter-dev/trails/commit/7c05376a4ee2a66ef477d8f165205bf2fbbdc37f): `trails compile` and `trails validate` now collect adapter overlay overlays from the app module's `trailsOverlays` export and embed the validated facts as `overlays.<namespace>` in `trails.lock`, threading the registrations through every derivation site so compiled and freshly derived graphs stay hash-identical.
142
+ - [`adf6419`](https://github.com/outfitter-dev/trails/commit/adf64191ea9e458d7405465ab6fa96ca72ab574c): Add `trails wayfind --overlay <namespace>`: a generic read of namespaced lock overlays (adapter-contributed facts) from saved artifacts, listing available namespaces on a miss — new fact families become inspectable with zero wayfinder edits.
143
+ - [`c83d0b6`](https://github.com/outfitter-dev/trails/commit/c83d0b67ac928af1b44c1f2d2c4b36aa09a24a70): Inventory parser-native source comments and TSDoc as exact review-only entries
144
+ for governed classified vocabulary transitions across CLI, MCP, and audit.
145
+ - [`93757ba`](https://github.com/outfitter-dev/trails/commit/93757ba102ae7ba8d9a7a6c17f119cda47d342a7): Expose ordered Regrade lifecycle phases and wall-clock timings across CLI and
146
+ MCP completion results, with concise human CLI progress isolated on stderr.
147
+ Keep topo-scoped JSON and JSONL environment selectors effective when the
148
+ operator does not explicitly choose an output mode.
149
+ - [`fb0ba0a`](https://github.com/outfitter-dev/trails/commit/fb0ba0ab706bbdce470123e9a6fb2ef9f1822806): Convert the eight committed governed Regrade histories to canonical v3 receipts and remove the temporary schema-v2 compatibility path after migration.
150
+ - [`9a8b6e4`](https://github.com/outfitter-dev/trails/commit/9a8b6e4af394c76c11e6d0007e0f5f94d0be2cb3): Persist Regrade lifecycle runs as canonical v3 receipts with exact Git blob evidence and authored field provenance, and validate their compact classified-form projection independently in Warden.
151
+ - [`1e168b1`](https://github.com/outfitter-dev/trails/commit/1e168b16caa5014f641fea37d028820211fb2ae1): Resolve one shared project context for `trails compile` and `trails validate`.
152
+ Configured workspaces now select apps through `--app` or app-root CWD, compile
153
+ exactly one app lock without root fanout, validate either one app or the complete
154
+ workspace, enforce configured topo-name binding and collection boundaries, and
155
+ return machine-readable selection and completeness provenance. Project-root
156
+ discovery can now be bounded to one working tree so linked and nested checkouts
157
+ do not borrow identity from a parent collection. Without Git metadata the
158
+ boundary walk continues to the outermost workspace declaration, so nested or
159
+ overlapping workspaces fail closed with a typed error naming both roots instead
160
+ of silently selecting the nearest one. Custom `--module` entries stay
161
+ relative to the selected standalone app root, and complete workspace validation
162
+ derives saved binding and freshness evidence once after validating each live app.
163
+ - [`3b5697a`](https://github.com/outfitter-dev/trails/commit/3b5697a90e09cd5173b61e2381356a46110d1cfb): Add the `run` trail family to `apps/trails` for direct trail invocation by ID. `trails run <id> '<inline-json>'` resolves the trail in the current app's topo and executes it through the shared `run()` pipeline from `@ontrails/core`, returning a typed direct-invocation envelope. `run.examples` lists authored examples and `run.example` executes one named example with an actual-vs-expected comparison. Single-app resolution only on this branch; multi-app workspace resolution plus `--app` override land in TRL-406. Not-found maps to `Result.err(NotFoundError)` and CLI exit code 2 via the existing error taxonomy. Self-hosted: the trail family authors happy-path and not-found examples, exercised by `testExamples(app)`.
164
+ - [`fbd42fc`](https://github.com/outfitter-dev/trails/commit/fbd42fcc249816bcee1b220bc4b555fda28c4d46): Unify structured CLI input around `--input <path|->` and `--input-json`.
165
+ `--input` reads JSON from a file path or from stdin when the value is `-`;
166
+ `--input-file`, `--stdin`, and the `structuredInputFieldByTrail` routing
167
+ option are removed. Structured payloads now merge directly into each trail's
168
+ typed input object, so `trails run` callers provide the inner trail payload
169
+ under the run trail's `input` field.
170
+ - [`63d1aef`](https://github.com/outfitter-dev/trails/commit/63d1aef4c320b9981e647f7e21a4061e4a368a88): Add `--quiet` / `-q` flag to strip the `inner-trail-result` envelope from `trails run` stdout. On success, stdout becomes the inner value JSON only (no `{ kind, trailId, value }` wrapper). Composes with `--json` / `--jsonl` (those control format; `--quiet` controls envelope vs unwrapped). Wired as a global CLI flag via `outputModePreset()` so all commands surface it; the run-trail-specific unwrap logic lives in `apps/trails/src/cli.ts` next to the existing collision-recovery wrapper.
171
+ - [`5a3c245`](https://github.com/outfitter-dev/trails/commit/5a3c245e765ad61248ae312ecc1bae7d04cd7d49): Add `run.example` for named example execution. It loads a named example, executes the inner trail with the example's input, and compares actual vs expected per the example's contract (`expected` deep-equal, `expectedMatch` partial-match, or `error` class match). Returns a structured `RunExampleComparison` envelope with input/expected/actual/match/diff. The CLI surface helper prints an OK summary on match (exit 0), or a diff and `ValidationError` on mismatch (exit 1). Unknown example names produce `NotFoundError` (exit 2) with the available examples listed.
172
+ - [`93e9d44`](https://github.com/outfitter-dev/trails/commit/93e9d441516a68217d35625cfc1acf49e55d2152): Add `run.examples` for listing a trail's examples without executing. The split run family gives examples listing its own typed input and structured `RunExamplesListing` output (`{ kind: 'examples-listing', trailId, examples }`) instead of adding an `--examples` mode flag to `run`. The CLI surface helper formats text-mode tables (name + truncated input + outcome) and unwraps to a JSON/JSONL array when `--json`/`--jsonl` is set. Trails with no examples emit `No examples defined` (text) or `[]` (JSON). Unknown trail IDs still surface `NotFoundError` (exit code 2).
173
+ - [`8f5bda0`](https://github.com/outfitter-dev/trails/commit/8f5bda0b25e09e76d14296cc93776f57db9ba58d): Wire workspace topo discovery into the `run` trail with collision UX. `run` accepts an optional `app?: string` input that auto-projects as `--app <name>` on the CLI. Resolution flow: `--app` provided → use it; else if the trail ID is unambiguous in the workspace index → use the single owning app; else if colliding → return `Result.err(AmbiguousError)` whose message names the candidates and suggests `--app`. The CLI surface adds a TTY-aware bridge (`tryRecoverFromRunCollision`) that prompts via clack when stdin is a TTY and the trail returned an `AmbiguousError`, then re-executes with the chosen app. Non-TTY contexts surface the error and exit with code 1. Trail logic stays surface-agnostic; TTY detection and prompts live in the CLI bridge.
174
+ - [`c8caa5e`](https://github.com/outfitter-dev/trails/commit/c8caa5ed7b08e2407a37296651a5c6c6e67c4ec8): Wire the `--trace` flag for the `trails run` family. Adds `tracePreset()` to `@ontrails/cli` (registered via the `presets` option) and threads `'trace'` through `META_FLAG_CANDIDATES` so the flag is treated as CLI metadata (never routed into trail input). On activation, `apps/trails/src/cli.ts` installs a per-invocation memory sink before `surface()` runs and finalizes it in a `finally` block: the post-execution tree (rendered via `renderTraceTree` from TRL-411) goes to stderr; the result still goes to stdout. With `--trace --json`, regular `trails run <id>` emits a single JSON envelope on stdout that includes `tracing: TraceRecord[]`; `trails run example <id> <exampleName>` keeps its comparison envelope, and `trails run examples <id>` remains a metadata read. `--quiet` keeps the tree on stderr and the unwrapped value on stdout, while `--jsonl` streams items as before. Sink registration is per-invocation so concurrent runs don't bleed records.
175
+ - [`f4b90c9`](https://github.com/outfitter-dev/trails/commit/f4b90c90524c33a774b97d93dd25819d2ef82ccc): Add `--watch` for the `trails run` family. File-system events are cheap wake-ups; the rerun gate compares the resolved trail's surface-map entry hash so edits only rerun when the public contract for the watched trail changes. New `watchPreset()` exposes the boolean flag; `'watch'` is added to `META_FLAG_CANDIDATES` so the flag never routes into trail input. The watch loop in `apps/trails/src/run-watch.ts` runs once, then sets up a debounced (`100ms`) `node:fs.watch` filtered to `.ts`/`.tsx`/`.js`/`.mjs`/`.cjs` extensions in the trail's source directory. SIGINT closes the watcher cleanly. A short startup warmup window (`150ms`) suppresses the macOS FSEvents replay event that would otherwise produce a phantom rerun on first invocation.
176
+ - [`2a2e072`](https://github.com/outfitter-dev/trails/commit/2a2e072425e0ddb3329a0944883b2865238f5465): Compose `--watch` with the split `run example` command and `--trace` cleanly. Moves the `--trace` session install/finalize bracket inside `runSurfaceOnce` so each watch rerun gets a fresh memory sink and stderr tree (previously the sink was process-scoped and accumulated records across reruns, suppressing the per-rerun tree until SIGINT). Adds integration tests covering the example-comparison rerun loop, trace-record freshness across reruns, and error recovery (a thrown rerun does not exit the watch loop). Documents the TDD-in-terminal workflow in the Direct Invocation ADR draft.
177
+ - [`85c39c4`](https://github.com/outfitter-dev/trails/commit/85c39c4d17446193e31860c7cef71708a127c27e): Add shell completion infrastructure and trail-ID completion. New `apps/trails/src/completions.ts` exposes `renderCompletionScript('bash' | 'zsh' | 'fish', binName)` and `renderTrailIdCompletions(workspaceRoot, prefix)` (reads the workspace topo via `buildWorkspaceTrailIndex`). Two new trails register on the topo: `completions` (returns the completion script for a chosen shell) and `completions.__complete` (the dynamic suggestion endpoint that the static script delegates to at tab-press time). Per-shell logic lives in a `Record<CompletionShell, ScriptRenderer>` lookup; the dynamic dispatch table is keyed by subcommand so TRL-416 (example-name completion) lands as a new entry.
178
+ - [`6f5bf81`](https://github.com/outfitter-dev/trails/commit/6f5bf81ebf666e37aa4b5f72021a04ab7d00c966): Add example-name completion to the dynamic suggestion endpoint. When the user tab-completes the example-name argument in `trails run example <trail-id> <prefix>`, the completion returns the named trail's `examples` array (filtered by prefix, sorted). New `renderTrailExampleCompletions(workspaceRoot, trailId, prefix)` helper resolves the trail's owning app via the workspace index, loads the topo with `tryLoadFreshAppLease`, and derives examples via `deriveStructuredTrailExamples`. Recoverable load/lookup failures return typed `RecoverableCompletionError` values from the helper and are suppressed to `[]` only at the internal `completions.__complete` shell boundary so tab completion stays quiet.
179
+ - [`3d4e921`](https://github.com/outfitter-dev/trails/commit/3d4e921765ddd4dcef1296cca54bf635996f00b6): Add `trails completions install [--shell bash|zsh|fish]` for installing the completion script to the standard per-shell location. This is a CLI bridge command, not a topo trail: it uses `renderCompletionScript`, auto-detects `$SHELL` when `--shell` is omitted, creates parent directories as needed, and writes to:
180
+
181
+ - bash → `~/.local/share/bash-completion/completions/trails`
182
+ - zsh → `~/.local/share/zsh/site-functions/_trails` (user must add to `$fpath` if not already)
183
+ - fish → `~/.config/fish/completions/trails.fish`
184
+
185
+ Output reports `{ shell, path, created, message }`. Idempotent — second run reports `created: false` and overwrites with the freshest script. Detection failure (missing/unsupported `$SHELL`) returns `Result.err(ValidationError)` with a message naming the supported shells. Test seam allows injecting `homeDir` and `shellEnv` so the trail never mutates global state.
186
+
187
+ - [`863d473`](https://github.com/outfitter-dev/trails/commit/863d4739982eb744e2f5c0419045bf8ed0df25a5): Add three attachment scopes for typed layers — trail, surface, topo — with composition order **topo → surface → trail → blaze**. `TrailSpec` and `Trail` gain `layers?: readonly Layer[]` (default `[]`). `topo()` accepts `{ layers: [...] }` as the third options argument; the topo carries those layers and they reach the executor via `ExecuteTrailOptions.topoLayers`. The CLI's `surface()`/`createProgram()`/`deriveCliCommands` already supports a `layers` option; that now flows through `runTrailOnce` as `surfaceLayers`. The executor builds the layer chain `[...topoLayers, ...surfaceLayers, ...trail.layers, ...options.layers]` so topo wraps surface wraps trail wraps blaze (verified by composition-order tests at every level). Survey's `TrailDetailReport` adds `composedLayers: { topo, surface, trail }` so agents can introspect the layer chain per trail. Backward-compatible: every new field is optional with a non-undefined default; existing call sites are unchanged.
188
+ - [`802fdfc`](https://github.com/outfitter-dev/trails/commit/802fdfc0360800404c83f2255c6ac7c6f67fee45): Rename Warden guide manifest rule grouping from `category` to `concern` so the
189
+ public JSON contract matches the source metadata field.
190
+ - [`1d53625`](https://github.com/outfitter-dev/trails/commit/1d536255fdcf1b7383c92c81dc33e40415bfce63): Teach `trails create` first-class standalone and configured-workspace layouts.
191
+ Workspace scaffolds author literal `workspace.apps` identity, keep generated
192
+ surfaces under `bin/`, report complete dry-run plans, and coach the normal
193
+ post-install compile flow to derive app-owned locks with deterministic scaffold
194
+ overlay provenance instead of writing workspace-root or `.trails` artifacts.
195
+ Published scaffold commands include the required narrow `project:write` permit.
196
+ Configured workspaces install the exact Trails operator at both the root and app
197
+ so root-owned commands remain local under isolated Bun linking.
198
+ Surface additions preserve an established legacy `src/` entry layout or
199
+ TypeScript scope before an entry exists, failing closed when neither supported
200
+ surface path participates, including through solution-style project references.
201
+ Canonical legacy lint scope participates in that placement decision, while CLI
202
+ addition preserves unrelated executable mappings in the app manifest.
203
+ The operator pins and guards the audited TypeScript runtime that owns this
204
+ prospective matching. Existing workspace app manifests reconcile missing
205
+ scaffold-owned tooling without replacing unrelated metadata, configured app
206
+ entries fail closed when they disagree with the scaffold-owned app module,
207
+ surface placement is preflighted before scaffold writes,
208
+ workspace hook configuration is written at the repository root, generated CLI
209
+ and MCP entries carry optional app-authored overlays into runtime derivation,
210
+ and rerun guidance names the same resolved surface paths the operation plan
211
+ writes. Reruns reconcile a previously generated lint script as the established
212
+ scope instead of a manifest conflict, while customized lint commands still fail
213
+ closed. Reruns likewise upgrade a recognized prior generated `@ontrails/*` pin
214
+ to the current release instead of conflicting on it, while customized ranges
215
+ still fail closed. The `create` trail declares dry-run capability so derived
216
+ surfaces expose `dryRunCapable` alongside the documented `--dry-run` flag.
217
+ - [`396136a`](https://github.com/outfitter-dev/trails/commit/396136a76fd0572a7837850f91537c270c8f17d9): Add the Trails operator MCP entrypoint with deferred surface facets and cold-context resources.
218
+ - [`b9a7d8a`](https://github.com/outfitter-dev/trails/commit/b9a7d8acdd3307c1a8dc6f03bcdb5674b49afe08): Add generated release PR policy automation with managed publish/channel/release
219
+ labels, stack-boundary source evidence, and inverse active-changeset release
220
+ fact validation.
221
+ - [`f6fdc62`](https://github.com/outfitter-dev/trails/commit/f6fdc62de1088f35a5615760261e11411a22a690): Add structured Warden remediation guidance to rule metadata, diagnostics, report output, and the `trails warden` result schema.
222
+ - [`a10ffa4`](https://github.com/outfitter-dev/trails/commit/a10ffa4efe655e0a6e800b362f8e7e3f5373e136): Add a Warden guide manifest projection and expose it through `trails warden guide` in markdown, agent-json, and manifest formats.
223
+ - [`bd1bd96`](https://github.com/outfitter-dev/trails/commit/bd1bd96b90cd8b55f73061e4078a14cd75bed745): Require committed Regrade provenance for governed vocabulary transitions.
224
+
225
+ Applied governed plans now expose deterministic transition, plan, source,
226
+ safe-apply, and review-follow-up evidence through history results. Warden loads
227
+ committed history into project context, cites it for reintroduced symbols, and
228
+ rejects invalid or missing provenance for transitions that require Regrade in
229
+ the workspace that owns the governed registry, without making downstream apps
230
+ prove the framework's own migrations.
231
+ Portable validation accepts the authoritative numeric file-rename counters
232
+ persisted by Regrade history.
233
+
234
+ - [`082408e`](https://github.com/outfitter-dev/trails/commit/082408e32c16fd737d8899fc8c8a51fa0f61b3d9): Warn when a configured workspace contains a nested `trails.lock` outside `workspace.apps`, and reject a workspace-root aggregate lock without deriving app identity from either artifact.
235
+
236
+ Make the Trails operator topo reproducible by keeping its authored examples free of temporary filesystem paths, so its committed app-owned lock validates deterministically.
237
+
238
+ Replay known operator current-app examples through the selected Config entry, including the nested project input in the authored `run` example, so custom app layouts do not fall back to `src/app.ts` without rewriting matching fields in domain examples.
239
+
240
+ Add `trails config explain` as the operator-owned inspection surface for source-static project and app identity. It reports the Config-authored catalog, selected extent, and selection provenance without loading app modules or reading locks.
241
+
242
+ **BREAKING:** Remove the public `@ontrails/config` `configExplain` trail export. Library consumers that inspect resolved deployment provenance must migrate to `deriveConfigProvenance`; operators and agents that inspect Config-authored app identity must migrate to `trails config explain`. The broader config cascade stays deferred.
243
+
244
+ ### Patch Changes
245
+
246
+ - [`4def007`](https://github.com/outfitter-dev/trails/commit/4def007a53c42881fba1d958a67f0c05f417e811): Move adapter source export scanning into adapter-kit and have `create.adapter`
247
+ consume the shared helper.
248
+ - [`73622ae`](https://github.com/outfitter-dev/trails/commit/73622aec93125756d589af3e056d252bdb91169e): Thread `ResourceSpec.config` through the built-in auth resource. Resource config schemas that accept `undefined` now receive their parsed default when config values are omitted, and `authResource` can materialize the no-op or JWT adapter from typed config while preserving existing mock and override paths.
249
+ - [`e41c382`](https://github.com/outfitter-dev/trails/commit/e41c3829c2d692683b78c730e67fd5b17ac0ff4e): Document beta-channel install guidance in package and adapter README install snippets so consumers use explicit `@beta` (or pinned `1.0.0-beta.N`) tags instead of accidental `latest` resolution during the prerelease line. Adds the policy doc at `docs/releases/beta-channel-policy.md`, prints both `latest` and `beta` dist-tags in `bun run publish:registry-check`, and aligns plugin/skill install snippets.
250
+ - [`14714b8`](https://github.com/outfitter-dev/trails/commit/14714b858cda5277193fa1138749339b304b284f): Add a beta.15 to beta.19 downstream migration guide (`docs/releases/beta15-to-beta19.md`) that ties together package install, CLI/MCP/HTTP surface decisions, public output schemas, contract testing, resource mocks / `unmockable`, error taxonomy, observability, Topographer artifact workflow, layer evolution, the `cross`→`compose` composition rename, trail-versioning runtime adoption, and adapter authoring. Linked from `docs/index.md` Release Notes and cross-references the focused migration guides under `docs/migration/`.
251
+ - [`a4ddf4d`](https://github.com/outfitter-dev/trails/commit/a4ddf4d9726fe581ef54ad26c68438088a6fa417): Prepare the Trails CLI for beta.15 release publishing: derive the CLI version from package metadata, scaffold publishable package ranges, add HTTP surface generation, include the scaffold toolchain dependencies, and avoid generating unsupported Warden flags.
252
+ - [`41276d2`](https://github.com/outfitter-dev/trails/commit/41276d2d5718cdece4d77bea28b7bf9f196912cd): Expose a shipped surface projection inventory through survey output and trail detail reports.
253
+ - [`04a6057`](https://github.com/outfitter-dev/trails/commit/04a6057502281fb81d1eb77df140d07181bfdd07): Clean generated release output by suppressing internal dependency cascade noise in package changelogs and rendering generated release PR and GitHub Release notes from the same Highlights, Changes, and Package Versions summary.
254
+ - [`f42ca6e`](https://github.com/outfitter-dev/trails/commit/f42ca6e40b29155acec446e5bf44e52e014466bd): Hard cutover: the CLI consumes `cli` bindings from the app-authored surfaces overlay. Scalar bindings behave identically to the removed cliAliases (parity-tested) — the binding name splits on `.` into a transparent synonym command path for exactly one trail. List bindings arrive as command groups: each expanded member trail gets a group-prefixed route that dispatches the member trail with its identity preserved, and a singleton list stays a group. Expansion is fail-fast boundary validation: a scalar binding resolving to zero or multiple trails, or a group with an empty member union, is a `ValidationError` naming the binding. `DeriveTopoGraphOptions.cliAliases`, the `cliAliases`/`trailsCliAliases` app-module export convention, and the per-kind compile lift are deleted; `deriveCliCommands`/`createProgram` take `overlays` instead of `aliases`, and both topo-graph derivation pipelines expand the same bindings through one shared helper so runtime CLI routes and lock routes come from one semantic. A leftover legacy export is now a Warden error (`no-legacy-cli-alias-export`) naming the `surfaceOverlay({ cli: { ... } })` rewrite.
255
+
256
+ This is a breaking API removal shipped under the lockstep beta patch convention (pre-1.0 hard-cutover posture, zero external adoption); the removed options have no deprecation window by design.
257
+
258
+ - [`25f3c5c`](https://github.com/outfitter-dev/trails/commit/25f3c5ca3e4e7d5ec105f06384111a2ec37c7b72): Add the dedicated `@ontrails/commander` adapter package and move the Commander runtime out of the `@ontrails/cli/commander` subpath. Extend the repo-local package-source guardrails to cover adapter package source as the Commander runtime moves under `adapters/`.
259
+ - [`f20cb51`](https://github.com/outfitter-dev/trails/commit/f20cb518b0e12c6491c959d14e19af8b2011b820): Update generated CLI scaffolds and current-facing docs to use the dedicated `@ontrails/commander` adapter package.
260
+ - [`f3c4fef`](https://github.com/outfitter-dev/trails/commit/f3c4fef87617461a20b641d60f359dab3c625ca8): Export a shared `escapeRegExp` helper from core and migrate first-party callers off local copies.
261
+ - [`cb0a9d8`](https://github.com/outfitter-dev/trails/commit/cb0a9d8fe294494fb3e026d1f066ab5281b3557c): Export shared workspace package discovery helpers from core and migrate first-party discovery callers.
262
+ - [`91328d3`](https://github.com/outfitter-dev/trails/commit/91328d340bd04a8a7aeec560151fc2594dd7408f): Make `trails create` reruns reconcile existing scaffold files instead of overwriting present files and then failing on existing surfaces.
263
+ - [`6471b73`](https://github.com/outfitter-dev/trails/commit/6471b733890917adfc969742c3b94a4e1ae468e9): Preserve the original `create.scaffold` Result boundary when `trails create` cannot scaffold a project.
264
+ - [`578731d`](https://github.com/outfitter-dev/trails/commit/578731d36aab7311b5dace6dddaca60894935a96): `trails doctor` now returns the underlying validation error when the app topo is invalid, instead of crashing with a redacted "Internal server error". The diagnostic command reports the diagnosis: validation failures surface with their category, message, and (with the commander detail rendering) the issue list.
265
+ - [`bafde1f`](https://github.com/outfitter-dev/trails/commit/bafde1fc8172abb8d8617f69a3c7a70667626d10): Fresh derivations now collect app-module overlays through the shared channel compile uses. `@ontrails/adapter-kit` exports `resolveTrailsOverlays()`, the one reader of an app module's `trailsOverlays` export; the compile-path fresh app lease and Warden's fresh topo loading both go through it, making per-namespace drift asymmetry structurally impossible. Warden drift checks (`checkDrift` now accepts derive options carrying overlays) and the topo-aware rule context graph derive with the same overlays the committed lock embeds, so rules like `surface-overlay-coherence` fire on standard runs. Stale drift results name the drifted overlay namespaces (`DriftResult.driftedOverlayNamespaces`) and point at `trails compile` as the remediation.
266
+ - [`51aac45`](https://github.com/outfitter-dev/trails/commit/51aac45a2863424bc14eae11688ebd3990ba1948): Add `entity.list` and `entity.delete` trails to the generated entity starter so fresh scaffolds model complete CRUD coverage.
267
+ - [`20d7a5c`](https://github.com/outfitter-dev/trails/commit/20d7a5c8e675fd3ecd8c29441bbd8a99b5c64ed0): Enforce the shared safe error projection policy for public error bodies, diagnostics, serialized payloads, and CLI stderr.
268
+ - [`b077fb7`](https://github.com/outfitter-dev/trails/commit/b077fb7ba6d9724cac6f0e59bc3fec9aec28984c): Add the export-restructure Regrade class family (TRL-1210). `export-restructure:cli-aliases` inverts legacy `cliAliases`/`trailsCliAliases` exports into `surfaceOverlay({ cli })` bindings inside the module's `trailsOverlays` export — adding the `@ontrails/core` import, deleting the legacy export, and routing anything it cannot prove safe (computed keys, spreads, in-module `aliases:` references) to `needs-review` with the exact target shape named. `export-restructure:mcp-trailheads` projects call-site MCP trailhead maps into `surfaceOverlay({ mcp })` group bindings: it rewrites in place when the same module exports `trailsOverlays`, and otherwise emits a classified `needs-review` handoff naming the module-overlay target while the call-site map stays as the richer-metadata override-in-context. Warden's fix-class union grows to `'export-restructure' | 'term-rewrite'`, `no-legacy-cli-alias-export` now advertises the `export-restructure` class, and `loadWardenRegradeClasses` supersedes `loadWardenTermRewriteClasses` (still exported) as the full Warden-routed class loader. Class-mode Regrade also gains the full plan lifecycle: `trails regrade plan --type class --class-ids ...` writes a `.trails/regrade/<slug>.json` plan carrying class ids, scope, and intent, `regrade check` re-runs the dry run and gates on outstanding rewrites or review, and `regrade apply` applies and graduates the plan to `.trails/regrade/history/<slug>-<hash>.json` — the same plan → check → apply → history evidence trail vocabulary regrades already had, now available to structural transforms. The class family ships for downstream apps bridging the pre-1.0 gap, so pre-cutover alias exports and trailhead maps migrate mechanically instead of by hand.
269
+ - [`533f1f9`](https://github.com/outfitter-dev/trails/commit/533f1f9318e7e81feba7ff52096472598577c723): Render concrete release versions in Homebrew formula URLs without a redundant explicit version declaration.
270
+ - [`7065b55`](https://github.com/outfitter-dev/trails/commit/7065b55568dced6df9f8687288842cdbbfd7f6e4): Fix two blocking bugs from real-world migration:
271
+
272
+ - Published packages now resolve correctly (workspace:^ instead of workspace:\*)
273
+ - Error forwarding works across different success types (Err no longer carries phantom T)
274
+
275
+ - [`42a87c1`](https://github.com/outfitter-dev/trails/commit/42a87c1b8691c2fad94ba45175b6eec0219f4594): Fix workspace dependency resolution in published packages. Now using bun publish
276
+ which correctly replaces workspace:^ with actual version numbers.
277
+ - [`e898cc4`](https://github.com/outfitter-dev/trails/commit/e898cc4042ffa66f977b425a98419ee77183f27d): Add repo-level Knip dead-code detection and remove stale internal exports and unused package dependencies surfaced by the new check.
278
+ - [`81373bc`](https://github.com/outfitter-dev/trails/commit/81373bc5e980bb06d56fb06af4f0986f72e318c7): Wave-2 MCP cutover to the app-authored `surfaces` overlay. The overlay's `mcp` bindings are now the authored, lockable default for the MCP surface: a list binding derives one grouped trailhead tool (member selection in `{ trail, input }`, member identity preserved in `{ trail, output }`, deterministic derived description), and a scalar binding derives an additional tool synonym whose MCP-safe name is published verbatim and must expand to exactly one trail. `deriveMcpTools`/`createServer` accept the new `overlays` option; `@ontrails/core` gains `expandMcpSurfaceBindings` and `deriveMcpTrailheadDescription`.
279
+
280
+ The call-site `CreateServerOptions.trailheads` map survives as permanent override-in-context design, not a compatibility bridge: when both channels are present, the call-site map wins at runtime. Warden's new `trailhead-override-divergence` rule (warn) names both sides when a call-site map's binding names or member selectors diverge from the authored overlay default.
281
+
282
+ Topographer now derives `graph.trailheads` from the overlay's `mcp` list bindings in both `deriveTopoGraph` and the store-side graph build, so trailhead facts flow from compiled locks into Wayfinder reads for the first time. The never-wired `DeriveTopoGraphOptions.trailheads` option and the `TopoGraphTrailheadDeclaration`/`TopoGraphTrailheadTrailSelector` types are removed — a beta-window hard cutover of an option no caller could reach; author the equivalent `mcp` list binding in `surfaceOverlay({ mcp })` instead.
283
+
284
+ - [`52425c5`](https://github.com/outfitter-dev/trails/commit/52425c515a09a166dd4af0a695cd9676a2c6e818): Consolidate registry verdicts behind one shared `packageRegistry` classifier.
285
+
286
+ `apps/trails/src/release` now derives every package's registry state — `complete`, `needs-publish`, `first-time-package`, `needs-tag-repair`, `tag-points-ahead`, `registry-inaccessible` — from a single `classifyPackageRegistryState` function, fed by an exact-version probe (`npm view <name>@<version>`). The release policy engine and the registry preflight both consume it, so their verdicts can no longer drift, and the missing "is the target version actually published" fact is now first-class.
287
+
288
+ The preflight check is phase-aware: `publish:registry-check` (ready) treats an unpublished target or a behind dist-tag as expected pre-publish work rather than a failure, while `publish:registry-check:published` still requires every package to be fully published and tagged. This fixes the confusing failure seen when the repo is several releases ahead of the published `beta` tag. Exact-version probes run with bounded concurrency so release checks stay responsive. No publish or dist-tag mutation is performed.
289
+
290
+ - [`200bece`](https://github.com/outfitter-dev/trails/commit/200bece897d79af9029492d7cbbe400cf9e4d25c): BREAKING: rename auth connector vocabulary to adapter.
291
+
292
+ This stays on the current `1.0.0-beta` prerelease line: the package is part of
293
+ the fixed `@ontrails/*` beta group, so beta-breaking API renames advance the
294
+ next beta rather than opening a stable-major release line.
295
+
296
+ - `AuthConnector` -> `AuthAdapter`
297
+ - `authConnectorSchema` -> `authAdapterSchema`
298
+ - `JwtConnectorOptions` -> `JwtAdapterOptions`
299
+ - `createJwtConnector` -> `createJwtAdapter`
300
+ - auth resource config discriminant `{ connector: 'jwt' | 'none' }` -> `{ adapter: 'jwt' | 'none' }`
301
+
302
+ The `@ontrails/permits/jwt` subpath is unchanged. The internal `connectors/`
303
+ source directory becomes `adapters/`. See
304
+ `docs/migration/connector-to-adapter.md` for the full rename map.
305
+
306
+ The Trails CLI package updates its generated auth-resource configuration to use
307
+ the new `adapter` discriminant.
308
+
309
+ - [`3395234`](https://github.com/outfitter-dev/trails/commit/33952349f2d475b170376a63587c89e50be3247a): Move store adapter-binding helpers to `@ontrails/store/adapter-support` and topographer direct database/admin helpers to `@ontrails/topographer/backend-support`, keeping root exports focused on contract-level APIs.
310
+ - [`5510807`](https://github.com/outfitter-dev/trails/commit/55108073ced79ed6402b665474ba665d1529d2ff): Treat npm `ETARGET` exact-version probes as unpublished target versions during registry readiness checks.
311
+ - [`19406e0`](https://github.com/outfitter-dev/trails/commit/19406e06f825c5ba4460b153eaf2ade721a749d7): Classify unauthenticated scoped-package dist-tag fallbacks as first publications after npm has already reported the package missing, and preserve registry probe details in release-policy blockers.
312
+ - [`b0ff8b9`](https://github.com/outfitter-dev/trails/commit/b0ff8b997bf75d1425b76746e2d5375cba273258): Teach the registry preflight to verify first-time package publishes when npm's package summary lags behind dist-tags and tarball availability.
313
+ - [`e2f3d23`](https://github.com/outfitter-dev/trails/commit/e2f3d23b26dddf7daa2024bf8d297471f317cd59): Default Regrade reports to actionable entries, add skip counts grouped by
314
+ reason, and expose an `includeEntries` option for full report inventories.
315
+ - [`d8a2e7a`](https://github.com/outfitter-dev/trails/commit/d8a2e7a3e89ac06c1f594ef845ea18acaf58ea64): Preserve governed conversion provenance when Regrade appends a run to an existing v3 receipt.
316
+ - [`9be2b7e`](https://github.com/outfitter-dev/trails/commit/9be2b7e9b4f054d10c26e68ff71aea30d2713738): Load project-local Warden term-rewrite rules from the Regrade root so repo-owned
317
+ migration classes can run through `trails regrade`.
318
+ - [`47f782c`](https://github.com/outfitter-dev/trails/commit/47f782cd6142f9359551490ead24e15b38f8ef76): Add occurrence-level vocabulary regrade reports with plan, ledger,
319
+ and completion-gate facts. The Trails `regrade` operator command now supports
320
+ positional `<from> <to>` regrade runs and exposes the same capability through
321
+ the curated MCP surface.
322
+ - [`0c40138`](https://github.com/outfitter-dev/trails/commit/0c40138efb962e779710daa172bdfd756d9d992f): Harden vocabulary regrades by deferring Markdown code contexts for review and
323
+ exposing structured preserve rules through the Trails `regrade` command.
324
+ - [`ee9f3ae`](https://github.com/outfitter-dev/trails/commit/ee9f3ae0c1f42e371bae6568c00bbdfccb4da677): Let Warden fix capabilities declare downstream scan targets and have Regrade
325
+ honor those targets for Warden-backed term-rewrite classes.
326
+
327
+ Dogfood the first safe facet-to-trailhead prose rewrite through project-local
328
+ Warden rules and Regrade.
329
+
330
+ - [`40cd7b4`](https://github.com/outfitter-dev/trails/commit/40cd7b4018db67351d418adee536cfe806ac712a): Add a release-pack coherence guard that runs packed package validation for generated release branches and package release metadata changes.
331
+ - [`7cca56b`](https://github.com/outfitter-dev/trails/commit/7cca56bdf3802826f2d4d338ee490d261cb8e52b): Keep ordinary source pull request labels out of generated release policy by requiring the canonical `changeset-release/main` head route during release PR discovery.
332
+ - [`9d679cf`](https://github.com/outfitter-dev/trails/commit/9d679cff5a5899ba45182fff849d7fbef30ca9cf): Make generated release publish policy gather CI proof only for `publish:auto`, reuse generated release PR head proof when it matches the released tree, tolerate duplicate pending checks after a required check has passed, and log registry readiness separately from publish authorization.
333
+ - [`32dc2f3`](https://github.com/outfitter-dev/trails/commit/32dc2f34706bf0f729a6f9187dd31ac2e53567b9): Let generated release PR labeling treat trusted Graphite merge-queue proof with green required CI as source stack evidence for `publish:auto`, alongside explicit `stack:boundary` labels.
334
+ - [`d40430d`](https://github.com/outfitter-dev/trails/commit/d40430d65f2169178e27147bf120296df67fe418): Remove the retired `@ontrails/logging` workspace from the prerelease package set. Use `@ontrails/observe` for log and trace sink contracts and `@ontrails/observe/logtape` for LogTape forwarding.
335
+ - [`742387e`](https://github.com/outfitter-dev/trails/commit/742387ea27e1f9fb9490147b871ae8c5a59903ae): Allow release checks to recognize changeset edits that only remove release rows
336
+ for packages absent from the live workspace while rejecting any additional
337
+ changes hidden beside that cleanup.
338
+ - [`5efa32c`](https://github.com/outfitter-dev/trails/commit/5efa32c7768b9641b0144044b50096a0f6d67261): Generate project-level `AGENTS.md` and `CLAUDE.md` guidance so new Trails apps
339
+ start with canonical agent instructions.
340
+ - [`c5258ea`](https://github.com/outfitter-dev/trails/commit/c5258ea72b4ade6e3651d34ef6f0d367a5cf42aa): Fix the scaffolded AGENTS.md layer guidance to say "cross-cutting trail wrapping" — the cross→compose vocabulary cutover had renamed the standard English collocation, so every generated app shipped the nonsense phrase "compose-cutting".
341
+ - [`88c0316`](https://github.com/outfitter-dev/trails/commit/88c0316357c980bf398b7a03d6770d161f3f9522): Generate a contextual `README.md` for new Trails projects with first-run
342
+ commands, selected surfaces, starter notes, and agent guidance pointers.
343
+ - [`99154d4`](https://github.com/outfitter-dev/trails/commit/99154d4d5889cc016c61f63c21410b73aff86a5b): Generate `tsconfig.tests.json` in new Trails projects so root test files are
344
+ covered by editor TypeScript tooling without changing build output.
345
+ - [`8a1a176`](https://github.com/outfitter-dev/trails/commit/8a1a1768b5508db338813ac4595e95c82fb9ec8a): Reject workspace scaffolds nested beneath an existing configured Trails
346
+ workspace before creating target files while allowing child workspaces beneath
347
+ ancestor standalone Config. Workspace reruns also reject preserved app entries
348
+ whose runtime-selected topo ID is statically proven to conflict with the
349
+ configured app ID; dynamic, indirect, and post-construction mutation forms
350
+ continue to defer binding validation to runtime commands.
351
+ - [`851a2a3`](https://github.com/outfitter-dev/trails/commit/851a2a3cb805993d16ef74d43d3c963f286cce15): Derive trail caller and blaze input types from the authored input schema while keeping one public input contract.
352
+ - [`00f7093`](https://github.com/outfitter-dev/trails/commit/00f7093132a50c49b7bc2dcf9eef98f9424fd2e0): Add resources as a first-class primitive.
353
+
354
+ Resources make infrastructure dependencies declarative, injectable, and governable. Define a resource with `resource()`, declare it on a trail with `resources: [db]`, and access it with `db.from(ctx)` or `ctx.resource()`.
355
+
356
+ **Core:** `resource()` factory, `ResourceSpec<T>`, `ResourceContext`, singleton resolution in `executeTrail`, in-flight creation dedup, `isResource` guard, `findDuplicateResourceId`, topo resource discovery and validation, `resources` field on trail specs.
357
+
358
+ **Testing:** Auto-resolution of `mock` factories in `testAll`, `testExamples`, `testContracts`, and `testCrosses`. Explicit `resources` overrides with correct precedence (`explicit > ctx.extensions > auto-mock`). Resource mock propagation through cross graphs.
359
+
360
+ **Warden:** `resource-declarations` rule validates `db.from(ctx)` and `ctx.resource()` usage matches declared `resources: [...]`. `resource-exists` rule validates declared resource IDs resolve in project context. Scope-aware AST walking skips nested function boundaries.
361
+
362
+ **Surfaces:** Resource overrides thread through the CLI, MCP, and HTTP surfaces.
363
+
364
+ **Introspection:** Survey and surface map outputs include resource graph. Topo exposes `.resources`, `.getResource()`, `.hasResource()`, `.listResources()`, `.resourceIds()`, `.resourceCount`.
365
+
366
+ **Docs:** ADR-009 accepted. Unified resource guide, updated vocabulary, getting-started, architecture, and package READMEs.
367
+
368
+ - [`78575d5`](https://github.com/outfitter-dev/trails/commit/78575d5193242053b4dc1f4fa6150b94bacaff44): Discover owner-package subpath adapter subjects in shared adapter checks and
369
+ enable `trails create adapter --placement subpath` to generate immediately
370
+ checkable owner subpaths.
371
+ - [`a4727ec`](https://github.com/outfitter-dev/trails/commit/a4727ec0923cd37f87fd75d3f8c37cf3424ecef4): Sync Bun lockfile workspace metadata during package versioning so generated release PRs cannot carry stale first-party package versions.
372
+ - [`492f71c`](https://github.com/outfitter-dev/trails/commit/492f71c27c903e1fcd86c9a8a46ced2e8cee0ef1): Move CLI, MCP, HTTP, established-surface, and surface-parity helpers behind explicit subpaths so root contract testing imports no longer require optional surface peers. The Trails CLI scaffolder now emits `import { testAllEstablished } from '@ontrails/testing/established'` for generated verification.
373
+ - [`331e3a9`](https://github.com/outfitter-dev/trails/commit/331e3a90e2094ca3f10a206e6bbbe379301283b2): Relocate the topo-store public API from `@ontrails/core` to `@ontrails/topographer` per ADR-0042. Generic `trails-db` helpers (`openReadTrailsDb`, `openWriteTrailsDb`, `ensureSubsystemSchema`, `deriveTrailsDbPath`, `deriveTrailsDir`) stay in core because tracing and other subsystems share them.
374
+
375
+ Breaking pre-1.0 beta change. Update consumer imports:
376
+
377
+ ```diff
378
+ - import { topoStore, createTopoStore, createMockTopoStore, createTopoSnapshot, listTopoSnapshots, pinTopoSnapshot, unpinTopoSnapshot, createStoredTopoSnapshot, getStoredTopoExport, countTopoSnapshots, countPinnedSnapshots, countPrunableSnapshots, pruneUnpinnedSnapshots } from '@ontrails/core';
379
+ + import { topoStore, createTopoStore, createMockTopoStore, createTopoSnapshot, listTopoSnapshots, pinTopoSnapshot, unpinTopoSnapshot } from '@ontrails/topographer';
380
+ + import { createStoredTopoSnapshot, getStoredTopoExport, countTopoSnapshots, countPinnedSnapshots, countPrunableSnapshots, pruneUnpinnedSnapshots } from '@ontrails/topographer/backend-support';
381
+ ```
382
+
383
+ The same root move applies to types `ReadOnlyTopoStore`, `MockTopoStoreSeed`, `TopoSnapshot`, `TopoStoreRef`, `TopoStoreExportRecord`, `TopoStoreResourceRecord`, `TopoStoreTrailRecord`, `TopoStoreTrailDetailRecord`, `CreateTopoSnapshotInput`, and `ListTopoSnapshotsOptions`. The direct DB helper type `StoredTopoExport` moves to `@ontrails/topographer/backend-support`.
384
+
385
+ Core newly exports `activationSourceKey`, `projectActivationSourceDeclaration`, `activationSourceDeclarationSignature`, and the `ActivationSourceProjection` type — these were already used internally and are now part of the public surface so `@ontrails/topographer` (the only consumer that needs them) can import them through normal package channels.
386
+
387
+ - [`8db145e`](https://github.com/outfitter-dev/trails/commit/8db145eeda955e55d000e52eb79a84cff755a9f8): Move activation report derivation into Topographer and keep the Trails app
388
+ consuming the owner-held activation facts through a compatibility re-export.
389
+ - [`4bc8a99`](https://github.com/outfitter-dev/trails/commit/4bc8a9933c03a30d34a97530b712aecc183f5889): Clarify the Topographer artifact workflow around top-level `trails compile`, `trails validate`, and `trails diff` commands, including explicit diagnostics for retired `trails topo compile`, `trails topo verify`, and `trails topo check` attempts.
390
+ - [`4399fdb`](https://github.com/outfitter-dev/trails/commit/4399fdb21782ec877e36fcd76b37fa5f439aaf29): Renamed `@ontrails/schema` to `@ontrails/topographer`. Mechanical rename only — no API changes. Update import sites from `@ontrails/schema` to `@ontrails/topographer`. See ADR-0042 for the durable graph substrate doctrine.
391
+ - [`16cb740`](https://github.com/outfitter-dev/trails/commit/16cb74032ecea582161743d1d30647489772c0f1): Run examples and contract checks across live trail version entries, and project version-entry example coverage into topo and survey reports.
392
+ - [`dbd17db`](https://github.com/outfitter-dev/trails/commit/dbd17dbedff75ad58df2fa10875a436be2140888): Remove the unused legacy `@ontrails/logging` dependency from the Trails CLI app package.
393
+ - [`92e709b`](https://github.com/outfitter-dev/trails/commit/92e709bfaa4593ad46722bc9693adab510cf9ace): Declare explicit permit scopes on mutating built-in CLI trails and scaffolded entity starter trails.
394
+
395
+ Preserve the resolved CLI permit on result callbacks so run-collision recovery can re-execute protected trails without losing authorization context.
396
+
397
+ - [`1f48342`](https://github.com/outfitter-dev/trails/commit/1f48342ae63e8332850fc0cbbafac29a31d41107): Preserve original Result error boundaries in CLI trails by returning existing Result failures directly instead of re-wrapping their errors.
398
+ - [`c14aa3a`](https://github.com/outfitter-dev/trails/commit/c14aa3aea8471236172dfad151629db60bed68f2): Report structured entry and graph force audit details from `trails doctor`.
399
+ - [`2df73cc`](https://github.com/outfitter-dev/trails/commit/2df73cc30ecb9dcd12bca5160cc8ae1416224373): Configure scaffolded Trails projects to allow `TODO :::` fieldwork markers while keeping standard `TODO:` warning comments blocked.
400
+ - [`d89a889`](https://github.com/outfitter-dev/trails/commit/d89a8893d6bc9e9f3a440fe5102069457f1c1630): Project selected Wayfinder graph-read trails into the Trails operator MCP surface alongside clearer first-class operator tools.
401
+ - [`b991263`](https://github.com/outfitter-dev/trails/commit/b991263e1cdef34b4787e690cc0187c1e8b07ef9): Retire the package-owned `regrade.downstream.report` trail wrapper so the Trails operator app owns the public Regrade surface while `@ontrails/regrade` exposes the reusable engine APIs and report schema.
402
+ - [`c75c6cc`](https://github.com/outfitter-dev/trails/commit/c75c6cc7eb2540f86827fab83d3940fb6702f344): Collapse the duplicate `diff` trail into the canonical `survey.diff` contract while keeping `trails diff` available as a CLI route alias.
403
+ - [`7b7cd6a`](https://github.com/outfitter-dev/trails/commit/7b7cd6a5ddadba3d0bfeee4a0e111320026ea962): Centralize the Trails operator root-directory and fresh-app lease preamble so topo-reading commands share the same load/release flow.
404
+ - [`c36aca9`](https://github.com/outfitter-dev/trails/commit/c36aca978c7e1561e68701c084241e5b3f85dcef): Preserve existing Result error boundaries directly and widen Warden pass-through
405
+ coaching beyond trail blazes.
406
+ - [`1307568`](https://github.com/outfitter-dev/trails/commit/13075680e1c77c0a3abee36aaecce8cecad2f347): Centralize Trails config module path conventions, move local config overrides to root `trails.config.local.*`, scaffold the matching gitignore entries, and load project-local Warden rules from `.trails/rules.ts` or `.trails/rules/`.
407
+ - [`768cc79`](https://github.com/outfitter-dev/trails/commit/768cc79ca10947b8808b376e281e1a81131b4acc): Close missed projection vocabulary residue in Regrade internals and public
408
+ error-rendering guidance, and keep lifecycle-ambiguous governed identifiers in
409
+ the Warden review inventory instead of assigning them an unsafe automatic
410
+ target.
411
+ - [`18a14e2`](https://github.com/outfitter-dev/trails/commit/18a14e220728be7108f3fe2864455c52305aef9f): Finish the v1 vocabulary reset cleanup by retaining the facet guard, adding a
412
+ durable TopoGraph artifact-family guard, teaching the live lexicon directly in
413
+ agent guidance, and replacing completed reset-family placeholders in public
414
+ Regrade examples and CLI schema help.
415
+ - [`0fe873a`](https://github.com/outfitter-dev/trails/commit/0fe873a55eed2fc4e4d4242c070b65695627a01f): Normalize generated project guidance and scaffold ignores around the root `trails.lock` and committed `.trails/` control model.
416
+ - [`c1bc0d3`](https://github.com/outfitter-dev/trails/commit/c1bc0d390fb059cee40d34e4eacf861eb9cc5877): Add the `wayfind.outline` source-navigation trail and expose it through the Trails CLI and MCP surfaces.
417
+ - [`0d213b1`](https://github.com/outfitter-dev/trails/commit/0d213b13b0193c6997d99965516a960323d31f27): Enrich compact `wayfind outline --review` text with existing trail intent, schema, and example-count facts when saved graph artifacts are available.
418
+ - [`dbf4ff4`](https://github.com/outfitter-dev/trails/commit/dbf4ff4a73255e65e55e734b6796b6fcf7f4a07a): Emit structured CLI error envelopes for JSON/JSONL command failures and map compile-time Trails DB lock contention to a retryable timeout instead of a generic internal error.
419
+ - [`8e1c2ff`](https://github.com/outfitter-dev/trails/commit/8e1c2ff05ac0759a4a13b8106ec881a9b63732b4): Wire adapter and error fact selection into the unified `trails wayfind` command.
420
+ - [`da39b89`](https://github.com/outfitter-dev/trails/commit/da39b8980545a7911049d1a0366285c001ce39a7): Add the unified `trails wayfind` navigation command over targets, filters, and
421
+ views, and remove the old `wayfind find` search alias during the v1 Wayfinder
422
+ surface cutover.
423
+ - [`2059666`](https://github.com/outfitter-dev/trails/commit/2059666a81edca3f29cd885799dc26f2b73d7bdc): Add relational `trails wayfind` flags for downstream, upstream, and nearby graph navigation.
424
+ - [`2c08afe`](https://github.com/outfitter-dev/trails/commit/2c08afeec7f3c573e3cbc308c75a7ae53281c3c2): Expose MCP trail graph fact resources and enable them for the Trails operator MCP surface.
425
+ - [`4b538d1`](https://github.com/outfitter-dev/trails/commit/4b538d10ab03032f2873040cddcb70c5bb37a551): Start the `trails wayfind --source live` cutover by routing live overview and ID lookup through the fresh app survey path.
426
+ - [`dd98701`](https://github.com/outfitter-dev/trails/commit/dd98701815d51ace6f051dfb384a793caec3e7c3): Update CLI and agent guidance to teach the unified Wayfinder navigation surface and live-source bridge.
427
+ - [`f1e6efa`](https://github.com/outfitter-dev/trails/commit/f1e6efa4f383287f0b2196f48185699e7476b18c): Expand the Wayfinder dogfood smoke to exercise the unified navigation command shape.
428
+ - [`60fa8f5`](https://github.com/outfitter-dev/trails/commit/60fa8f5570bb9ad865bdb0bf0f3a24acb63a2cd6): Expose the saved graph diff as a distinct `wayfind diff` CLI command and MCP tool.
429
+ - [`a8e4dc3`](https://github.com/outfitter-dev/trails/commit/a8e4dc35cbc88a419dafa9082b31c51ae735526b): Clean up the Wayfinder navigation grammar before RC, including explicit pattern/query/file selectors, target-bound dependency and impact flags, drift-first provenance fields, stricter fires declaration diagnostics, and updated operator dogfood coverage.
430
+ - [`a528239`](https://github.com/outfitter-dev/trails/commit/a528239f52bc7f65328dd40c20a96afd73261b9b): Keep Wayfinder artifact drift aligned with rejected and force-annotated topo compiles.
431
+ - [`de79459`](https://github.com/outfitter-dev/trails/commit/de794590ed41ccdfab8ba674142206c7f5cc9e7c): Expand Wayfinder dogfood smoke coverage across demo graph facts, relation views, and artifact provenance failures.
432
+ - [`38cd9d6`](https://github.com/outfitter-dev/trails/commit/38cd9d63ad40ae45986f6bdb01109f383b3a19ab): Add a shared Trails config file loader that treats `trails.config.ts` as the natural primary while supporting JSON, JSONC, YAML, and TOML peer formats. Release and Warden config loading now consume the same loader and local overrides can be authored as data files.
433
+ - [`f8403c4`](https://github.com/outfitter-dev/trails/commit/f8403c4e3e2aabdef42c455b96c129344be5f590): Collapse normal topo compilation onto one root `trails.lock` envelope that embeds the TopoGraph, hash, and summary while keeping legacy `.trails/trails.lock` plus `.trails/topo.lock` readers for migration compatibility.
434
+ - [`371d19e`](https://github.com/outfitter-dev/trails/commit/371d19ea243507bfc7f85882373c40eb37476d52): Move the default `trails.db` location to the per-user Trails state store, expose deterministic state-store path helpers, stop scaffolding disposable `.trails/cache` and `.trails/state` directories, and update topo-store documentation for the global-state substrate.
435
+ - [`982a4d7`](https://github.com/outfitter-dev/trails/commit/982a4d7a85de9395967acd31004468c1a9baf3bf): Add Regrade path-scope exclusion globs for vocabulary runs and expose them
436
+ through the `trails regrade` CLI/MCP contract.
437
+ - [`1540233`](https://github.com/outfitter-dev/trails/commit/154023327e100e9ac40cab893791829ff29145ed): Add Regrade scan inventory summaries that group matched files by extension and
438
+ top-level path, with occurrence counts for vocabulary regrade reports.
439
+ - [`de878bd`](https://github.com/outfitter-dev/trails/commit/de878bd224ab73a7046187fc5e3da4691b71257f): Let Trails project config provide default Regrade vocabulary scope settings,
440
+ with explicit CLI or MCP plan inputs overriding those defaults.
441
+ - [`a0126d9`](https://github.com/outfitter-dev/trails/commit/a0126d901b57648a3415dc71d692c71f78f93bb6): Add Warden `scope.exclude` globs through project config and the Trails CLI
442
+ wrapper so governance runs can exclude local notes, scratch space, and generated
443
+ state without dropping durable skills or plugin assets from scope.
444
+ - [`a079073`](https://github.com/outfitter-dev/trails/commit/a07907356d276e8fa717b355362b9ec4a73809da): Rename Regrade path-scope scan controls from `ignore` to `exclude` across CLI, MCP, and project config.
445
+ - [`6a26a08`](https://github.com/outfitter-dev/trails/commit/6a26a088480fe0b8ac6988566d2b52d4a73d91f6): Rename Warden governance scope controls from jurisdiction ignore settings to `scope.exclude` across config, CLI, and Trails surfaces.
446
+ - [`8e2603c`](https://github.com/outfitter-dev/trails/commit/8e2603c3652c1fbec79c598bf3040dc95758e901): Rename read-only topo helper exports from `build*` to `derive*`.
447
+ - [`7a3a25f`](https://github.com/outfitter-dev/trails/commit/7a3a25fcf87bfe43f004fd0655cc56b832ad1534): Rename version lifecycle result paths from `file` to `filePath`.
448
+ - [`fe72b84`](https://github.com/outfitter-dev/trails/commit/fe72b84f88f4b18025f3d1b9463ca99238662d99): Fold remaining Regrade and Warden scan-target surfaces onto the shared path-scope vocabulary.
449
+ - [`7d65189`](https://github.com/outfitter-dev/trails/commit/7d65189cc33408755fe07a0b5679f1ed01123455): Expose derived live-API preserve inventory in vocabulary Regrade runs and have the Trails operator regrade surface derive current facet API preserves from live topo and MCP surface facts.
450
+ - [`6e63e48`](https://github.com/outfitter-dev/trails/commit/6e63e483617b84cb6868d0c4d58d5b5a8d3b9ed2): Complete the v1 grouped surface-entry vocabulary cutover from facet to trailhead, including Regrade dogfood support for governed string literal renames and composed AST rewrite application.
451
+ - [`04bb8a4`](https://github.com/outfitter-dev/trails/commit/04bb8a42af4ada51a74b1d8c83697db92035b5e9): Expose vocabulary Regrade occurrence dispositions and disposition summary counts alongside mechanical verdicts.
452
+
453
+ Accept explicit preserve-rule dispositions through the `trails regrade` CLI/MCP contract.
454
+
455
+ - [`d67558b`](https://github.com/outfitter-dev/trails/commit/d67558bea3bfa363ed57e0f4091b6eccbf2a7710): Run governed AST symbol renames from the registry-backed `trails regrade` command path, including MCP parity, while preserving derived live API forms.
456
+ - [`26786a1`](https://github.com/outfitter-dev/trails/commit/26786a14acbe9ed03f69adbdac22968891e33df1): Persist vocabulary Regrade plan artifacts, expose plan/check/preview/apply flows across CLI and MCP, and write applied plan history for reviewed vocabulary migrations.
457
+ - [`09f15de`](https://github.com/outfitter-dev/trails/commit/09f15def8fcc8c28b0d604f436e6eeed46da8f37): Stage wide-net Regrade expansion candidates as structured plan review inventory with evidence, status, and pending counts.
458
+ - [`a0517ef`](https://github.com/outfitter-dev/trails/commit/a0517efa01014754b1dc307169b21ae71a6e3620): Fresh app loading now resolves extensionless relative imports the way Bun does at runtime, so runtime-valid apps stay operator-loadable (`trails compile`, `trails warden`, and every other fresh-load path). When a relative import cannot be resolved at all, the failure is an actionable `ValidationError` naming the importer file and specifier instead of an opaque redacted "Internal server error".
459
+ - [`7f50fe2`](https://github.com/outfitter-dev/trails/commit/7f50fe2f9a8a93beff6c87c2e017c305a3555374): Add version lifecycle CLI trails for revising, deprecating, archiving, and diagnosing trail version entries.
460
+ - [`a89d469`](https://github.com/outfitter-dev/trails/commit/a89d4696aa78f3dda9394c14665ab3ea8c0f313c): Make `trails compile` → `trails validate` round-trip deterministically (TRL-1191). The per-user topo store no longer reuses previously stored JSON Schema bytes by zod definition hash — that hash cannot see `.describe()` metadata or object field order, so a warm store could serve pre-edit schema values into a freshly compiled lock and make `validate` report it stale immediately. Every snapshot now regenerates schema JSON from the live Zod schema, the store's graph hash goes through the same shared `deriveStableHash` path as `deriveTopoGraphHash`, and the committed `trails.lock` omits the wallclock `generatedAt` field so recompiling unchanged sources yields a byte-identical lock. `TopoGraph.generatedAt` is now optional; locks written by earlier versions still parse.
461
+ - [`a89d469`](https://github.com/outfitter-dev/trails/commit/a89d4696aa78f3dda9394c14665ab3ea8c0f313c): Make the per-user topo store an honest cache (TRL-1196). Every snapshot now records a content fingerprint of the app source set (`topo_snapshots.source_fingerprint`, store schema v14), `trails compile` reports it in its output, and Wayfinder artifact loading compares it against a freshly derived fingerprint — a mismatch surfaces as a `topo-store-source-fingerprint-mismatch` stale reason instead of silently serving pre-edit facts. Compile derives everything from live source on every run, so a poisoned or stale store can never reach `trails.lock`, with or without `--force`.
462
+ - [`a89d469`](https://github.com/outfitter-dev/trails/commit/a89d4696aa78f3dda9394c14665ab3ea8c0f313c): Add the lock round-trip invariant gate (TRL-1200): `trails release smoke --check lock-roundtrip` discovers every committed `trails.lock`, recompiles each against a cold per-user store in a temporary state home, and asserts `validate` is green and the recompiled lock is byte-identical to the committed one. Failure output names the diverging section and the `trails compile` command that fixes it — hand-editing a lock is never the remediation. Wired into `bun run check` and the CI Governance job via `bun run lock:roundtrip`.
463
+ - [`b1fbe57`](https://github.com/outfitter-dev/trails/commit/b1fbe574e6f44d1fecb5e3a000270955c0a77b7b): Publish Bun-validated package tarballs through an npm trusted-publishing adapter
464
+ binding, add exact repository metadata for each public workspace package, and
465
+ correct the native Bun release descriptor to its pack-only runtime boundary.
466
+ - [`35cbe28`](https://github.com/outfitter-dev/trails/commit/35cbe289db46539b3689dbf6cf8ab0e5d9a1b09c): Found `@ontrails/source` as the shared source-code AST kernel for parsing,
467
+ walking, locations, edits, literals, and generic Trails syntax recognition.
468
+ Warden, Regrade, Wayfinder, and the Trails operator now import those shared
469
+ mechanics from `@ontrails/source`; the legacy Warden AST route is removed by the
470
+ stacked hard cutover.
471
+ - [`113aed6`](https://github.com/outfitter-dev/trails/commit/113aed62d20041e35b0cf9d6c1b1a18df4b88f57): Rename the dependency-light observability owner from `@ontrails/observe` to
472
+ `@ontrails/observability` as a pre-v1 hard cut. Update dependent packages,
473
+ documentation, package discovery, and the governed Regrade route; no
474
+ compatibility package or old import route is retained.
475
+ - [`0938e7b`](https://github.com/outfitter-dev/trails/commit/0938e7badc0c5470d194139d642b673658d099e0): Fold the removed `@ontrails/tracing` package into the truthful existing
476
+ owners: intrinsic trace contracts remain in core, developer-state tooling now
477
+ lives at `@ontrails/observability/dev`, and the dependency-light OTel adapter
478
+ lives at `@ontrails/observability/otel`. There is intentionally no root-package
479
+ compatibility redirect because the former root had more than one owner.
480
+ - [`10f2492`](https://github.com/outfitter-dev/trails/commit/10f24928d3bc9d995abf7aa261ecf515c295855d): Own the `wayfind.outline` implementation in the Trails operator app while preserving the existing `trails wayfind file <file> --outline` CLI and MCP composition behavior, and document `@ontrails/source` as the operator's live-source analysis kernel.
481
+ - [`35e5fed`](https://github.com/outfitter-dev/trails/commit/35e5fedd228e498783f479f0dd502e2f3ec772b8): Fold the Wayfinder graph-read catalog into `@ontrails/topography`. Wayfind
482
+ remains the product, trail-id, CLI, and MCP brand, but there is no longer an
483
+ `@ontrails/wayfinder` package to install or import. Programmatic consumers
484
+ should move imports such as `wayfinderTopo`, `wayfindOverviewTrail`,
485
+ `loadWayfinderArtifacts`, and the Wayfinder filter/provenance types to
486
+ `@ontrails/topography`.
487
+
488
+ Expose that package move as a governed Regrade transition so exact
489
+ `@ontrails/wayfinder` imports can move safely while product vocabulary and near
490
+ routes remain unchanged for review. Regrade routes package manifests through
491
+ structured review instead of rewriting dependency keys as plain text.
492
+
493
+ The Trails operator now reads all `wayfind.*` query trails and artifact helpers
494
+ from `@ontrails/topography` while preserving the existing CLI/MCP schemas,
495
+ route IDs, output shapes, and internal trail visibility.
496
+
497
+ - [`3a65ae3`](https://github.com/outfitter-dev/trails/commit/3a65ae363e05b7589f4a9876da4346886353b48c): Rename the durable graph substrate package from `@ontrails/topographer` to
498
+ `@ontrails/topography` after folding Wayfind graph queries into that owner.
499
+
500
+ Update imports to `@ontrails/topography` or
501
+ `@ontrails/topography/backend-support`. The pre-1.0 cutover does not ship a
502
+ compatibility package. TopoGraph, lock, topo-store, semantic diff, and Wayfind
503
+ APIs keep their existing contracts, and the `trails wayfind` CLI and MCP names
504
+ remain unchanged.
505
+
506
+ The governed package-route transition moves legacy `@ontrails/wayfinder`
507
+ imports directly to `@ontrails/topography`; it does not emit the retired
508
+ intermediate `@ontrails/topographer` route.
509
+
510
+ - [`f1bd093`](https://github.com/outfitter-dev/trails/commit/f1bd09395fcf81db0bcb8657030288877c2e26e6): Recognize conditional, aliased, and parenthesized Result provenance while invalidating provenance after reassignment across the implementation-return and redundant-error-wrap rules.
511
+ - [`e5edace`](https://github.com/outfitter-dev/trails/commit/e5edace60281c76157512acc6e1446c8415633ba): Make Regrade history hashes stable across report serialization and preserve
512
+ pre-apply occurrence evidence alongside truthful completion counts and a
513
+ freshly scanned post-apply completion report for replay detection. Existing
514
+ plans and history stamped with the earlier hash serializer remain valid.
515
+ - [`4030698`](https://github.com/outfitter-dev/trails/commit/40306984467625844564f0f84156530d7118a79c): Keep structured input on nested child commands from being reinterpreted as a
516
+ bare child-name positional fallback, while preserving schema-authored
517
+ `inputJson` flags as ordinary trail input, including through the public Trails
518
+ CLI. Optional numeric flags now consume negative values with Commander's own
519
+ parsing semantics, and variadic flags consume every following value, before
520
+ nested command routing is resolved.
521
+ - [`8a1ac00`](https://github.com/outfitter-dev/trails/commit/8a1ac00b5d789be41ca6e464358c96b01e442bf4): Govern the exact `@ontrails/warden/ast` to `@ontrails/source` package route
522
+ transition for Regrade string-literal and module-specifier rewrites exposed
523
+ through the Trails CLI and MCP tools. Safe rewrites now require the owning
524
+ manifest to already declare the target package; otherwise Regrade preserves the
525
+ occurrence with dependency repair guidance. Invalid manifests remain unchanged
526
+ and produce structured repair guidance that names the owning manifest. Explicit
527
+ preserve rules remain no-ops before dependency validation, and dotted or
528
+ subpath-like near routes remain deferred instead of becoming invented imports.
529
+ - [`504881d`](https://github.com/outfitter-dev/trails/commit/504881df0d15ac92c3234be068c9e1930e1ffddf): Require release checks to prove an exact governed Regrade route, or an explicit
530
+ classified multi-owner fold, whenever a public `@ontrails/*` package disappears
531
+ from the publishable workspace inventory.
532
+ - [`872a815`](https://github.com/outfitter-dev/trails/commit/872a815243cae63fae5b16022f102d125bc78ac5): Require strict registry checks to prove exact-version consumer availability instead of trusting package access or dist-tags alone.
533
+ - [`31f9d80`](https://github.com/outfitter-dev/trails/commit/31f9d8021715aff6a1d72ca3f4878a73efd75fec): Validate every current changeset's package names against the workspace during release checks, including unchanged files and retained prerelease changesets. Report the changeset path and unknown package before stale references can break version calculation on main.
534
+ - [`76a95cd`](https://github.com/outfitter-dev/trails/commit/76a95cdb573d72ef05925250a3fbd8cd297c25c1): Derive generated release PR label baselines from the release PR base ref instead of the already-versioned checkout, so a beta.N → beta.N+1 generated release PR receives its `release:*` label automatically and workflow reruns preserve all three generated label families.
535
+ - [`822b403`](https://github.com/outfitter-dev/trails/commit/822b40375cc2947f0824d5f4e291b370b5062866): Ship deterministic macOS and Linux CLI bundles for the GitHub release and hand published releases to the Outfitter Homebrew tap through a reviewable formula PR.
536
+ - [`2dd9cda`](https://github.com/outfitter-dev/trails/commit/2dd9cdaac251378bda9e9600653ffc9b9defeaa2): Promote ADR-0043 (Layer Evolution) from draft to accepted, amend it on 2026-05-04 to remove the briefly proposed `Middleware` split, and publish the Layer Evolution Migration Guide at `docs/migration/layer-evolution.md`.
537
+
538
+ Documentation-only change capturing the post-implementation state of the layer-evolution work shipped across TRL-471 through TRL-476: typed `Layer` primitive with optional `input` schema, three attachment scopes (trail, surface, topo), CLI/MCP/HTTP surface projection of layer inputs, removal of `authLayer`, `autoIterateLayer`, and `dateShortcutsLayer`, and warden coaching via `no-legacy-layer-imports` (error). The migration guide is the durable countermeasure to the vocabulary churn flagged in ADR-0043's tradeoffs.
539
+
540
+ - [`ed7f6f6`](https://github.com/outfitter-dev/trails/commit/ed7f6f631f9a0ec2dd5437ac28469b2be60efc49): Expand topo-store and survey trail detail records with resolved TopoGraph contract facts for blind-agent review.
541
+ - [`fb10112`](https://github.com/outfitter-dev/trails/commit/fb10112eb3a6f2092871e451a39d1bd1f339c7f8): Polish Warden guidance projection by preserving labels in plain-text doc links
542
+ and reusing the shared diagnostic schema from the Trails CLI wrapper.
543
+ - [`7a1d4a9`](https://github.com/outfitter-dev/trails/commit/7a1d4a904d05b1ccd46af01fdab389cb2ab10a3d): Rename the public resolved graph API from `SurfaceMap` to `TopoGraph`, including
544
+ the derive, hash, diff, and current graph artifact I/O helpers.
545
+ - [`84f595a`](https://github.com/outfitter-dev/trails/commit/84f595afe4bc0c8c3d07f99d5d7682676fa119d1): Add lock v3 manifest and `topo.lock` I/O. `trails.lock` now reads as a compact v3 manifest that points at the serialized TopoGraph artifact, and legacy v2/hash-only lock inputs fail with a regenerate instruction.
546
+ - [`d2cb9ba`](https://github.com/outfitter-dev/trails/commit/d2cb9ba3672cb224b5df7ecf363bbe5e5d77bff4): Rename topo-store export artifacts from surface-era names to TopoGraph names. The `topo_exports` table now stores `topo_graph`, `topo_graph_hash`, and `lock_manifest`, and backend-support export records expose `topoGraphJson`, `topoGraphHash`, and `lockManifestJson`.
547
+ - [`653d1fc`](https://github.com/outfitter-dev/trails/commit/653d1fc27243164d43b16e50c7d6fb83a5faea8e): Add a top-level `trails diff` command and extend TopoGraph diffs with version, marker, lifecycle status, support set, and force-event audit details.
548
+ - [`2e76288`](https://github.com/outfitter-dev/trails/commit/2e76288ab0ba13afb5e648e90d6ecb54133e88ed): Add graph-only force event projection for forced compile break acceptance and block unforced breaking topo changes.
549
+ - [`52e4e8f`](https://github.com/outfitter-dev/trails/commit/52e4e8f7d6b3f483889c37208bf63d34188cb7ee): Add the `@ontrails/trails` CLI package and core framework command scripts to newly scaffolded projects.
550
+ - [`58be821`](https://github.com/outfitter-dev/trails/commit/58be82153a310083b69947f7be50ad4d296a432a): Generated projects now pin `@ontrails/*` packages to the exact scaffolded
551
+ package version instead of emitting caret prerelease ranges.
552
+ - [`da7cbcb`](https://github.com/outfitter-dev/trails/commit/da7cbcbd2d61f601d78e4fa6254c5daac3f4bf5c): Generated projects now include a minimal `.trails/scaffold.json` provenance
553
+ breadcrumb recording the scaffold schema version, package version, starter
554
+ template, and generation timestamp.
555
+ - [`fc00aeb`](https://github.com/outfitter-dev/trails/commit/fc00aebf67e968525b53a1719675af3e57586546): Add adapter target conformance metadata and scaffold extracted HTTP adapters through `trails create adapter`.
556
+ - [`ea8a8a4`](https://github.com/outfitter-dev/trails/commit/ea8a8a46ffec302b6773f344ee82dc190188da82): Teach published app workflows to compile through an explicit narrow local
557
+ permit, teach generated workspaces to run with the matching scope, and teach
558
+ generated entity CLI apps to invoke protected starter writes with their scoped
559
+ permit through the resolved CLI entry path.
560
+ - [`f757cd7`](https://github.com/outfitter-dev/trails/commit/f757cd79635eb19ac67c496a6f2b34397d9a91c8): Publish Regrade's downstream report and AST rewrite APIs, and expose a dry-run
561
+ by default `trails regrade` operator command with explicit apply mode.
562
+ - [`1c975c3`](https://github.com/outfitter-dev/trails/commit/1c975c3e969d1aa999c6c2474ce72ecfb52e7c65): Define the Warden fix-metadata contract (`WardenFix`, `WardenFixCapability`, `WardenFixClass`, `WardenFixSafety`, `WardenFixEdit`) with optional `fix` metadata on diagnostics and rule metadata, projected through the guide, manifest, markdown, and agent guidance. Export `wardenFixClasses`/`wardenFixSafeties` value arrays and surface the rule `fix` capability in the `warden.guide` trail output schema. Dormant until a rule declares it.
563
+ - [`d5d518e`](https://github.com/outfitter-dev/trails/commit/d5d518e165f106b408b00187e9165359bedf5db3): Add `warden --fix` to apply safe source fixes. The executor applies only `safety: 'safe'` edits last-to-first, re-reading and rewriting affected files, while review-required, edit-less, and topo diagnostics stay reported but unapplied. The report surfaces applied, changed-file, and skipped counts.
564
+
565
+ Expose `fix` through the Trails app wrapper and mark the `warden` trail as write intent with explicit public access because `fix: true` mutates source files while the local governance command remains directly runnable.
566
+
567
+ - [`678cb1c`](https://github.com/outfitter-dev/trails/commit/678cb1c6f49ee0e12615f9dbf757672df49bdcdd): Expose the shared adapter readiness engine through Warden's opt-in
568
+ `--adapter-check` diagnostics and the local `trails adapter check` authoring
569
+ workflow.
570
+ - [`4c0041c`](https://github.com/outfitter-dev/trails/commit/4c0041c1387a3bdf77511928919350eb04fa2ef9): Expose `wayfind.errors` and `wayfind.adapters` as read-only direct tools on the Trails operator MCP surface.
571
+ - [`4cca012`](https://github.com/outfitter-dev/trails/commit/4cca01275a739a53e5cc5f3586789825d375d2f4): Add the `wayfind.errors` graph-read trail and expose it through the Trails CLI for local error-fact inspection.
572
+ - [`708b861`](https://github.com/outfitter-dev/trails/commit/708b86104dea5bf13d076c20e18019f525485136): Expose `wayfind.adapters` over adapter-kit fact reports and add it to the Trails operator CLI Wayfinder surface.
573
+ - [`b6579b8`](https://github.com/outfitter-dev/trails/commit/b6579b8a147d8db4ecde71cdb2e7a46b8043690e): Expose selected Wayfinder graph-read queries through the local `trails wayfind` CLI command group for dogfooding saved topo artifacts.
574
+ - [`52e15bc`](https://github.com/outfitter-dev/trails/commit/52e15bc0bee81c247fcc60389c8f7abe881da13d): Repair fresh app loading so mirrored workspace modules can resolve first-party workspace packages and their installed package dependencies from the mirror.
575
+ - [`d4ec336`](https://github.com/outfitter-dev/trails/commit/d4ec336802e82ccf2670f833c4dcc698f3ec8e86): Add a repo-level Wayfinder dogfood smoke command that exercises the local
576
+ Trails CLI against exported operator topo artifacts.
577
+ - [`0d1472a`](https://github.com/outfitter-dev/trails/commit/0d1472aa80c03003c9378ca1dd067a81c04018d6): Expose release rules config helpers from `@ontrails/trails/release` so
578
+ projects can compose release policy into `trails.config.ts`.
579
+ - [`8f681ae`](https://github.com/outfitter-dev/trails/commit/8f681ae9ea67d57ffba90357e0884868529b7e92): Move release rule evaluation into the Trails app package and export the
580
+ release check and public trail contract fact helpers from
581
+ `@ontrails/trails/release`.
582
+ - [`9e77ae1`](https://github.com/outfitter-dev/trails/commit/9e77ae1965f18583c8e5f9a2f8264c9756404d2c): Expose release rule evaluation through the `trails release check` command and
583
+ the Trails MCP operator surface, with JSON output available through the shared
584
+ CLI output mode.
585
+ - [`fd676c4`](https://github.com/outfitter-dev/trails/commit/fd676c484260fd6e2e6e5397e80576669a7a3ae6): Expose the native Bun release binding from `@ontrails/trails/release` and keep publish and registry scripts as compatibility wrappers.
586
+ - [`0ccb3e5`](https://github.com/outfitter-dev/trails/commit/0ccb3e5eb7ef12238ad61028456e8cedbf50fca8): Add `release.smoke` as the public Trails release confidence surface for packed artifact and Wayfinder dogfood checks.
587
+ - [`7c037a0`](https://github.com/outfitter-dev/trails/commit/7c037a0666c559cf0cab43013c8f0a6ffa32e783): Allow `trails release check` to pass as a no-op in generated single-package apps
588
+ that do not declare package workspaces.
589
+ - [`cdee4d0`](https://github.com/outfitter-dev/trails/commit/cdee4d0721fb8e08883447036ec8e8b29266ac28): Emit formatter-clean fresh scaffold files so generated apps pass their own
590
+ `format:check` script before any manual cleanup.
591
+ - [`dac49c2`](https://github.com/outfitter-dev/trails/commit/dac49c226b6f5ab5343bd63cc92963710d3f5073): Restore caller-facing direct input for `trails run` so positional JSON,
592
+ `--input-json`, and `--input` payloads map to the target trail input unless
593
+ callers explicitly use the `input` wrapper for control-field collisions.
594
+ - [`9bcf34e`](https://github.com/outfitter-dev/trails/commit/9bcf34e53e0c7a40f4ebb78be7f47ac22421ff25): Add trail-owned CLI command projection metadata and serialize resolved command
595
+ route facts for downstream tools.
596
+ - [`f7d97fc`](https://github.com/outfitter-dev/trails/commit/f7d97fca59e56ff09d991752526fd928bc16f8f6): Expose resolved CLI command routes through schema helpers, the Trails operator
597
+ schema command, and Wayfinder trail contract output.
598
+ - [`59d10da`](https://github.com/outfitter-dev/trails/commit/59d10da59dde304141736ef883d4257cc97f017c): Dogfood CLI command route aliases through the Trails operator, saved Topographer artifacts, and Wayfinder contract inspection.
599
+ - [`619cb15`](https://github.com/outfitter-dev/trails/commit/619cb15085059b9d3af57b1cd56bfd1e205d48f9): Add a Warden rule (`no-destructured-compose`) that coaches trail blazes to call `ctx.compose(...)` directly instead of destructuring `compose` from the context.
600
+
601
+ Keep the generated `create` trail on the direct `ctx.compose(...)` shape so framework-authored trails follow the same composition guidance.
602
+
603
+ - [`8ddf5ff`](https://github.com/outfitter-dev/trails/commit/8ddf5ff71a3955a540b450f9312b8caf58fa735f): Extend `runWarden` into the shared Warden orchestration entrypoint with effective config resolution, depth/fail thresholds, rule facets, and multi-topo report metadata.
604
+
605
+ Adapt the built-in `trails warden` wrapper to consume the readonly Warden report diagnostics contract without weakening its output schema.
606
+
607
+ - [`df13faf`](https://github.com/outfitter-dev/trails/commit/df13faf0c2cb55804bdfeb65abcea1570efb4c61): Tighten Wayfinder navigation review findings: carry adapter filters into included adapter facts, keep live-source outline off the operator MCP surface until host-root binding exists, make unknown MCP resources protocol errors, route secondary Wayfinder graph populations through unified flags, and keep undeclared string `ctx.compose()` calls as Warden errors.
608
+ - [`f67cd2a`](https://github.com/outfitter-dev/trails/commit/f67cd2aa48ce59f4dc444de5db54be6493f226ab): Document Wayfinder as a real graph-read query catalog instead of a shell-only
609
+ package, including MCP exposure guidance, agent skill guidance, and release
610
+ notes for the v0 catalog and its deferred non-goals.
611
+
612
+ ## 1.0.0-beta.50
613
+
614
+ ### Patch Changes
615
+
616
+ - [`533f1f9`](https://github.com/outfitter-dev/trails/commit/533f1f9318e7e81feba7ff52096472598577c723): Render concrete release versions in Homebrew formula URLs without a redundant explicit version declaration.
617
+
618
+ ## 1.0.0-beta.49
619
+
620
+ ### Patch Changes
621
+
622
+ - [`822b403`](https://github.com/outfitter-dev/trails/commit/822b40375cc2947f0824d5f4e291b370b5062866): Ship deterministic macOS and Linux CLI bundles for the GitHub release and hand published releases to the Outfitter Homebrew tap through a reviewable formula PR.
623
+
624
+ ## 1.0.0-beta.48
625
+
626
+ ### Patch Changes
627
+
628
+ - [`d8a2e7a`](https://github.com/outfitter-dev/trails/commit/d8a2e7a3e89ac06c1f594ef845ea18acaf58ea64): Preserve governed conversion provenance when Regrade appends a run to an existing v3 receipt.
629
+ - [`7cca56b`](https://github.com/outfitter-dev/trails/commit/7cca56bdf3802826f2d4d338ee490d261cb8e52b): Keep ordinary source pull request labels out of generated release policy by requiring the canonical `changeset-release/main` head route during release PR discovery.
630
+
631
+ ## 1.0.0-beta.47
632
+
633
+ ### Minor Changes
634
+
635
+ - [`90d394c`](https://github.com/outfitter-dev/trails/commit/90d394c005fdf6b898ba7052d0b56755af0f4954): Derive nested worktree, repository, and submodule collection boundaries in the
636
+ shared Source walker. Regrade and Warden now observe one directly targeted
637
+ working tree per run, and Regrade audit summaries expose boundary skip counts.
638
+
639
+ ## 1.0.0-beta.46
640
+
641
+ ### Minor Changes
642
+
643
+ - [`701ab85`](https://github.com/outfitter-dev/trails/commit/701ab85bd237e5fcf03725c56b70adb3612d6c15): Reuse fresh Regrade apply preflight evaluations without persisting cache state or weakening completion scans.
644
+ - [`c83d0b6`](https://github.com/outfitter-dev/trails/commit/c83d0b67ac928af1b44c1f2d2c4b36aa09a24a70): Inventory parser-native source comments and TSDoc as exact review-only entries
645
+ for governed classified vocabulary transitions across CLI, MCP, and audit.
646
+ - [`93757ba`](https://github.com/outfitter-dev/trails/commit/93757ba102ae7ba8d9a7a6c17f119cda47d342a7): Expose ordered Regrade lifecycle phases and wall-clock timings across CLI and
647
+ MCP completion results, with concise human CLI progress isolated on stderr.
648
+ Keep topo-scoped JSON and JSONL environment selectors effective when the
649
+ operator does not explicitly choose an output mode.
650
+ - [`fb0ba0a`](https://github.com/outfitter-dev/trails/commit/fb0ba0ab706bbdce470123e9a6fb2ef9f1822806): Convert the eight committed governed Regrade histories to canonical v3 receipts and remove the temporary schema-v2 compatibility path after migration.
651
+ - [`9a8b6e4`](https://github.com/outfitter-dev/trails/commit/9a8b6e4af394c76c11e6d0007e0f5f94d0be2cb3): Persist Regrade lifecycle runs as canonical v3 receipts with exact Git blob evidence and authored field provenance, and validate their compact classified-form projection independently in Warden.
652
+
653
+ ### Patch Changes
654
+
655
+ - [`768cc79`](https://github.com/outfitter-dev/trails/commit/768cc79ca10947b8808b376e281e1a81131b4acc): Close missed projection vocabulary residue in Regrade internals and public
656
+ error-rendering guidance, and keep lifecycle-ambiguous governed identifiers in
657
+ the Warden review inventory instead of assigning them an unsafe automatic
658
+ target.
659
+
660
+ ## 1.0.0-beta.45
661
+
662
+ ### Patch Changes
663
+
664
+ - [`f1bd093`](https://github.com/outfitter-dev/trails/commit/f1bd09395fcf81db0bcb8657030288877c2e26e6): Recognize conditional, aliased, and parenthesized Result provenance while invalidating provenance after reassignment across the implementation-return and redundant-error-wrap rules.
665
+ - [`872a815`](https://github.com/outfitter-dev/trails/commit/872a815243cae63fae5b16022f102d125bc78ac5): Require strict registry checks to prove exact-version consumer availability instead of trusting package access or dist-tags alone.
666
+
667
+ ## 1.0.0-beta.44
668
+
669
+ ### Patch Changes
670
+
671
+ - [`b1fbe57`](https://github.com/outfitter-dev/trails/commit/b1fbe574e6f44d1fecb5e3a000270955c0a77b7b): Publish Bun-validated package tarballs through an npm trusted-publishing adapter
672
+ binding, add exact repository metadata for each public workspace package, and
673
+ correct the native Bun release descriptor to its pack-only runtime boundary.
674
+
675
+ ## 1.0.0-beta.43
676
+
677
+ ### Minor Changes
678
+
679
+ - [`4fb20a6`](https://github.com/outfitter-dev/trails/commit/4fb20a68e1ed98972d99fed8b2df96bfa6804bd3): Derive deterministic, provenance-bearing vocabulary plan proposals from a minimal `from`/`to` seed, including morphology, public and compound identifier review, filename and reference-closure candidates, namespace census, and validated live-topo API preserves. Classified governed transitions retain their registry identity while routing every governed form to review instead of inventing a single safe successor.
680
+ - [`d3215b0`](https://github.com/outfitter-dev/trails/commit/d3215b0966f13af2a72ece9adbcc2c68c70f81b6): Add governed file renames to vocabulary Regrade plans, with move-first derived reference closure and persisted policy-aware evidence across CLI and MCP.
681
+ - [`5a7d22a`](https://github.com/outfitter-dev/trails/commit/5a7d22ab9d674f86b28758f23c3e94a17efb5be1): Add three-tier vocabulary migration scope. Protected historical paths remain
682
+ scanned and counted as `historical-by-policy` without being rewritten, while
683
+ reports expose scope-tier totals and census-expected teaching-surface coverage
684
+ through equivalent CLI and MCP plan schemas. Applied vocabulary occurrences
685
+ remain auditable in history with an `applied` verdict, while policy-only
686
+ evidence does not make an active plan stale merely by being recorded.
687
+ - [`88a6a62`](https://github.com/outfitter-dev/trails/commit/88a6a62a9e9e230ca6d368fa78dc3ece6c816204): Complete the v1 classification-first cutover from projection/project vocabulary
688
+ to derive/derived for contract-owned fact production and render/rendered for
689
+ surface presentation. Public type, helper, rule, relation, and report names move
690
+ without compatibility aliases; ordinary repository/project nouns remain
691
+ explicit preserves or structured review inventory.
692
+ - [`9f0842e`](https://github.com/outfitter-dev/trails/commit/9f0842ee9d7c7155d86a4fd023760ac0a5636f5d): Retire the temporary root vocabulary-cutover toolchain now that Regrade owns
693
+ structured migration plans, safe rewrites, classification, census, CLI/MCP
694
+ reports, and immutable history. Remove the obsolete source exemptions so
695
+ Oxlint and Warden enforce the durable transition contract directly, and add a
696
+ history-driven Regrade audit surface for current-tree regression checks.
697
+ - [`bd1bd96`](https://github.com/outfitter-dev/trails/commit/bd1bd96b90cd8b55f73061e4078a14cd75bed745): Require committed Regrade provenance for governed vocabulary transitions.
698
+
699
+ Applied governed plans now expose deterministic transition, plan, source,
700
+ safe-apply, and review-follow-up evidence through history results. Warden loads
701
+ committed history into project context, cites it for reintroduced symbols, and
702
+ rejects invalid or missing provenance for transitions that require Regrade in
703
+ the workspace that owns the governed registry, without making downstream apps
704
+ prove the framework's own migrations.
705
+ Portable validation accepts the authoritative numeric file-rename counters
706
+ persisted by Regrade history.
707
+
708
+ ### Patch Changes
709
+
710
+ - [`742387e`](https://github.com/outfitter-dev/trails/commit/742387ea27e1f9fb9490147b871ae8c5a59903ae): Allow release checks to recognize changeset edits that only remove release rows
711
+ for packages absent from the live workspace while rejecting any additional
712
+ changes hidden beside that cleanup.
713
+ - [`18a14e2`](https://github.com/outfitter-dev/trails/commit/18a14e220728be7108f3fe2864455c52305aef9f): Finish the v1 vocabulary reset cleanup by retaining the facet guard, adding a
714
+ durable TopoGraph artifact-family guard, teaching the live lexicon directly in
715
+ agent guidance, and replacing completed reset-family placeholders in public
716
+ Regrade examples and CLI schema help.
717
+ - [`113aed6`](https://github.com/outfitter-dev/trails/commit/113aed62d20041e35b0cf9d6c1b1a18df4b88f57): Rename the dependency-light observability owner from `@ontrails/observe` to
718
+ `@ontrails/observability` as a pre-v1 hard cut. Update dependent packages,
719
+ documentation, package discovery, and the governed Regrade route; no
720
+ compatibility package or old import route is retained.
721
+ - [`0938e7b`](https://github.com/outfitter-dev/trails/commit/0938e7badc0c5470d194139d642b673658d099e0): Fold the removed `@ontrails/tracing` package into the truthful existing
722
+ owners: intrinsic trace contracts remain in core, developer-state tooling now
723
+ lives at `@ontrails/observability/dev`, and the dependency-light OTel adapter
724
+ lives at `@ontrails/observability/otel`. There is intentionally no root-package
725
+ compatibility redirect because the former root had more than one owner.
726
+ - [`504881d`](https://github.com/outfitter-dev/trails/commit/504881df0d15ac92c3234be068c9e1930e1ffddf): Require release checks to prove an exact governed Regrade route, or an explicit
727
+ classified multi-owner fold, whenever a public `@ontrails/*` package disappears
728
+ from the publishable workspace inventory.
729
+
730
+ ## 1.0.0-beta.42
731
+
732
+ ## 1.0.0-beta.41
733
+
734
+ ### Patch Changes
735
+
736
+ - [`19406e0`](https://github.com/outfitter-dev/trails/commit/19406e06f825c5ba4460b153eaf2ade721a749d7): Classify unauthenticated scoped-package dist-tag fallbacks as first publications after npm has already reported the package missing, and preserve registry probe details in release-policy blockers.
737
+
738
+ ## 1.0.0-beta.40
739
+
740
+ ### Minor Changes
741
+
742
+ - [`5adb995`](https://github.com/outfitter-dev/trails/commit/5adb99551c2dda6190d46cce7f60bb08d63c99aa): Complete the v1 hard cutover from the authored `blaze` field to
743
+ `implementation` across trail contracts, surface projections, tests, examples,
744
+ and public source-analysis helpers. Existing applications must rename authored
745
+ trail behavior fields and direct trail-object access before upgrading.
746
+ - [`6712075`](https://github.com/outfitter-dev/trails/commit/67120754df3f614c7f4dd98be1fa0ba9d69b7765): Complete the v1 hard cutover from the `contour` domain-object declaration
747
+ vocabulary to `entity` across contracts, topo facts, store helpers, Warden,
748
+ Wayfinder, operator surfaces, examples, and generated locks. Existing
749
+ applications must rename contour APIs, run `trails dev reset --yes` to discard
750
+ pre-cutover local Topographer snapshots, and then recompile committed
751
+ `trails.lock` artifacts before upgrading. Those derived snapshots are
752
+ intentionally not read through a compatibility layer.
753
+ The entity-shaped wire contract advances `TopoGraph` and split lock manifests
754
+ from schema version 3 to 4; old split artifacts fail with regeneration guidance,
755
+ while the canonical root `trails.lock` remains schema version 5.
756
+ Wayfinder reports those stale rows as topo-store drift while keeping current
757
+ committed lock facts available for inspection.
758
+
759
+ ### Patch Changes
760
+
761
+ - [`4def007`](https://github.com/outfitter-dev/trails/commit/4def007a53c42881fba1d958a67f0c05f417e811): Move adapter source export scanning into adapter-kit and have `create.adapter`
762
+ consume the shared helper.
763
+ - [`78575d5`](https://github.com/outfitter-dev/trails/commit/78575d5193242053b4dc1f4fa6150b94bacaff44): Discover owner-package subpath adapter subjects in shared adapter checks and
764
+ enable `trails create adapter --placement subpath` to generate immediately
765
+ checkable owner subpaths.
766
+ - [`35cbe28`](https://github.com/outfitter-dev/trails/commit/35cbe289db46539b3689dbf6cf8ab0e5d9a1b09c): Found `@ontrails/source` as the shared source-code AST kernel for parsing,
767
+ walking, locations, edits, literals, and generic Trails syntax recognition.
768
+ Warden, Regrade, Wayfinder, and the Trails operator now import those shared
769
+ mechanics from `@ontrails/source`; the legacy Warden AST route is removed by the
770
+ stacked hard cutover.
771
+ - [`10f2492`](https://github.com/outfitter-dev/trails/commit/10f24928d3bc9d995abf7aa261ecf515c295855d): Own the `wayfind.outline` implementation in the Trails operator app while preserving the existing `trails wayfind file <file> --outline` CLI and MCP composition behavior, and document `@ontrails/source` as the operator's live-source analysis kernel.
772
+ - [`35e5fed`](https://github.com/outfitter-dev/trails/commit/35e5fedd228e498783f479f0dd502e2f3ec772b8): Fold the Wayfinder graph-read catalog into `@ontrails/topography`. Wayfind
773
+ remains the product, trail-id, CLI, and MCP brand, but there is no longer an
774
+ `@ontrails/wayfinder` package to install or import. Programmatic consumers
775
+ should move imports such as `wayfinderTopo`, `wayfindOverviewTrail`,
776
+ `loadWayfinderArtifacts`, and the Wayfinder filter/provenance types to
777
+ `@ontrails/topography`.
778
+
779
+ Expose that package move as a governed Regrade transition so exact
780
+ `@ontrails/wayfinder` imports can move safely while product vocabulary and near
781
+ routes remain unchanged for review. Regrade routes package manifests through
782
+ structured review instead of rewriting dependency keys as plain text.
783
+
784
+ The Trails operator now reads all `wayfind.*` query trails and artifact helpers
785
+ from `@ontrails/topography` while preserving the existing CLI/MCP schemas,
786
+ route IDs, output shapes, and internal trail visibility.
787
+
788
+ - [`3a65ae3`](https://github.com/outfitter-dev/trails/commit/3a65ae363e05b7589f4a9876da4346886353b48c): Rename the durable graph substrate package from `@ontrails/topographer` to
789
+ `@ontrails/topography` after folding Wayfind graph queries into that owner.
790
+
791
+ Update imports to `@ontrails/topography` or
792
+ `@ontrails/topography/backend-support`. The pre-1.0 cutover does not ship a
793
+ compatibility package. TopoGraph, lock, topo-store, semantic diff, and Wayfind
794
+ APIs keep their existing contracts, and the `trails wayfind` CLI and MCP names
795
+ remain unchanged.
796
+
797
+ The governed package-route transition moves legacy `@ontrails/wayfinder`
798
+ imports directly to `@ontrails/topography`; it does not emit the retired
799
+ intermediate `@ontrails/topographer` route.
800
+
801
+ - [`e5edace`](https://github.com/outfitter-dev/trails/commit/e5edace60281c76157512acc6e1446c8415633ba): Make Regrade history hashes stable across report serialization and preserve
802
+ pre-apply occurrence evidence alongside truthful completion counts and a
803
+ freshly scanned post-apply completion report for replay detection. Existing
804
+ plans and history stamped with the earlier hash serializer remain valid.
805
+ - [`4030698`](https://github.com/outfitter-dev/trails/commit/40306984467625844564f0f84156530d7118a79c): Keep structured input on nested child commands from being reinterpreted as a
806
+ bare child-name positional fallback, while preserving schema-authored
807
+ `inputJson` flags as ordinary trail input, including through the public Trails
808
+ CLI. Optional numeric flags now consume negative values with Commander's own
809
+ parsing semantics, and variadic flags consume every following value, before
810
+ nested command routing is resolved.
811
+ - [`8a1ac00`](https://github.com/outfitter-dev/trails/commit/8a1ac00b5d789be41ca6e464358c96b01e442bf4): Govern the exact `@ontrails/warden/ast` to `@ontrails/source` package route
812
+ transition for Regrade string-literal and module-specifier rewrites exposed
813
+ through the Trails CLI and MCP tools. Safe rewrites now require the owning
814
+ manifest to already declare the target package; otherwise Regrade preserves the
815
+ occurrence with dependency repair guidance. Invalid manifests remain unchanged
816
+ and produce structured repair guidance that names the owning manifest. Explicit
817
+ preserve rules remain no-ops before dependency validation, and dotted or
818
+ subpath-like near routes remain deferred instead of becoming invented imports.
819
+
820
+ ## 1.0.0-beta.39
821
+
822
+ ### Minor Changes
823
+
824
+ - [`9518f5c`](https://github.com/outfitter-dev/trails/commit/9518f5cc892a87273a3bfdaa0d7319f98004ecb8): `trails regrade adjust <transition>` pulls a graduated transition back from consolidated history into an active plan minus the run ledger, preserving the stable transition id so subsequent applies append to the same history spine. Plan re-derivation (`regrade plan`) now carries `transitionId` forward from an existing active plan.
825
+ - [`714939d`](https://github.com/outfitter-dev/trails/commit/714939d6ec143c55a1aba55b65bd11a8a2bfbf1e): Stacked/phased regrades ride the primary tooling: class-mode Regrade plans accept `include` path globs so one transition can be applied in scoped parts that all append to the same consolidated history, and an authored `--name` keys multi-class transitions to a clean transition-name filename instead of concatenated class ids.
826
+ - [`65b362f`](https://github.com/outfitter-dev/trails/commit/65b362f65fa2a75e2121d1a8b31882d52fa0376b): Regrade history consolidates per transition, append-only: `regrade apply` appends a run entry stamped `{ planContentHash, lockHashAtRun }` to `.trails/regrade/history/<transition>.json` instead of overwriting lockhash-named files, identical re-runs are recognized as replays, the artifact carries a stable internal transition `id`, and `regrade check <transition>` verifies each recorded run at its own stamped lock. The report `history.status` union widens to `applied | checked | replay`.
827
+ - [`7c05376`](https://github.com/outfitter-dev/trails/commit/7c05376a4ee2a66ef477d8f165205bf2fbbdc37f): `trails compile` and `trails validate` now collect adapter overlay overlays from the app module's `trailsOverlays` export and embed the validated facts as `overlays.<namespace>` in `trails.lock`, threading the registrations through every derivation site so compiled and freshly derived graphs stay hash-identical.
828
+ - [`adf6419`](https://github.com/outfitter-dev/trails/commit/adf64191ea9e458d7405465ab6fa96ca72ab574c): Add `trails wayfind --overlay <namespace>`: a generic read of namespaced lock overlays (adapter-contributed facts) from saved artifacts, listing available namespaces on a miss — new fact families become inspectable with zero wayfinder edits.
829
+
830
+ ### Patch Changes
831
+
832
+ - [`f42ca6e`](https://github.com/outfitter-dev/trails/commit/f42ca6e40b29155acec446e5bf44e52e014466bd): Hard cutover: the CLI consumes `cli` bindings from the app-authored surfaces overlay. Scalar bindings behave identically to the removed cliAliases (parity-tested) — the binding name splits on `.` into a transparent synonym command path for exactly one trail. List bindings arrive as command groups: each expanded member trail gets a group-prefixed route that dispatches the member trail with its identity preserved, and a singleton list stays a group. Expansion is fail-fast boundary validation: a scalar binding resolving to zero or multiple trails, or a group with an empty member union, is a `ValidationError` naming the binding. `DeriveTopoGraphOptions.cliAliases`, the `cliAliases`/`trailsCliAliases` app-module export convention, and the per-kind compile lift are deleted; `deriveCliCommands`/`createProgram` take `overlays` instead of `aliases`, and both topo-graph derivation pipelines expand the same bindings through one shared helper so runtime CLI routes and lock routes come from one semantic. A leftover legacy export is now a Warden error (`no-legacy-cli-alias-export`) naming the `surfaceOverlay({ cli: { ... } })` rewrite.
833
+
834
+ This is a breaking API removal shipped under the lockstep beta patch convention (pre-1.0 hard-cutover posture, zero external adoption); the removed options have no deprecation window by design.
835
+
836
+ - [`bafde1f`](https://github.com/outfitter-dev/trails/commit/bafde1fc8172abb8d8617f69a3c7a70667626d10): Fresh derivations now collect app-module overlays through the shared channel compile uses. `@ontrails/adapter-kit` exports `resolveTrailsOverlays()`, the one reader of an app module's `trailsOverlays` export; the compile-path fresh app lease and Warden's fresh topo loading both go through it, making per-namespace drift asymmetry structurally impossible. Warden drift checks (`checkDrift` now accepts derive options carrying overlays) and the topo-aware rule context graph derive with the same overlays the committed lock embeds, so rules like `surface-overlay-coherence` fire on standard runs. Stale drift results name the drifted overlay namespaces (`DriftResult.driftedOverlayNamespaces`) and point at `trails compile` as the remediation.
837
+ - [`b077fb7`](https://github.com/outfitter-dev/trails/commit/b077fb7ba6d9724cac6f0e59bc3fec9aec28984c): Add the export-restructure Regrade class family (TRL-1210). `export-restructure:cli-aliases` inverts legacy `cliAliases`/`trailsCliAliases` exports into `surfaceOverlay({ cli })` bindings inside the module's `trailsOverlays` export — adding the `@ontrails/core` import, deleting the legacy export, and routing anything it cannot prove safe (computed keys, spreads, in-module `aliases:` references) to `needs-review` with the exact target shape named. `export-restructure:mcp-trailheads` projects call-site MCP trailhead maps into `surfaceOverlay({ mcp })` group bindings: it rewrites in place when the same module exports `trailsOverlays`, and otherwise emits a classified `needs-review` handoff naming the module-overlay target while the call-site map stays as the richer-metadata override-in-context. Warden's fix-class union grows to `'export-restructure' | 'term-rewrite'`, `no-legacy-cli-alias-export` now advertises the `export-restructure` class, and `loadWardenRegradeClasses` supersedes `loadWardenTermRewriteClasses` (still exported) as the full Warden-routed class loader. Class-mode Regrade also gains the full plan lifecycle: `trails regrade plan --type class --class-ids ...` writes a `.trails/regrade/<slug>.json` plan carrying class ids, scope, and intent, `regrade check` re-runs the dry run and gates on outstanding rewrites or review, and `regrade apply` applies and graduates the plan to `.trails/regrade/history/<slug>-<hash>.json` — the same plan → check → apply → history evidence trail vocabulary regrades already had, now available to structural transforms. The class family ships for downstream apps bridging the pre-1.0 gap, so pre-cutover alias exports and trailhead maps migrate mechanically instead of by hand.
838
+ - [`81373bc`](https://github.com/outfitter-dev/trails/commit/81373bc5e980bb06d56fb06af4f0986f72e318c7): Wave-2 MCP cutover to the app-authored `surfaces` overlay. The overlay's `mcp` bindings are now the authored, lockable default for the MCP surface: a list binding derives one grouped trailhead tool (member selection in `{ trail, input }`, member identity preserved in `{ trail, output }`, deterministic derived description), and a scalar binding derives an additional tool synonym whose MCP-safe name is published verbatim and must expand to exactly one trail. `deriveMcpTools`/`createServer` accept the new `overlays` option; `@ontrails/core` gains `expandMcpSurfaceBindings` and `deriveMcpTrailheadDescription`.
839
+
840
+ The call-site `CreateServerOptions.trailheads` map survives as permanent override-in-context design, not a compatibility bridge: when both channels are present, the call-site map wins at runtime. Warden's new `trailhead-override-divergence` rule (warn) names both sides when a call-site map's binding names or member selectors diverge from the authored overlay default.
841
+
842
+ Topographer now derives `graph.trailheads` from the overlay's `mcp` list bindings in both `deriveTopoGraph` and the store-side graph build, so trailhead facts flow from compiled locks into Wayfinder reads for the first time. The never-wired `DeriveTopoGraphOptions.trailheads` option and the `TopoGraphTrailheadDeclaration`/`TopoGraphTrailheadTrailSelector` types are removed — a beta-window hard cutover of an option no caller could reach; author the equivalent `mcp` list binding in `surfaceOverlay({ mcp })` instead.
843
+
844
+ - [`a0517ef`](https://github.com/outfitter-dev/trails/commit/a0517efa01014754b1dc307169b21ae71a6e3620): Fresh app loading now resolves extensionless relative imports the way Bun does at runtime, so runtime-valid apps stay operator-loadable (`trails compile`, `trails warden`, and every other fresh-load path). When a relative import cannot be resolved at all, the failure is an actionable `ValidationError` naming the importer file and specifier instead of an opaque redacted "Internal server error".
845
+ - [`a89d469`](https://github.com/outfitter-dev/trails/commit/a89d4696aa78f3dda9394c14665ab3ea8c0f313c): Make `trails compile` → `trails validate` round-trip deterministically (TRL-1191). The per-user topo store no longer reuses previously stored JSON Schema bytes by zod definition hash — that hash cannot see `.describe()` metadata or object field order, so a warm store could serve pre-edit schema values into a freshly compiled lock and make `validate` report it stale immediately. Every snapshot now regenerates schema JSON from the live Zod schema, the store's graph hash goes through the same shared `deriveStableHash` path as `deriveTopoGraphHash`, and the committed `trails.lock` omits the wallclock `generatedAt` field so recompiling unchanged sources yields a byte-identical lock. `TopoGraph.generatedAt` is now optional; locks written by earlier versions still parse.
846
+ - [`a89d469`](https://github.com/outfitter-dev/trails/commit/a89d4696aa78f3dda9394c14665ab3ea8c0f313c): Make the per-user topo store an honest cache (TRL-1196). Every snapshot now records a content fingerprint of the app source set (`topo_snapshots.source_fingerprint`, store schema v14), `trails compile` reports it in its output, and Wayfinder artifact loading compares it against a freshly derived fingerprint — a mismatch surfaces as a `topo-store-source-fingerprint-mismatch` stale reason instead of silently serving pre-edit facts. Compile derives everything from live source on every run, so a poisoned or stale store can never reach `trails.lock`, with or without `--force`.
847
+ - [`a89d469`](https://github.com/outfitter-dev/trails/commit/a89d4696aa78f3dda9394c14665ab3ea8c0f313c): Add the lock round-trip invariant gate (TRL-1200): `trails release smoke --check lock-roundtrip` discovers every committed `trails.lock`, recompiles each against a cold per-user store in a temporary state home, and asserts `validate` is green and the recompiled lock is byte-identical to the committed one. Failure output names the diverging section and the `trails compile` command that fixes it — hand-editing a lock is never the remediation. Wired into `bun run check` and the CI Governance job via `bun run lock:roundtrip`.
848
+
849
+ ## 1.0.0-beta.38
850
+
851
+ ## 1.0.0-beta.37
852
+
853
+ ### Patch Changes
854
+
855
+ - [`09f15de`](https://github.com/outfitter-dev/trails/commit/09f15def8fcc8c28b0d604f436e6eeed46da8f37): Stage wide-net Regrade expansion candidates as structured plan review inventory with evidence, status, and pending counts.
856
+
857
+ ## 1.0.0-beta.36
858
+
859
+ ### Patch Changes
860
+
861
+ - [`6e63e48`](https://github.com/outfitter-dev/trails/commit/6e63e483617b84cb6868d0c4d58d5b5a8d3b9ed2): Complete the v1 grouped surface-entry vocabulary cutover from facet to trailhead, including Regrade dogfood support for governed string literal renames and composed AST rewrite application.
862
+ - [`26786a1`](https://github.com/outfitter-dev/trails/commit/26786a14acbe9ed03f69adbdac22968891e33df1): Persist vocabulary Regrade plan artifacts, expose plan/check/preview/apply flows across CLI and MCP, and write applied plan history for reviewed vocabulary migrations.
863
+
864
+ ## 1.0.0-beta.35
865
+
866
+ ## 1.0.0-beta.34
867
+
868
+ ### Patch Changes
869
+
870
+ - [`d67558b`](https://github.com/outfitter-dev/trails/commit/d67558bea3bfa363ed57e0f4091b6eccbf2a7710): Run governed AST symbol renames from the registry-backed `trails regrade` command path, including MCP parity, while preserving derived live API forms.
871
+
872
+ ## 1.0.0-beta.33
873
+
874
+ ### Patch Changes
875
+
876
+ - [`04a6057`](https://github.com/outfitter-dev/trails/commit/04a6057502281fb81d1eb77df140d07181bfdd07): Clean generated release output by suppressing internal dependency cascade noise in package changelogs and rendering generated release PR and GitHub Release notes from the same Highlights, Changes, and Package Versions summary.
877
+ - [`0c40138`](https://github.com/outfitter-dev/trails/commit/0c40138efb962e779710daa172bdfd756d9d992f): Harden vocabulary regrades by deferring Markdown code contexts for review and
878
+ exposing structured preserve rules through the Trails `regrade` command.
879
+ - [`7d65189`](https://github.com/outfitter-dev/trails/commit/7d65189cc33408755fe07a0b5679f1ed01123455): Expose derived live-API preserve inventory in vocabulary Regrade runs and have the Trails operator regrade surface derive current facet API preserves from live topo and MCP surface facts.
880
+ - [`04bb8a4`](https://github.com/outfitter-dev/trails/commit/04bb8a42af4ada51a74b1d8c83697db92035b5e9): Expose vocabulary Regrade occurrence dispositions and disposition summary counts alongside mechanical verdicts.
881
+
882
+ Accept explicit preserve-rule dispositions through the `trails regrade` CLI/MCP contract.
883
+
884
+ ## 1.0.0-beta.32
885
+
886
+ ### Patch Changes
887
+
888
+ - f3c4fef: Export a shared `escapeRegExp` helper from core and migrate first-party callers off local copies.
889
+ - cb0a9d8: Export shared workspace package discovery helpers from core and migrate first-party discovery callers.
890
+ - 8db145e: Move activation report derivation into Topographer and keep the Trails app
891
+ consuming the owner-held activation facts through a compatibility re-export.
892
+ - 8e2603c: Rename read-only topo helper exports from `build*` to `derive*`.
893
+ - 7a3a25f: Rename version lifecycle result paths from `file` to `filePath`.
894
+ - fe72b84: Fold remaining Regrade and Warden scan-target surfaces onto the shared path-scope vocabulary.
895
+ - Updated dependencies [3e5c0fc]
896
+ - Updated dependencies [f3c4fef]
897
+ - Updated dependencies [cb0a9d8]
898
+ - Updated dependencies [8db145e]
899
+ - Updated dependencies [2b819f4]
900
+ - Updated dependencies [21c6dda]
901
+ - Updated dependencies [860ef32]
902
+ - Updated dependencies [fe72b84]
903
+ - @ontrails/adapter-kit@1.0.0-beta.32
904
+ - @ontrails/core@1.0.0-beta.32
905
+ - @ontrails/permits@1.0.0-beta.32
906
+ - @ontrails/warden@1.0.0-beta.32
907
+ - @ontrails/regrade@1.0.0-beta.32
908
+ - @ontrails/topographer@1.0.0-beta.32
909
+ - @ontrails/config@1.0.0-beta.32
910
+ - @ontrails/cli@1.0.0-beta.32
911
+ - @ontrails/commander@1.0.0-beta.32
912
+ - @ontrails/http@1.0.0-beta.32
913
+ - @ontrails/mcp@1.0.0-beta.32
914
+ - @ontrails/observe@1.0.0-beta.32
915
+ - @ontrails/tracing@1.0.0-beta.32
916
+ - @ontrails/wayfinder@1.0.0-beta.32
917
+
918
+ ## 1.0.0-beta.31
919
+
920
+ ### Patch Changes
921
+
922
+ - e2f3d23: Default Regrade reports to actionable entries, add skip counts grouped by
923
+ reason, and expose an `includeEntries` option for full report inventories.
924
+ - 9be2b7e: Load project-local Warden term-rewrite rules from the Regrade root so repo-owned
925
+ migration classes can run through `trails regrade`.
926
+ - 47f782c: Add occurrence-level vocabulary regrade reports with plan, ledger,
927
+ and completion-gate facts. The Trails `regrade` operator command now supports
928
+ positional `<from> <to>` regrade runs and exposes the same capability through
929
+ the curated MCP surface.
930
+ - ee9f3ae: Let Warden fix capabilities declare downstream scan targets and have Regrade
931
+ honor those targets for Warden-backed term-rewrite classes.
932
+
933
+ Dogfood the first safe facet-to-trailhead prose rewrite through project-local
934
+ Warden rules and Regrade.
935
+
936
+ - 982a4d7: Add Regrade path-scope exclusion globs for vocabulary runs and expose them
937
+ through the `trails regrade` CLI/MCP contract.
938
+ - 1540233: Add Regrade scan inventory summaries that group matched files by extension and
939
+ top-level path, with occurrence counts for vocabulary regrade reports.
940
+ - de878bd: Let Trails project config provide default Regrade vocabulary scope settings,
941
+ with explicit CLI or MCP plan inputs overriding those defaults.
942
+ - a0126d9: Add Warden `scope.exclude` globs through project config and the Trails CLI
943
+ wrapper so governance runs can exclude local notes, scratch space, and generated
944
+ state without dropping durable skills or plugin assets from scope.
945
+ - a079073: Rename Regrade path-scope scan controls from `ignore` to `exclude` across CLI, MCP, and project config.
946
+ - 6a26a08: Rename Warden governance scope controls from jurisdiction ignore settings to `scope.exclude` across config, CLI, and Trails surfaces.
947
+ - Updated dependencies [e2f3d23]
948
+ - Updated dependencies [9be2b7e]
949
+ - Updated dependencies [47f782c]
950
+ - Updated dependencies [ee9f3ae]
951
+ - Updated dependencies [982a4d7]
952
+ - Updated dependencies [1540233]
953
+ - Updated dependencies [a0126d9]
954
+ - Updated dependencies [4cd5d4e]
955
+ - Updated dependencies [a079073]
956
+ - Updated dependencies [6a26a08]
957
+ - Updated dependencies [38907cc]
958
+ - @ontrails/regrade@1.0.0-beta.31
959
+ - @ontrails/warden@1.0.0-beta.31
960
+ - @ontrails/mcp@1.0.0-beta.31
961
+ - @ontrails/wayfinder@1.0.0-beta.31
962
+ - @ontrails/core@1.0.0-beta.31
963
+ - @ontrails/commander@1.0.0-beta.31
964
+ - @ontrails/adapter-kit@1.0.0-beta.31
965
+ - @ontrails/cli@1.0.0-beta.31
966
+ - @ontrails/config@1.0.0-beta.31
967
+ - @ontrails/http@1.0.0-beta.31
968
+ - @ontrails/observe@1.0.0-beta.31
969
+ - @ontrails/permits@1.0.0-beta.31
970
+ - @ontrails/topographer@1.0.0-beta.31
971
+ - @ontrails/tracing@1.0.0-beta.31
972
+
973
+ ## 1.0.0-beta.30
974
+
975
+ ### Patch Changes
976
+
977
+ - 5510807: Treat npm `ETARGET` exact-version probes as unpublished target versions during registry readiness checks.
978
+ - b0ff8b9: Teach the registry preflight to verify first-time package publishes when npm's package summary lags behind dist-tags and tarball availability.
979
+ - @ontrails/commander@1.0.0-beta.30
980
+ - @ontrails/adapter-kit@1.0.0-beta.30
981
+ - @ontrails/cli@1.0.0-beta.30
982
+ - @ontrails/config@1.0.0-beta.30
983
+ - @ontrails/core@1.0.0-beta.30
984
+ - @ontrails/http@1.0.0-beta.30
985
+ - @ontrails/mcp@1.0.0-beta.30
986
+ - @ontrails/observe@1.0.0-beta.30
987
+ - @ontrails/permits@1.0.0-beta.30
988
+ - @ontrails/regrade@1.0.0-beta.30
989
+ - @ontrails/topographer@1.0.0-beta.30
990
+ - @ontrails/tracing@1.0.0-beta.30
991
+ - @ontrails/warden@1.0.0-beta.30
992
+ - @ontrails/wayfinder@1.0.0-beta.30
993
+
994
+ ## 1.0.0-beta.29
995
+
996
+ ### Patch Changes
997
+
998
+ - 52425c5: Consolidate registry verdicts behind one shared `packageRegistry` classifier.
999
+
1000
+ `apps/trails/src/release` now derives every package's registry state — `complete`, `needs-publish`, `first-time-package`, `needs-tag-repair`, `tag-points-ahead`, `registry-inaccessible` — from a single `classifyPackageRegistryState` function, fed by an exact-version probe (`npm view <name>@<version>`). The release policy engine and the registry preflight both consume it, so their verdicts can no longer drift, and the missing "is the target version actually published" fact is now first-class.
1001
+
1002
+ The preflight check is phase-aware: `publish:registry-check` (ready) treats an unpublished target or a behind dist-tag as expected pre-publish work rather than a failure, while `publish:registry-check:published` still requires every package to be fully published and tagged. This fixes the confusing failure seen when the repo is several releases ahead of the published `beta` tag. Exact-version probes run with bounded concurrency so release checks stay responsive. No publish or dist-tag mutation is performed.
1003
+
1004
+ - @ontrails/commander@1.0.0-beta.29
1005
+ - @ontrails/adapter-kit@1.0.0-beta.29
1006
+ - @ontrails/cli@1.0.0-beta.29
1007
+ - @ontrails/config@1.0.0-beta.29
1008
+ - @ontrails/core@1.0.0-beta.29
1009
+ - @ontrails/http@1.0.0-beta.29
1010
+ - @ontrails/mcp@1.0.0-beta.29
1011
+ - @ontrails/observe@1.0.0-beta.29
1012
+ - @ontrails/permits@1.0.0-beta.29
1013
+ - @ontrails/regrade@1.0.0-beta.29
1014
+ - @ontrails/topographer@1.0.0-beta.29
1015
+ - @ontrails/tracing@1.0.0-beta.29
1016
+ - @ontrails/warden@1.0.0-beta.29
1017
+ - @ontrails/wayfinder@1.0.0-beta.29
1018
+
1019
+ ## 1.0.0-beta.28
1020
+
1021
+ ### Patch Changes
1022
+
1023
+ - 9d679cf: Make generated release publish policy gather CI proof only for `publish:auto`, reuse generated release PR head proof when it matches the released tree, tolerate duplicate pending checks after a required check has passed, and log registry readiness separately from publish authorization.
1024
+ - 32dc2f3: Let generated release PR labeling treat trusted Graphite merge-queue proof with green required CI as source stack evidence for `publish:auto`, alongside explicit `stack:boundary` labels.
1025
+ - @ontrails/commander@1.0.0-beta.28
1026
+ - @ontrails/adapter-kit@1.0.0-beta.28
1027
+ - @ontrails/cli@1.0.0-beta.28
1028
+ - @ontrails/config@1.0.0-beta.28
1029
+ - @ontrails/core@1.0.0-beta.28
1030
+ - @ontrails/http@1.0.0-beta.28
1031
+ - @ontrails/mcp@1.0.0-beta.28
1032
+ - @ontrails/observe@1.0.0-beta.28
1033
+ - @ontrails/permits@1.0.0-beta.28
1034
+ - @ontrails/regrade@1.0.0-beta.28
1035
+ - @ontrails/topographer@1.0.0-beta.28
1036
+ - @ontrails/tracing@1.0.0-beta.28
1037
+ - @ontrails/warden@1.0.0-beta.28
1038
+ - @ontrails/wayfinder@1.0.0-beta.28
1039
+
1040
+ ## 1.0.0-beta.27
1041
+
1042
+ ### Patch Changes
1043
+
1044
+ - a4727ec: Sync Bun lockfile workspace metadata during package versioning so generated release PRs cannot carry stale first-party package versions.
1045
+ - @ontrails/commander@1.0.0-beta.27
1046
+ - @ontrails/adapter-kit@1.0.0-beta.27
1047
+ - @ontrails/cli@1.0.0-beta.27
1048
+ - @ontrails/config@1.0.0-beta.27
1049
+ - @ontrails/core@1.0.0-beta.27
1050
+ - @ontrails/http@1.0.0-beta.27
1051
+ - @ontrails/mcp@1.0.0-beta.27
1052
+ - @ontrails/observe@1.0.0-beta.27
1053
+ - @ontrails/permits@1.0.0-beta.27
1054
+ - @ontrails/regrade@1.0.0-beta.27
1055
+ - @ontrails/topographer@1.0.0-beta.27
1056
+ - @ontrails/tracing@1.0.0-beta.27
1057
+ - @ontrails/warden@1.0.0-beta.27
1058
+ - @ontrails/wayfinder@1.0.0-beta.27
1059
+
1060
+ ## 1.0.0-beta.26
1061
+
1062
+ ### Patch Changes
1063
+
1064
+ - 40cd7b4: Add a release-pack coherence guard that runs packed package validation for generated release branches and package release metadata changes.
1065
+ - 1307568: Centralize Trails config module path conventions, move local config overrides to root `trails.config.local.*`, scaffold the matching gitignore entries, and load project-local Warden rules from `.trails/rules.ts` or `.trails/rules/`.
1066
+ - 0fe873a: Normalize generated project guidance and scaffold ignores around the root `trails.lock` and committed `.trails/` control model.
1067
+ - 38cd9d6: Add a shared Trails config file loader that treats `trails.config.ts` as the natural primary while supporting JSON, JSONC, YAML, and TOML peer formats. Release and Warden config loading now consume the same loader and local overrides can be authored as data files.
1068
+ - f8403c4: Collapse normal topo compilation onto one root `trails.lock` envelope that embeds the TopoGraph, hash, and summary while keeping legacy `.trails/trails.lock` plus `.trails/topo.lock` readers for migration compatibility.
1069
+ - 371d19e: Move the default `trails.db` location to the per-user Trails state store, expose deterministic state-store path helpers, stop scaffolding disposable `.trails/cache` and `.trails/state` directories, and update topo-store documentation for the global-state substrate.
1070
+ - Updated dependencies [4e75b85]
1071
+ - Updated dependencies [1307568]
1072
+ - Updated dependencies [ef09e46]
1073
+ - Updated dependencies [38cd9d6]
1074
+ - Updated dependencies [f8403c4]
1075
+ - Updated dependencies [371d19e]
1076
+ - Updated dependencies [ff48e41]
1077
+ - @ontrails/regrade@1.0.0-beta.26
1078
+ - @ontrails/config@1.0.0-beta.26
1079
+ - @ontrails/core@1.0.0-beta.26
1080
+ - @ontrails/warden@1.0.0-beta.26
1081
+ - @ontrails/topographer@1.0.0-beta.26
1082
+ - @ontrails/wayfinder@1.0.0-beta.26
1083
+ - @ontrails/tracing@1.0.0-beta.26
1084
+ - @ontrails/commander@1.0.0-beta.26
1085
+ - @ontrails/adapter-kit@1.0.0-beta.26
1086
+ - @ontrails/cli@1.0.0-beta.26
1087
+ - @ontrails/http@1.0.0-beta.26
1088
+ - @ontrails/mcp@1.0.0-beta.26
1089
+ - @ontrails/observe@1.0.0-beta.26
1090
+ - @ontrails/permits@1.0.0-beta.26
1091
+
1092
+ ## 1.0.0-beta.25
1093
+
1094
+ ### Minor Changes
1095
+
1096
+ - b9a7d8a: Add generated release PR policy automation with managed publish/channel/release
1097
+ labels, stack-boundary source evidence, and inverse active-changeset release
1098
+ fact validation.
1099
+
1100
+ ### Patch Changes
1101
+
1102
+ - 578731d: `trails doctor` now returns the underlying validation error when the app topo is invalid, instead of crashing with a redacted "Internal server error". The diagnostic command reports the diagnosis: validation failures surface with their category, message, and (with the commander detail rendering) the issue list.
1103
+ - c5258ea: Fix the scaffolded AGENTS.md layer guidance to say "cross-cutting trail wrapping" — the cross→compose vocabulary cutover had renamed the standard English collocation, so every generated app shipped the nonsense phrase "compose-cutting".
1104
+ - b991263: Retire the package-owned `regrade.downstream.report` trail wrapper so the Trails operator app owns the public Regrade surface while `@ontrails/regrade` exposes the reusable engine APIs and report schema.
1105
+ - c75c6cc: Collapse the duplicate `diff` trail into the canonical `survey.diff` contract while keeping `trails diff` available as a CLI route alias.
1106
+ - 7b7cd6a: Centralize the Trails operator root-directory and fresh-app lease preamble so topo-reading commands share the same load/release flow.
1107
+ - c36aca9: Preserve existing Result error boundaries directly and widen Warden pass-through
1108
+ coaching beyond trail blazes.
1109
+ - c1bc0d3: Add the `wayfind.outline` source-navigation trail and expose it through the Trails CLI and MCP surfaces.
1110
+ - 0d213b1: Enrich compact `wayfind outline --review` text with existing trail intent, schema, and example-count facts when saved graph artifacts are available.
1111
+ - dbf4ff4: Emit structured CLI error envelopes for JSON/JSONL command failures and map compile-time Trails DB lock contention to a retryable timeout instead of a generic internal error.
1112
+ - 8e1c2ff: Wire adapter and error fact selection into the unified `trails wayfind` command.
1113
+ - da39b89: Add the unified `trails wayfind` navigation command over targets, filters, and
1114
+ views, and remove the old `wayfind find` search alias during the v1 Wayfinder
1115
+ surface cutover.
1116
+ - 2059666: Add relational `trails wayfind` flags for downstream, upstream, and nearby graph navigation.
1117
+ - 2c08afe: Expose MCP trail graph fact resources and enable them for the Trails operator MCP surface.
1118
+ - 4b538d1: Start the `trails wayfind --source live` cutover by routing live overview and ID lookup through the fresh app survey path.
1119
+ - dd98701: Update CLI and agent guidance to teach the unified Wayfinder navigation surface and live-source bridge.
1120
+ - f1e6efa: Expand the Wayfinder dogfood smoke to exercise the unified navigation command shape.
1121
+ - 60fa8f5: Expose the saved graph diff as a distinct `wayfind diff` CLI command and MCP tool.
1122
+ - a8e4dc3: Clean up the Wayfinder navigation grammar before RC, including explicit pattern/query/file selectors, target-bound dependency and impact flags, drift-first provenance fields, stricter fires declaration diagnostics, and updated operator dogfood coverage.
1123
+ - a528239: Keep Wayfinder artifact drift aligned with rejected and force-annotated topo compiles.
1124
+ - de79459: Expand Wayfinder dogfood smoke coverage across demo graph facts, relation views, and artifact provenance failures.
1125
+ - f757cd7: Publish Regrade's downstream report and AST rewrite APIs, and expose a dry-run
1126
+ by default `trails regrade` operator command with explicit apply mode.
1127
+ - 9bcf34e: Add trail-owned CLI command projection metadata and serialize resolved command
1128
+ route facts for downstream tools.
1129
+ - f7d97fc: Expose resolved CLI command routes through schema helpers, the Trails operator
1130
+ schema command, and Wayfinder trail contract output.
1131
+ - 59d10da: Dogfood CLI command route aliases through the Trails operator, saved Topographer artifacts, and Wayfinder contract inspection.
1132
+ - df13faf: Tighten Wayfinder navigation review findings: carry adapter filters into included adapter facts, keep live-source outline off the operator MCP surface until host-root binding exists, make unknown MCP resources protocol errors, route secondary Wayfinder graph populations through unified flags, and keep undeclared string `ctx.compose()` calls as Warden errors.
1133
+ - Updated dependencies [60caabf]
1134
+ - Updated dependencies [a9fdbc7]
1135
+ - Updated dependencies [f8fd6ca]
1136
+ - Updated dependencies [b991263]
1137
+ - Updated dependencies [0fcc42b]
1138
+ - Updated dependencies [c36aca9]
1139
+ - Updated dependencies [c1bc0d3]
1140
+ - Updated dependencies [f556559]
1141
+ - Updated dependencies [75417bb]
1142
+ - Updated dependencies [6250729]
1143
+ - Updated dependencies [d73c38e]
1144
+ - Updated dependencies [3befcf1]
1145
+ - Updated dependencies [dbf4ff4]
1146
+ - Updated dependencies [14dc577]
1147
+ - Updated dependencies [4f48166]
1148
+ - Updated dependencies [2d9e73a]
1149
+ - Updated dependencies [da39b89]
1150
+ - Updated dependencies [2c08afe]
1151
+ - Updated dependencies [f1e6efa]
1152
+ - Updated dependencies [f1e6efa]
1153
+ - Updated dependencies [f1e6efa]
1154
+ - Updated dependencies [a8e4dc3]
1155
+ - Updated dependencies [a528239]
1156
+ - Updated dependencies [f757cd7]
1157
+ - Updated dependencies [a4f9cf6]
1158
+ - Updated dependencies [9bcf34e]
1159
+ - Updated dependencies [1d3ae74]
1160
+ - Updated dependencies [f7d97fc]
1161
+ - Updated dependencies [00c0cf8]
1162
+ - Updated dependencies [59d10da]
1163
+ - Updated dependencies [b313c58]
1164
+ - Updated dependencies [f245fa0]
1165
+ - Updated dependencies [d9c6e50]
1166
+ - Updated dependencies [f1e6efa]
1167
+ - Updated dependencies [caff950]
1168
+ - Updated dependencies [df13faf]
1169
+ - @ontrails/commander@1.0.0-beta.25
1170
+ - @ontrails/mcp@1.0.0-beta.25
1171
+ - @ontrails/warden@1.0.0-beta.25
1172
+ - @ontrails/regrade@1.0.0-beta.25
1173
+ - @ontrails/core@1.0.0-beta.25
1174
+ - @ontrails/http@1.0.0-beta.25
1175
+ - @ontrails/topographer@1.0.0-beta.25
1176
+ - @ontrails/wayfinder@1.0.0-beta.25
1177
+ - @ontrails/cli@1.0.0-beta.25
1178
+ - @ontrails/adapter-kit@1.0.0-beta.25
1179
+ - @ontrails/observe@1.0.0-beta.25
1180
+ - @ontrails/permits@1.0.0-beta.25
1181
+ - @ontrails/tracing@1.0.0-beta.25
1182
+
1183
+ ## 1.0.0-beta.24
1184
+
1185
+ ### Patch Changes
1186
+
1187
+ - dac49c2: Restore caller-facing direct input for `trails run` so positional JSON,
1188
+ `--input-json`, and `--input` payloads map to the target trail input unless
1189
+ callers explicitly use the `input` wrapper for control-field collisions.
1190
+ - @ontrails/commander@1.0.0-beta.24
1191
+ - @ontrails/adapter-kit@1.0.0-beta.24
1192
+ - @ontrails/cli@1.0.0-beta.24
1193
+ - @ontrails/core@1.0.0-beta.24
1194
+ - @ontrails/http@1.0.0-beta.24
1195
+ - @ontrails/mcp@1.0.0-beta.24
1196
+ - @ontrails/observe@1.0.0-beta.24
1197
+ - @ontrails/permits@1.0.0-beta.24
1198
+ - @ontrails/topographer@1.0.0-beta.24
1199
+ - @ontrails/tracing@1.0.0-beta.24
1200
+ - @ontrails/warden@1.0.0-beta.24
1201
+ - @ontrails/wayfinder@1.0.0-beta.24
1202
+
1203
+ ## 1.0.0-beta.23
1204
+
1205
+ ### Patch Changes
1206
+
1207
+ - 7c037a0: Allow `trails release check` to pass as a no-op in generated single-package apps
1208
+ that do not declare package workspaces.
1209
+ - Updated dependencies [9c5ecdc]
1210
+ - @ontrails/http@1.0.0-beta.23
1211
+ - @ontrails/commander@1.0.0-beta.23
1212
+ - @ontrails/adapter-kit@1.0.0-beta.23
1213
+ - @ontrails/cli@1.0.0-beta.23
1214
+ - @ontrails/core@1.0.0-beta.23
1215
+ - @ontrails/mcp@1.0.0-beta.23
1216
+ - @ontrails/observe@1.0.0-beta.23
1217
+ - @ontrails/permits@1.0.0-beta.23
1218
+ - @ontrails/topographer@1.0.0-beta.23
1219
+ - @ontrails/tracing@1.0.0-beta.23
1220
+ - @ontrails/warden@1.0.0-beta.23
1221
+ - @ontrails/wayfinder@1.0.0-beta.23
1222
+
1223
+ ## 1.0.0-beta.22
1224
+
1225
+ ### Patch Changes
1226
+
1227
+ - cdee4d0: Emit formatter-clean fresh scaffold files so generated apps pass their own
1228
+ `format:check` script before any manual cleanup.
1229
+ - @ontrails/commander@1.0.0-beta.22
1230
+ - @ontrails/adapter-kit@1.0.0-beta.22
1231
+ - @ontrails/cli@1.0.0-beta.22
1232
+ - @ontrails/core@1.0.0-beta.22
1233
+ - @ontrails/http@1.0.0-beta.22
1234
+ - @ontrails/mcp@1.0.0-beta.22
1235
+ - @ontrails/observe@1.0.0-beta.22
1236
+ - @ontrails/permits@1.0.0-beta.22
1237
+ - @ontrails/topographer@1.0.0-beta.22
1238
+ - @ontrails/tracing@1.0.0-beta.22
1239
+ - @ontrails/warden@1.0.0-beta.22
1240
+ - @ontrails/wayfinder@1.0.0-beta.22
1241
+
1242
+ ## 1.0.0-beta.21
1243
+
1244
+ ### Minor Changes
1245
+
1246
+ - bb5a219: Add the public `create.versions` trail (`trails create versions`). Scaffold dependency version derivation graduates from `scripts/sync-scaffold-versions.ts` into the `create` surface: check mode verifies `apps/trails/src/scaffold-versions.generated.ts` is current, write mode regenerates it, and the root script remains as a thin compatibility wrapper.
1247
+
1248
+ ### Patch Changes
1249
+
1250
+ - 4c0041c: Expose `wayfind.errors` and `wayfind.adapters` as read-only direct tools on the Trails operator MCP surface.
1251
+ - 4cca012: Add the `wayfind.errors` graph-read trail and expose it through the Trails CLI for local error-fact inspection.
1252
+ - 708b861: Expose `wayfind.adapters` over adapter-kit fact reports and add it to the Trails operator CLI Wayfinder surface.
1253
+ - b6579b8: Expose selected Wayfinder graph-read queries through the local `trails wayfind` CLI command group for dogfooding saved topo artifacts.
1254
+ - 52e15bc: Repair fresh app loading so mirrored workspace modules can resolve first-party workspace packages and their installed package dependencies from the mirror.
1255
+ - d4ec336: Add a repo-level Wayfinder dogfood smoke command that exercises the local
1256
+ Trails CLI against exported operator topo artifacts.
1257
+ - 0d1472a: Expose release rules config helpers from `@ontrails/trails/release` so
1258
+ projects can compose release policy into `trails.config.ts`.
1259
+ - 8f681ae: Move release rule evaluation into the Trails app package and export the
1260
+ release check and public trail contract fact helpers from
1261
+ `@ontrails/trails/release`.
1262
+ - 9e77ae1: Expose release rule evaluation through the `trails release check` command and
1263
+ the Trails MCP operator surface, with JSON output available through the shared
1264
+ CLI output mode.
1265
+ - fd676c4: Expose the native Bun release binding from `@ontrails/trails/release` and keep publish and registry scripts as compatibility wrappers.
1266
+ - 0ccb3e5: Add `release.smoke` as the public Trails release confidence surface for packed artifact and Wayfinder dogfood checks.
1267
+ - Updated dependencies [99523f2]
1268
+ - Updated dependencies [5e301d2]
1269
+ - Updated dependencies [4cca012]
1270
+ - Updated dependencies [3caa263]
1271
+ - Updated dependencies [708b861]
1272
+ - Updated dependencies [5be032c]
1273
+ - @ontrails/core@1.0.0-beta.21
1274
+ - @ontrails/permits@1.0.0-beta.21
1275
+ - @ontrails/topographer@1.0.0-beta.21
1276
+ - @ontrails/wayfinder@1.0.0-beta.21
1277
+ - @ontrails/adapter-kit@1.0.0-beta.21
1278
+ - @ontrails/warden@1.0.0-beta.21
1279
+ - @ontrails/commander@1.0.0-beta.21
1280
+ - @ontrails/cli@1.0.0-beta.21
1281
+ - @ontrails/http@1.0.0-beta.21
1282
+ - @ontrails/mcp@1.0.0-beta.21
1283
+ - @ontrails/observe@1.0.0-beta.21
1284
+ - @ontrails/tracing@1.0.0-beta.21
1285
+
1286
+ ## 1.0.0-beta.20
1287
+
1288
+ ### Minor Changes
1289
+
1290
+ - 396136a: Add the Trails operator MCP entrypoint with deferred surface facets and cold-context resources.
1291
+
1292
+ ### Patch Changes
1293
+
1294
+ - 851a2a3: Derive trail caller and blaze input types from the authored input schema while keeping one public input contract.
1295
+ - d89a889: Project selected Wayfinder graph-read trails into the Trails operator MCP surface alongside clearer first-class operator tools.
1296
+ - f67cd2a: Document Wayfinder as a real graph-read query catalog instead of a shell-only
1297
+ package, including MCP exposure guidance, agent skill guidance, and release
1298
+ notes for the v0 catalog and its deferred non-goals.
1299
+ - Updated dependencies [851a2a3]
1300
+ - Updated dependencies [eee1307]
1301
+ - Updated dependencies [9bec01c]
1302
+ - Updated dependencies [accb9ec]
1303
+ - Updated dependencies [8bc0708]
1304
+ - Updated dependencies [6901776]
1305
+ - Updated dependencies [f67cd2a]
1306
+ - Updated dependencies [c65c465]
1307
+ - Updated dependencies [38f62f8]
1308
+ - Updated dependencies [b248d4a]
1309
+ - Updated dependencies [5364df1]
1310
+ - Updated dependencies [2067441]
1311
+ - Updated dependencies [6c3296c]
1312
+ - @ontrails/core@1.0.0-beta.20
1313
+ - @ontrails/warden@1.0.0-beta.20
1314
+ - @ontrails/topographer@1.0.0-beta.20
1315
+ - @ontrails/adapter-kit@1.0.0-beta.20
1316
+ - @ontrails/mcp@1.0.0-beta.20
1317
+ - @ontrails/wayfinder@1.0.0-beta.20
1318
+ - @ontrails/commander@1.0.0-beta.20
1319
+ - @ontrails/cli@1.0.0-beta.20
1320
+ - @ontrails/http@1.0.0-beta.20
1321
+ - @ontrails/observe@1.0.0-beta.20
1322
+ - @ontrails/permits@1.0.0-beta.20
1323
+ - @ontrails/tracing@1.0.0-beta.20
1324
+
1325
+ ## 1.0.0-beta.19
1326
+
1327
+ ### Major Changes
1328
+
1329
+ - 1eb5bdc: Rename first-class trail composition from the `cross` API family to the `compose` family across core contracts, testing helpers, topo projections, Warden rules, CLI scaffolds, and docs. `composes`, `ctx.compose`, `composeInput`, and `Compose*` type names are now the public authoring vocabulary; topo persistence migrates legacy composition rows and graph keys forward.
1330
+ - 120caf5: Promote topo artifact commands to `trails compile` and `trails validate`.
1331
+
1332
+ ### Patch Changes
1333
+
1334
+ - e41c382: Document beta-channel install guidance in package and adapter README install snippets so consumers use explicit `@beta` (or pinned `1.0.0-beta.N`) tags instead of accidental `latest` resolution during the prerelease line. Adds the policy doc at `docs/releases/beta-channel-policy.md`, prints both `latest` and `beta` dist-tags in `bun run publish:registry-check`, and aligns plugin/skill install snippets.
1335
+ - 14714b8: Add a beta.15 to beta.19 downstream migration guide (`docs/releases/beta15-to-beta19.md`) that ties together package install, CLI/MCP/HTTP surface decisions, public output schemas, contract testing, resource mocks / `unmockable`, error taxonomy, observability, Topographer artifact workflow, layer evolution, the `cross`→`compose` composition rename, trail-versioning runtime adoption, and adapter authoring. Linked from `docs/index.md` Release Notes and cross-references the focused migration guides under `docs/migration/`.
1336
+ - 91328d3: Make `trails create` reruns reconcile existing scaffold files instead of overwriting present files and then failing on existing surfaces.
1337
+ - 6471b73: Preserve the original `create.scaffold` Result boundary when `trails create` cannot scaffold a project.
1338
+ - 51aac45: Add `entity.list` and `entity.delete` trails to the generated entity starter so fresh scaffolds model complete CRUD coverage.
1339
+ - 5efa32c: Generate project-level `AGENTS.md` and `CLAUDE.md` guidance so new Trails apps
1340
+ start with canonical agent instructions.
1341
+ - 88c0316: Generate a contextual `README.md` for new Trails projects with first-run
1342
+ commands, selected surfaces, starter notes, and agent guidance pointers.
1343
+ - 99154d4: Generate `tsconfig.tests.json` in new Trails projects so root test files are
1344
+ covered by editor TypeScript tooling without changing build output.
1345
+ - 492f71c: Move CLI, MCP, HTTP, established-surface, and surface-parity helpers behind explicit subpaths so root contract testing imports no longer require optional surface peers. The Trails CLI scaffolder now emits `import { testAllEstablished } from '@ontrails/testing/established'` for generated verification.
1346
+ - 4bc8a99: Clarify the Topographer artifact workflow around top-level `trails compile`, `trails validate`, and `trails diff` commands, including explicit diagnostics for retired `trails topo compile`, `trails topo verify`, and `trails topo check` attempts.
1347
+ - 16cb740: Run examples and contract checks across live trail version entries, and project version-entry example coverage into topo and survey reports.
1348
+ - 92e709b: Declare explicit permit scopes on mutating built-in CLI trails and scaffolded entity starter trails.
1349
+
1350
+ Preserve the resolved CLI permit on result callbacks so run-collision recovery can re-execute protected trails without losing authorization context.
1351
+
1352
+ - 1f48342: Preserve original Result error boundaries in CLI trails by returning existing Result failures directly instead of re-wrapping their errors.
1353
+ - c14aa3a: Report structured entry and graph force audit details from `trails doctor`.
1354
+ - 2df73cc: Configure scaffolded Trails projects to allow `TODO :::` fieldwork markers while keeping standard `TODO:` warning comments blocked.
1355
+ - 7f50fe2: Add version lifecycle CLI trails for revising, deprecating, archiving, and diagnosing trail version entries.
1356
+ - 653d1fc: Add a top-level `trails diff` command and extend TopoGraph diffs with version, marker, lifecycle status, support set, and force-event audit details.
1357
+ - 2e76288: Add graph-only force event projection for forced compile break acceptance and block unforced breaking topo changes.
1358
+ - 52e4e8f: Add the `@ontrails/trails` CLI package and core framework command scripts to newly scaffolded projects.
1359
+ - 58be821: Generated projects now pin `@ontrails/*` packages to the exact scaffolded
1360
+ package version instead of emitting caret prerelease ranges.
1361
+ - da7cbcb: Generated projects now include a minimal `.trails/scaffold.json` provenance
1362
+ breadcrumb recording the scaffold schema version, package version, starter
1363
+ template, and generation timestamp.
1364
+ - fc00aeb: Add adapter target conformance metadata and scaffold extracted HTTP adapters through `trails create adapter`.
1365
+ - 1c975c3: Define the Warden fix-metadata contract (`WardenFix`, `WardenFixCapability`, `WardenFixClass`, `WardenFixSafety`, `WardenFixEdit`) with optional `fix` metadata on diagnostics and rule metadata, projected through the guide, manifest, markdown, and agent guidance. Export `wardenFixClasses`/`wardenFixSafeties` value arrays and surface the rule `fix` capability in the `warden.guide` trail output schema. Dormant until a rule declares it.
1366
+ - d5d518e: Add `warden --fix` to apply safe source fixes. The executor applies only `safety: 'safe'` edits last-to-first, re-reading and rewriting affected files, while review-required, edit-less, and topo diagnostics stay reported but unapplied. The report surfaces applied, changed-file, and skipped counts.
1367
+
1368
+ Expose `fix` through the Trails app wrapper and mark the `warden` trail as write intent with explicit public access because `fix: true` mutates source files while the local governance command remains directly runnable.
1369
+
1370
+ - 678cb1c: Expose the shared adapter readiness engine through Warden's opt-in
1371
+ `--adapter-check` diagnostics and the local `trails adapter check` authoring
1372
+ workflow.
1373
+ - 619cb15: Add a Warden rule (`no-destructured-compose`) that coaches trail blazes to call `ctx.compose(...)` directly instead of destructuring `compose` from the context.
1374
+
1375
+ Keep the generated `create` trail on the direct `ctx.compose(...)` shape so framework-authored trails follow the same composition guidance.
1376
+
1377
+ - Updated dependencies [bb81ffe]
1378
+ - Updated dependencies [e41c382]
1379
+ - Updated dependencies [ed5926b]
1380
+ - Updated dependencies [a2f1825]
1381
+ - Updated dependencies [a2f1825]
1382
+ - Updated dependencies [1eb5bdc]
1383
+ - Updated dependencies [f8d80b9]
1384
+ - Updated dependencies [94a8380]
1385
+ - Updated dependencies [94a8380]
1386
+ - Updated dependencies [846a597]
1387
+ - Updated dependencies [8638dae]
1388
+ - Updated dependencies [8638dae]
1389
+ - Updated dependencies [8638dae]
1390
+ - Updated dependencies [f0f7e2f]
1391
+ - Updated dependencies [223aaad]
1392
+ - Updated dependencies [3125f4d]
1393
+ - Updated dependencies [2494dc6]
1394
+ - Updated dependencies [4bc8a99]
1395
+ - Updated dependencies [120caf5]
1396
+ - Updated dependencies [2d53717]
1397
+ - Updated dependencies [16cb740]
1398
+ - Updated dependencies [8894ecb]
1399
+ - Updated dependencies [fdf7ec9]
1400
+ - Updated dependencies [92e709b]
1401
+ - Updated dependencies [d76be13]
1402
+ - Updated dependencies [84f56a5]
1403
+ - Updated dependencies [64fb15a]
1404
+ - Updated dependencies [653d1fc]
1405
+ - Updated dependencies [431b04c]
1406
+ - Updated dependencies [2e76288]
1407
+ - Updated dependencies [5d88104]
1408
+ - Updated dependencies [f04a9ef]
1409
+ - Updated dependencies [fc00aeb]
1410
+ - Updated dependencies [1c975c3]
1411
+ - Updated dependencies [48d5ff4]
1412
+ - Updated dependencies [d5d518e]
1413
+ - Updated dependencies [216bf10]
1414
+ - Updated dependencies [ab1c77c]
1415
+ - Updated dependencies [8ca5b85]
1416
+ - Updated dependencies [4f43874]
1417
+ - Updated dependencies [678cb1c]
1418
+ - Updated dependencies [5874fd6]
1419
+ - Updated dependencies [619cb15]
1420
+ - Updated dependencies [4642268]
1421
+ - Updated dependencies [9bab0cf]
1422
+ - Updated dependencies [3ceeba8]
1423
+ - Updated dependencies [beafd03]
1424
+ - Updated dependencies [7b173e0]
1425
+ - Updated dependencies [6e50e7b]
1426
+ - Updated dependencies [48edf8d]
1427
+ - Updated dependencies [12ffa3b]
1428
+ - Updated dependencies [2f262f7]
1429
+ - Updated dependencies [58b01f2]
1430
+ - @ontrails/adapter-kit@1.0.0-beta.19
1431
+ - @ontrails/core@1.0.0-beta.19
1432
+ - @ontrails/cli@1.0.0-beta.19
1433
+ - @ontrails/commander@1.0.0-beta.19
1434
+ - @ontrails/http@1.0.0-beta.19
1435
+ - @ontrails/mcp@1.0.0-beta.19
1436
+ - @ontrails/topographer@1.0.0-beta.19
1437
+ - @ontrails/warden@1.0.0-beta.19
1438
+ - @ontrails/observe@1.0.0-beta.19
1439
+ - @ontrails/tracing@1.0.0-beta.19
1440
+ - @ontrails/permits@1.0.0-beta.19
1441
+
1442
+ ## 1.0.0-beta.18
1443
+
1444
+ ### Patch Changes
1445
+
1446
+ - Updated dependencies [c0b2948]
1447
+ - Updated dependencies [fc3219c]
1448
+ - Updated dependencies [bc2d327]
1449
+ - Updated dependencies [bf44972]
1450
+ - Updated dependencies [57c8672]
1451
+ - Updated dependencies [510ea50]
1452
+ - Updated dependencies [e0ae995]
1453
+ - @ontrails/http@1.0.0-beta.18
1454
+ - @ontrails/observe@1.0.0-beta.18
1455
+ - @ontrails/tracing@1.0.0-beta.18
1456
+ - @ontrails/commander@1.0.0-beta.18
1457
+ - @ontrails/cli@1.0.0-beta.18
1458
+ - @ontrails/core@1.0.0-beta.18
1459
+ - @ontrails/mcp@1.0.0-beta.18
1460
+ - @ontrails/permits@1.0.0-beta.18
1461
+ - @ontrails/topographer@1.0.0-beta.18
1462
+ - @ontrails/warden@1.0.0-beta.18
1463
+
1464
+ ## 1.0.0-beta.17
1465
+
1466
+ ### Patch Changes
1467
+
1468
+ - 41276d2: Expose a shipped surface projection inventory through survey output and trail detail reports.
1469
+ - Updated dependencies [3dc8254]
1470
+ - Updated dependencies [61497c5]
1471
+ - @ontrails/core@1.0.0-beta.17
1472
+ - @ontrails/cli@1.0.0-beta.17
1473
+ - @ontrails/commander@1.0.0-beta.17
1474
+ - @ontrails/http@1.0.0-beta.17
1475
+ - @ontrails/mcp@1.0.0-beta.17
1476
+ - @ontrails/observe@1.0.0-beta.17
1477
+ - @ontrails/permits@1.0.0-beta.17
1478
+ - @ontrails/topographer@1.0.0-beta.17
1479
+ - @ontrails/tracing@1.0.0-beta.17
1480
+ - @ontrails/warden@1.0.0-beta.17
1481
+
1482
+ ## 1.0.0-beta.16
1483
+
1484
+ ### Major Changes
1485
+
1486
+ - abc8c68: Move the brief capability report from the bare `survey` flag surface to the role-anchored `survey.brief` trail.
1487
+ - 04e2a2e: Move saved contract diffing from the bare `survey` flag surface to the `survey.diff` trail, with optional `against` targets and `breakingOnly` filtering.
1488
+ - ed171d5: Split `trails survey` detail inspection into role-anchored `survey.trail`, `survey.resource`, and `survey.signal` trails while keeping bare `survey <id>` as an all-kinds lookup. Remove the temporary `survey --openapi` and `topo.show` CLI shapes. CLI command projection now supports executable parent commands with positional arguments alongside child commands.
1489
+ - de30d6c: Introduce `topo.compile` as the canonical trail for writing `.trails` lockfile
1490
+ and surface artifacts, remove the `survey --generate` mode, and update drift
1491
+ guidance to point at the compile command.
1492
+ - 938f005: Cut CLI topo compile and survey diff surfaces over to the lock v3 artifact family. `topo.compile` now reports `topoPath` for `.trails/topo.lock`, survey diff accepts explicit `topo.lock` files and directories containing `topo.lock`, and new scaffolds no longer ignore committed root lock artifacts.
1493
+ - 10eae9a: Migrate the Trails workspace to the documented `.trails/` layout: committed `.lock` files at the workspace root, ignored `cache/` for rebuildable derived data, ignored `state/` for mutable runtime state, and `.trails/config.local.{ts,js}` for local overrides. The default SQLite path is now `.trails/state/trails.db`. Workspace bootstrap creates only `cache/` and `state/` — the legacy `dev/` and `generated/` subdirectories are no longer created. Dev reset cleans both the new `.trails/state/` paths and legacy `.trails/trails.db*` and `.trails/dev/tracing.db*` paths for one cycle. Scaffold and workspace gitignores reflect the new layout.
1494
+
1495
+ Workspace bootstrap is now owned by a single canonical source in `@ontrails/core`. The package exposes `ensureTrailsWorkspace()`, `WORKSPACE_GITIGNORE_CONTENT`, and `WORKSPACE_GITIGNORE_LINES`. `@ontrails/config` no longer exports its own `ensureWorkspace` (consumers should import from `@ontrails/core`). `trails create` now writes `.trails/.gitignore` during scaffolding so a fresh-scaffolded project's initial commit includes the workspace gitignore (resolves TRL-703).
1496
+
1497
+ ### Minor Changes
1498
+
1499
+ - a18a25d: Update `trails warden` to use the shared `@ontrails/warden` command surface and final Sprint 1 flags.
1500
+
1501
+ The integrated CLI now projects `--ci`, `--pre-push`, `--depth`, `--fail-on`, `--strict`, `--format`, `--lock`, `--drafts`, `--apps`, `--no-lock-mutation`, and the local Warden aliases into the same runner used by the package `warden` bin. The old `lintOnly`, `driftOnly`, and `tier` inputs are replaced by `--depth` and `--lock` semantics.
1502
+
1503
+ - 3b5697a: Add the `run` trail family to `apps/trails` for direct trail invocation by ID. `trails run <id> '<inline-json>'` resolves the trail in the current app's topo and executes it through the shared `run()` pipeline from `@ontrails/core`, returning a typed direct-invocation envelope. `run.examples` lists authored examples and `run.example` executes one named example with an actual-vs-expected comparison. Single-app resolution only on this branch; multi-app workspace resolution plus `--app` override land in TRL-406. Not-found maps to `Result.err(NotFoundError)` and CLI exit code 2 via the existing error taxonomy. Self-hosted: the trail family authors happy-path and not-found examples, exercised by `testExamples(app)`.
1504
+ - fbd42fc: Unify structured CLI input around `--input <path|->` and `--input-json`.
1505
+ `--input` reads JSON from a file path or from stdin when the value is `-`;
1506
+ `--input-file`, `--stdin`, and the `structuredInputFieldByTrail` routing
1507
+ option are removed. Structured payloads now merge directly into each trail's
1508
+ typed input object, so `trails run` callers provide the inner trail payload
1509
+ under the run trail's `input` field.
1510
+ - 63d1aef: Add `--quiet` / `-q` flag to strip the `inner-trail-result` envelope from `trails run` stdout. On success, stdout becomes the inner value JSON only (no `{ kind, trailId, value }` wrapper). Composes with `--json` / `--jsonl` (those control format; `--quiet` controls envelope vs unwrapped). Wired as a global CLI flag via `outputModePreset()` so all commands surface it; the run-trail-specific unwrap logic lives in `apps/trails/src/cli.ts` next to the existing collision-recovery wrapper.
1511
+ - 5a3c245: Add `run.example` for named example execution. It loads a named example, executes the inner trail with the example's input, and compares actual vs expected per the example's contract (`expected` deep-equal, `expectedMatch` partial-match, or `error` class match). Returns a structured `RunExampleComparison` envelope with input/expected/actual/match/diff. The CLI surface helper prints an OK summary on match (exit 0), or a diff and `ValidationError` on mismatch (exit 1). Unknown example names produce `NotFoundError` (exit 2) with the available examples listed.
1512
+ - 93e9d44: Add `run.examples` for listing a trail's examples without executing. The split run family gives examples listing its own typed input and structured `RunExamplesListing` output (`{ kind: 'examples-listing', trailId, examples }`) instead of adding an `--examples` mode flag to `run`. The CLI surface helper formats text-mode tables (name + truncated input + outcome) and unwraps to a JSON/JSONL array when `--json`/`--jsonl` is set. Trails with no examples emit `No examples defined` (text) or `[]` (JSON). Unknown trail IDs still surface `NotFoundError` (exit code 2).
1513
+ - 8f5bda0: Wire workspace topo discovery into the `run` trail with collision UX. `run` accepts an optional `app?: string` input that auto-projects as `--app <name>` on the CLI. Resolution flow: `--app` provided → use it; else if the trail ID is unambiguous in the workspace index → use the single owning app; else if colliding → return `Result.err(AmbiguousError)` whose message names the candidates and suggests `--app`. The CLI surface adds a TTY-aware bridge (`tryRecoverFromRunCollision`) that prompts via clack when stdin is a TTY and the trail returned an `AmbiguousError`, then re-executes with the chosen app. Non-TTY contexts surface the error and exit with code 1. Trail logic stays surface-agnostic; TTY detection and prompts live in the CLI bridge.
1514
+ - c8caa5e: Wire the `--trace` flag for the `trails run` family. Adds `tracePreset()` to `@ontrails/cli` (registered via the `presets` option) and threads `'trace'` through `META_FLAG_CANDIDATES` so the flag is treated as CLI metadata (never routed into trail input). On activation, `apps/trails/src/cli.ts` installs a per-invocation memory sink before `surface()` runs and finalizes it in a `finally` block: the post-execution tree (rendered via `renderTraceTree` from TRL-411) goes to stderr; the result still goes to stdout. With `--trace --json`, regular `trails run <id>` emits a single JSON envelope on stdout that includes `tracing: TraceRecord[]`; `trails run example <id> <exampleName>` keeps its comparison envelope, and `trails run examples <id>` remains a metadata read. `--quiet` keeps the tree on stderr and the unwrapped value on stdout, while `--jsonl` streams items as before. Sink registration is per-invocation so concurrent runs don't bleed records.
1515
+ - f4b90c9: Add `--watch` for the `trails run` family. File-system events are cheap wake-ups; the rerun gate compares the resolved trail's surface-map entry hash so edits only rerun when the public contract for the watched trail changes. New `watchPreset()` exposes the boolean flag; `'watch'` is added to `META_FLAG_CANDIDATES` so the flag never routes into trail input. The watch loop in `apps/trails/src/run-watch.ts` runs once, then sets up a debounced (`100ms`) `node:fs.watch` filtered to `.ts`/`.tsx`/`.js`/`.mjs`/`.cjs` extensions in the trail's source directory. SIGINT closes the watcher cleanly. A short startup warmup window (`150ms`) suppresses the macOS FSEvents replay event that would otherwise produce a phantom rerun on first invocation.
1516
+ - 2a2e072: Compose `--watch` with the split `run example` command and `--trace` cleanly. Moves the `--trace` session install/finalize bracket inside `runSurfaceOnce` so each watch rerun gets a fresh memory sink and stderr tree (previously the sink was process-scoped and accumulated records across reruns, suppressing the per-rerun tree until SIGINT). Adds integration tests covering the example-comparison rerun loop, trace-record freshness across reruns, and error recovery (a thrown rerun does not exit the watch loop). Documents the TDD-in-terminal workflow in the Direct Invocation ADR draft.
1517
+ - 85c39c4: Add shell completion infrastructure and trail-ID completion. New `apps/trails/src/completions.ts` exposes `renderCompletionScript('bash' | 'zsh' | 'fish', binName)` and `renderTrailIdCompletions(workspaceRoot, prefix)` (reads the workspace topo via `buildWorkspaceTrailIndex`). Two new trails register on the topo: `completions` (returns the completion script for a chosen shell) and `completions.__complete` (the dynamic suggestion endpoint that the static script delegates to at tab-press time). Per-shell logic lives in a `Record<CompletionShell, ScriptRenderer>` lookup; the dynamic dispatch table is keyed by subcommand so TRL-416 (example-name completion) lands as a new entry.
1518
+ - 6f5bf81: Add example-name completion to the dynamic suggestion endpoint. When the user tab-completes the example-name argument in `trails run example <trail-id> <prefix>`, the completion returns the named trail's `examples` array (filtered by prefix, sorted). New `renderTrailExampleCompletions(workspaceRoot, trailId, prefix)` helper resolves the trail's owning app via the workspace index, loads the topo with `tryLoadFreshAppLease`, and derives examples via `deriveStructuredTrailExamples`. Recoverable load/lookup failures return typed `RecoverableCompletionError` values from the helper and are suppressed to `[]` only at the internal `completions.__complete` shell boundary so tab completion stays quiet.
1519
+ - 3d4e921: Add `trails completions install [--shell bash|zsh|fish]` for installing the completion script to the standard per-shell location. This is a CLI bridge command, not a topo trail: it uses `renderCompletionScript`, auto-detects `$SHELL` when `--shell` is omitted, creates parent directories as needed, and writes to:
1520
+
1521
+ - bash → `~/.local/share/bash-completion/completions/trails`
1522
+ - zsh → `~/.local/share/zsh/site-functions/_trails` (user must add to `$fpath` if not already)
1523
+ - fish → `~/.config/fish/completions/trails.fish`
1524
+
1525
+ Output reports `{ shell, path, created, message }`. Idempotent — second run reports `created: false` and overwrites with the freshest script. Detection failure (missing/unsupported `$SHELL`) returns `Result.err(ValidationError)` with a message naming the supported shells. Test seam allows injecting `homeDir` and `shellEnv` so the trail never mutates global state.
1526
+
1527
+ - 863d473: Add three attachment scopes for typed layers — trail, surface, topo — with composition order **topo → surface → trail → blaze**. `TrailSpec` and `Trail` gain `layers?: readonly Layer[]` (default `[]`). `topo()` accepts `{ layers: [...] }` as the third options argument; the topo carries those layers and they reach the executor via `ExecuteTrailOptions.topoLayers`. The CLI's `surface()`/`createProgram()`/`deriveCliCommands` already supports a `layers` option; that now flows through `runTrailOnce` as `surfaceLayers`. The executor builds the layer chain `[...topoLayers, ...surfaceLayers, ...trail.layers, ...options.layers]` so topo wraps surface wraps trail wraps blaze (verified by composition-order tests at every level). Survey's `TrailDetailReport` adds `composedLayers: { topo, surface, trail }` so agents can introspect the layer chain per trail. Backward-compatible: every new field is optional with a non-undefined default; existing call sites are unchanged.
1528
+ - 802fdfc: Rename Warden guide manifest rule grouping from `category` to `concern` so the
1529
+ public JSON contract matches the source metadata field.
1530
+ - f6fdc62: Add structured Warden remediation guidance to rule metadata, diagnostics, report output, and the `trails warden` result schema.
1531
+ - a10ffa4: Add a Warden guide manifest projection and expose it through `trails warden guide` in markdown, agent-json, and manifest formats.
1532
+
1533
+ ### Patch Changes
1534
+
1535
+ - 73622ae: Thread `ResourceSpec.config` through the built-in auth resource. Resource config schemas that accept `undefined` now receive their parsed default when config values are omitted, and `authResource` can materialize the no-op or JWT adapter from typed config while preserving existing mock and override paths.
1536
+ - 25f3c5c: Add the dedicated `@ontrails/commander` adapter package and move the Commander runtime out of the `@ontrails/cli/commander` subpath. Extend the repo-local package-source guardrails to cover adapter package source as the Commander runtime moves under `adapters/`.
1537
+ - f20cb51: Update generated CLI scaffolds and current-facing docs to use the dedicated `@ontrails/commander` adapter package.
1538
+ - 20d7a5c: Enforce the shared safe error projection policy for public error bodies, diagnostics, serialized payloads, and CLI stderr.
1539
+ - e898cc4: Add repo-level Knip dead-code detection and remove stale internal exports and unused package dependencies surfaced by the new check.
1540
+ - 200bece: BREAKING: rename auth connector vocabulary to adapter.
1541
+
1542
+ This stays on the current `1.0.0-beta` prerelease line: the package is part of
1543
+ the fixed `@ontrails/*` beta group, so beta-breaking API renames advance the
1544
+ next beta rather than opening a stable-major release line.
1545
+
1546
+ - `AuthConnector` -> `AuthAdapter`
1547
+ - `authConnectorSchema` -> `authAdapterSchema`
1548
+ - `JwtConnectorOptions` -> `JwtAdapterOptions`
1549
+ - `createJwtConnector` -> `createJwtAdapter`
1550
+ - auth resource config discriminant `{ connector: 'jwt' | 'none' }` -> `{ adapter: 'jwt' | 'none' }`
1551
+
1552
+ The `@ontrails/permits/jwt` subpath is unchanged. The internal `connectors/`
1553
+ source directory becomes `adapters/`. See
1554
+ `docs/migration/connector-to-adapter.md` for the full rename map.
1555
+
1556
+ The Trails CLI package updates its generated auth-resource configuration to use
1557
+ the new `adapter` discriminant.
1558
+
1559
+ - 3395234: Move store adapter-binding helpers to `@ontrails/store/adapter-support` and topographer direct database/admin helpers to `@ontrails/topographer/backend-support`, keeping root exports focused on contract-level APIs.
1560
+ - d40430d: Remove the retired `@ontrails/logging` workspace from the prerelease package set. Use `@ontrails/observe` for log and trace sink contracts and `@ontrails/logtape` for LogTape forwarding.
1561
+ - 331e3a9: Relocate the topo-store public API from `@ontrails/core` to `@ontrails/topographer` per ADR-0042. Generic `trails-db` helpers (`openReadTrailsDb`, `openWriteTrailsDb`, `ensureSubsystemSchema`, `deriveTrailsDbPath`, `deriveTrailsDir`) stay in core because tracing and other subsystems share them.
1562
+
1563
+ Breaking pre-1.0 beta change. Update consumer imports:
1564
+
1565
+ ```diff
1566
+ - import { topoStore, createTopoStore, createMockTopoStore, createTopoSnapshot, listTopoSnapshots, pinTopoSnapshot, unpinTopoSnapshot, createStoredTopoSnapshot, getStoredTopoExport, countTopoSnapshots, countPinnedSnapshots, countPrunableSnapshots, pruneUnpinnedSnapshots } from '@ontrails/core';
1567
+ + import { topoStore, createTopoStore, createMockTopoStore, createTopoSnapshot, listTopoSnapshots, pinTopoSnapshot, unpinTopoSnapshot } from '@ontrails/topographer';
1568
+ + import { createStoredTopoSnapshot, getStoredTopoExport, countTopoSnapshots, countPinnedSnapshots, countPrunableSnapshots, pruneUnpinnedSnapshots } from '@ontrails/topographer/backend-support';
1569
+ ```
1570
+
1571
+ The same root move applies to types `ReadOnlyTopoStore`, `MockTopoStoreSeed`, `TopoSnapshot`, `TopoStoreRef`, `TopoStoreExportRecord`, `TopoStoreResourceRecord`, `TopoStoreTrailRecord`, `TopoStoreTrailDetailRecord`, `CreateTopoSnapshotInput`, and `ListTopoSnapshotsOptions`. The direct DB helper type `StoredTopoExport` moves to `@ontrails/topographer/backend-support`.
1572
+
1573
+ Core newly exports `activationSourceKey`, `projectActivationSourceDeclaration`, `activationSourceDeclarationSignature`, and the `ActivationSourceProjection` type — these were already used internally and are now part of the public surface so `@ontrails/topographer` (the only consumer that needs them) can import them through normal package channels.
1574
+
1575
+ - 4399fdb: Renamed `@ontrails/schema` to `@ontrails/topographer`. Mechanical rename only — no API changes. Update import sites from `@ontrails/schema` to `@ontrails/topographer`. See ADR-0042 for the durable graph substrate doctrine.
1576
+ - dbd17db: Remove the unused legacy `@ontrails/logging` dependency from the Trails CLI app package.
1577
+ - 2dd9cda: Promote ADR-0043 (Layer Evolution) from draft to accepted, amend it on 2026-05-04 to remove the briefly proposed `Middleware` split, and publish the Layer Evolution Migration Guide at `docs/migration/layer-evolution.md`.
1578
+
1579
+ Documentation-only change capturing the post-implementation state of the layer-evolution work shipped across TRL-471 through TRL-476: typed `Layer` primitive with optional `input` schema, three attachment scopes (trail, surface, topo), CLI/MCP/HTTP surface projection of layer inputs, removal of `authLayer`, `autoIterateLayer`, and `dateShortcutsLayer`, and warden coaching via `no-legacy-layer-imports` (error). The migration guide is the durable countermeasure to the vocabulary churn flagged in ADR-0043's tradeoffs.
1580
+
1581
+ - ed7f6f6: Expand topo-store and survey trail detail records with resolved TopoGraph contract facts for blind-agent review.
1582
+ - fb10112: Polish Warden guidance projection by preserving labels in plain-text doc links
1583
+ and reusing the shared diagnostic schema from the Trails CLI wrapper.
1584
+ - 7a1d4a9: Rename the public resolved graph API from `SurfaceMap` to `TopoGraph`, including
1585
+ the derive, hash, diff, and current graph artifact I/O helpers.
1586
+ - 84f595a: Add lock v3 manifest and `topo.lock` I/O. `trails.lock` now reads as a compact v3 manifest that points at the serialized TopoGraph artifact, and legacy v2/hash-only lock inputs fail with a regenerate instruction.
1587
+ - d2cb9ba: Rename topo-store export artifacts from surface-era names to TopoGraph names. The `topo_exports` table now stores `topo_graph`, `topo_graph_hash`, and `lock_manifest`, and backend-support export records expose `topoGraphJson`, `topoGraphHash`, and `lockManifestJson`.
1588
+ - 8ddf5ff: Extend `runWarden` into the shared Warden orchestration entrypoint with effective config resolution, depth/fail thresholds, rule facets, and multi-topo report metadata.
1589
+
1590
+ Adapt the built-in `trails warden` wrapper to consume the readonly Warden report diagnostics contract without weakening its output schema.
1591
+
1592
+ - Updated dependencies [73622ae]
1593
+ - Updated dependencies [e991a5b]
1594
+ - Updated dependencies [25f3c5c]
1595
+ - Updated dependencies [6300f70]
1596
+ - Updated dependencies [d172013]
1597
+ - Updated dependencies [c3fc5c3]
1598
+ - Updated dependencies [20d7a5c]
1599
+ - Updated dependencies [be5fb46]
1600
+ - Updated dependencies [199304e]
1601
+ - Updated dependencies [e898cc4]
1602
+ - Updated dependencies [a8997ed]
1603
+ - Updated dependencies [fe03945]
1604
+ - Updated dependencies [2bf239e]
1605
+ - Updated dependencies [200bece]
1606
+ - Updated dependencies [e4beec9]
1607
+ - Updated dependencies [3395234]
1608
+ - Updated dependencies [d40430d]
1609
+ - Updated dependencies [bcdc484]
1610
+ - Updated dependencies [3f678d4]
1611
+ - Updated dependencies [ed171d5]
1612
+ - Updated dependencies [49c2e7d]
1613
+ - Updated dependencies [de30d6c]
1614
+ - Updated dependencies [331e3a9]
1615
+ - Updated dependencies [c40865a]
1616
+ - Updated dependencies [4399fdb]
1617
+ - Updated dependencies [578e674]
1618
+ - Updated dependencies [4b8d13b]
1619
+ - Updated dependencies [4b8d13b]
1620
+ - Updated dependencies [4b8d13b]
1621
+ - Updated dependencies [4b8d13b]
1622
+ - Updated dependencies [fbd42fc]
1623
+ - Updated dependencies [63d1aef]
1624
+ - Updated dependencies [6be2e95]
1625
+ - Updated dependencies [819de09]
1626
+ - Updated dependencies [be08686]
1627
+ - Updated dependencies [112b9f2]
1628
+ - Updated dependencies [893025e]
1629
+ - Updated dependencies [ed888e2]
1630
+ - Updated dependencies [2e05e27]
1631
+ - Updated dependencies [9cdb0f2]
1632
+ - Updated dependencies [c8caa5e]
1633
+ - Updated dependencies [f4b90c9]
1634
+ - Updated dependencies [eec5e9d]
1635
+ - Updated dependencies [4e75129]
1636
+ - Updated dependencies [47505fe]
1637
+ - Updated dependencies [ebd4434]
1638
+ - Updated dependencies [863d473]
1639
+ - Updated dependencies [344f2f7]
1640
+ - Updated dependencies [26f9ffd]
1641
+ - Updated dependencies [66056ac]
1642
+ - Updated dependencies [ad553a6]
1643
+ - Updated dependencies [2dd9cda]
1644
+ - Updated dependencies [b12e19b]
1645
+ - Updated dependencies [ed7f6f6]
1646
+ - Updated dependencies [fb10112]
1647
+ - Updated dependencies [802fdfc]
1648
+ - Updated dependencies [0bad534]
1649
+ - Updated dependencies [bfabe09]
1650
+ - Updated dependencies [7a1d4a9]
1651
+ - Updated dependencies [84f595a]
1652
+ - Updated dependencies [d2cb9ba]
1653
+ - Updated dependencies [2cc05da]
1654
+ - Updated dependencies [10eae9a]
1655
+ - Updated dependencies [bbb1ea4]
1656
+ - Updated dependencies [22c6c06]
1657
+ - Updated dependencies [767eb41]
1658
+ - Updated dependencies [82019a7]
1659
+ - Updated dependencies [f6fdc62]
1660
+ - Updated dependencies [a10ffa4]
1661
+ - Updated dependencies [df9a7d0]
1662
+ - Updated dependencies [7085f01]
1663
+ - Updated dependencies [30a2c7e]
1664
+ - Updated dependencies [81bffec]
1665
+ - Updated dependencies [8ddf5ff]
1666
+ - Updated dependencies [f5b6112]
1667
+ - Updated dependencies [d675a53]
1668
+ - @ontrails/core@1.0.0-beta.16
1669
+ - @ontrails/cli@1.0.0-beta.16
1670
+ - @ontrails/permits@1.0.0-beta.16
1671
+ - @ontrails/commander@1.0.0-beta.16
1672
+ - @ontrails/warden@1.0.0-beta.16
1673
+ - @ontrails/observe@1.0.0-beta.16
1674
+ - @ontrails/tracing@1.0.0-beta.16
1675
+ - @ontrails/topographer@1.0.0-beta.16
1676
+
1677
+ ## 1.0.0-beta.15
1678
+
1679
+ ### Patch Changes
1680
+
1681
+ - 2003fa5: Prepare the Trails CLI for beta.15 release publishing: derive the CLI version from package metadata, scaffold publishable package ranges, add HTTP surface generation, include the scaffold toolchain dependencies, and avoid generating unsupported Warden flags.
1682
+ - Updated dependencies [4ad6b25]
1683
+ - @ontrails/core@1.0.0-beta.15
1684
+ - @ontrails/cli@1.0.0-beta.15
1685
+ - @ontrails/tracing@1.0.0-beta.15
1686
+ - @ontrails/warden@1.0.0-beta.15
1687
+ - @ontrails/observe@1.0.0-beta.15
1688
+ - @ontrails/topographer@1.0.0-beta.15
1689
+
1690
+ ## 1.0.0-beta.14
1691
+
1692
+ ### Minor Changes
1693
+
1694
+ - 69057e9: Add hierarchical CLI command trees and structured input, enforce established-only topo exports across trailheads, move developer topo and tracker state onto shared `trails.db` with pins and maintenance flows, and ship schema-derived stores through `@ontrails/store` and its Drizzle runtime.
1695
+
1696
+ ### Patch Changes
1697
+
1698
+ - Updated dependencies [69057e9]
1699
+ - @ontrails/cli@1.0.0-beta.14
1700
+ - @ontrails/core@1.0.0-beta.14
1701
+ - @ontrails/logging@1.0.0-beta.14
1702
+ - @ontrails/schema@1.0.0-beta.14
1703
+ - @ontrails/tracker@1.0.0-beta.14
1704
+ - @ontrails/warden@1.0.0-beta.14
1705
+
1706
+ ## 1.0.0-beta.13
1707
+
1708
+ ### Patch Changes
1709
+
1710
+ - Updated dependencies [6944147]
1711
+ - Updated dependencies
1712
+ - @ontrails/core@1.0.0-beta.13
1713
+ - @ontrails/cli@1.0.0-beta.13
1714
+ - @ontrails/schema@1.0.0-beta.13
1715
+ - @ontrails/warden@1.0.0-beta.13
1716
+ - @ontrails/logging@1.0.0-beta.13
1717
+
1718
+ ## 1.0.0-beta.12
1719
+
1720
+ ### Patch Changes
1721
+
1722
+ - Updated dependencies
1723
+ - @ontrails/core@1.0.0-beta.12
1724
+ - @ontrails/cli@1.0.0-beta.12
1725
+ - @ontrails/logging@1.0.0-beta.12
1726
+ - @ontrails/schema@1.0.0-beta.12
1727
+ - @ontrails/warden@1.0.0-beta.12
1728
+
1729
+ ## 1.0.0-beta.11
1730
+
1731
+ ### Patch Changes
1732
+
1733
+ - Add services as a first-class primitive.
1734
+
1735
+ Services make infrastructure dependencies declarative, injectable, and governable. Define a service with `provision()`, declare it on a trail with `provisions: [db]`, and access it with `db.from(ctx)` or `ctx.provision()`.
1736
+
1737
+ **Core:** `provision()` factory, `ServiceSpec<T>`, `ServiceContext`, singleton resolution in `executeTrail`, in-flight creation dedup, `isService` guard, `findDuplicateServiceId`, topo service discovery and validation, `services` field on trail specs.
1738
+
1739
+ **Testing:** Auto-resolution of `mock` factories in `testAll`, `testExamples`, `testContracts`, and `testCrosses`. Explicit `services` overrides with correct precedence (`explicit > ctx.extensions > auto-mock`). Service mock propagation through crossing graphs.
1740
+
1741
+ **Warden:** `service-declarations` rule validates `db.from(ctx)` and `ctx.provision()` usage matches declared `provisions: [...]`. `service-exists` rule validates declared service IDs resolve in project context. Scope-aware AST walking skips nested function boundaries.
1742
+
1743
+ **Trailheads:** Service overrides thread through `run` and `trailhead` on CLI, MCP, and HTTP.
1744
+
1745
+ **Introspection:** Survey and trailhead map outputs include service graph. Topo exposes `.services`, `.getService()`, `.hasService()`, `.listServices()`, `.serviceIds()`, `.serviceCount`.
1746
+
1747
+ **Docs:** ADR-009 accepted. Unified services guide, updated vocabulary, getting-started, architecture, and package READMEs.
1748
+
1749
+ - Updated dependencies
1750
+ - @ontrails/core@1.0.0-beta.11
1751
+ - @ontrails/warden@1.0.0-beta.11
1752
+ - @ontrails/cli@1.0.0-beta.11
1753
+ - @ontrails/schema@1.0.0-beta.11
1754
+ - @ontrails/logging@1.0.0-beta.11
1755
+
1756
+ ## 1.0.0-beta.10
1757
+
1758
+ ### Patch Changes
1759
+
1760
+ - Updated dependencies
1761
+ - @ontrails/core@1.0.0-beta.10
1762
+ - @ontrails/cli@1.0.0-beta.10
1763
+ - @ontrails/warden@1.0.0-beta.10
1764
+ - @ontrails/logging@1.0.0-beta.10
1765
+ - @ontrails/schema@1.0.0-beta.10
1766
+
1767
+ ## 1.0.0-beta.9
1768
+
1769
+ ### Patch Changes
1770
+
1771
+ - Updated dependencies
1772
+ - @ontrails/core@1.0.0-beta.9
1773
+ - @ontrails/cli@1.0.0-beta.9
1774
+ - @ontrails/schema@1.0.0-beta.9
1775
+ - @ontrails/warden@1.0.0-beta.9
1776
+ - @ontrails/logging@1.0.0-beta.9
1777
+
1778
+ ## 1.0.0-beta.8
1779
+
1780
+ ### Patch Changes
1781
+
1782
+ - Updated dependencies
1783
+ - @ontrails/schema@1.0.0-beta.8
1784
+ - @ontrails/cli@1.0.0-beta.8
1785
+ - @ontrails/core@1.0.0-beta.8
1786
+ - @ontrails/logging@1.0.0-beta.8
1787
+ - @ontrails/warden@1.0.0-beta.8
1788
+
1789
+ ## 1.0.0-beta.7
1790
+
1791
+ ### Minor Changes
1792
+
1793
+ - HTTP trailhead and OpenAPI generation.
1794
+
1795
+ **http**: New `@ontrails/http` package — Hono-based HTTP connector. `trailhead()` derives routes from trail IDs, maps intent to HTTP verbs (read→GET, write→POST, destroy→DELETE), and maps error taxonomy to status codes. Returns the Hono instance.
1796
+
1797
+ **schema**: Add `generateOpenApiSpec(topo)` — generates a complete OpenAPI 3.1 spec from the topo. Each trail becomes an operation with path, method, schemas, and error responses derived from the contract.
1798
+
1799
+ **trails**: `trails survey --openapi` outputs the OpenAPI spec for any Trails app.
1800
+
1801
+ ### Patch Changes
1802
+
1803
+ - Updated dependencies
1804
+ - @ontrails/schema@1.0.0-beta.7
1805
+ - @ontrails/warden@1.0.0-beta.7
1806
+ - @ontrails/cli@1.0.0-beta.7
1807
+ - @ontrails/core@1.0.0-beta.7
1808
+ - @ontrails/logging@1.0.0-beta.7
1809
+
1810
+ ## 1.0.0-beta.6
1811
+
1812
+ ### Patch Changes
1813
+
1814
+ - Updated dependencies
1815
+ - @ontrails/core@1.0.0-beta.6
1816
+ - @ontrails/warden@1.0.0-beta.6
1817
+ - @ontrails/cli@1.0.0-beta.6
1818
+ - @ontrails/logging@1.0.0-beta.6
1819
+ - @ontrails/schema@1.0.0-beta.6
1820
+
1821
+ ## 1.0.0-beta.5
1822
+
1823
+ ### Patch Changes
1824
+
1825
+ - Updated dependencies
1826
+ - @ontrails/core@1.0.0-beta.5
1827
+ - @ontrails/warden@1.0.0-beta.5
1828
+ - @ontrails/logging@1.0.0-beta.5
1829
+ - @ontrails/schema@1.0.0-beta.5
1830
+ - @ontrails/cli@1.0.0-beta.5
1831
+
1832
+ ## 1.0.0-beta.4
1833
+
1834
+ ### Major Changes
1835
+
1836
+ - API simplification: unified trail model, intent enum, run, metadata.
1837
+
1838
+ **BREAKING CHANGES:**
1839
+
1840
+ - `hike()` removed — use `trail()` with optional `crosses: [...]` field
1841
+ - `follows` renamed to `crosses` (matching `ctx.cross()`)
1842
+ - `topo.hikes` removed — single `topo.trails` map
1843
+ - `kind: 'hike'` removed — everything is `kind: 'trail'`
1844
+ - `readOnly`/`destructive` booleans replaced by `intent: 'read' | 'write' | 'destroy'`
1845
+ - `implementation` field renamed to `run`
1846
+ - `markers` field renamed to `metadata`
1847
+ - `testHike` renamed to `testCrosses`, `HikeScenario` to `CrossScenario`
1848
+ - `trailhead()` now returns the trailhead handle (`Command` for CLI, `Server` for MCP)
1849
+
1850
+ ### Patch Changes
1851
+
1852
+ - Updated dependencies
1853
+ - @ontrails/core@1.0.0-beta.4
1854
+ - @ontrails/cli@1.0.0-beta.4
1855
+ - @ontrails/warden@1.0.0-beta.4
1856
+ - @ontrails/schema@1.0.0-beta.4
1857
+ - @ontrails/logging@1.0.0-beta.4
1858
+
1859
+ ## 1.0.0-beta.3
1860
+
1861
+ ### Patch Changes
1862
+
1863
+ - Updated dependencies
1864
+ - @ontrails/core@1.0.0-beta.3
1865
+ - @ontrails/cli@1.0.0-beta.3
1866
+ - @ontrails/warden@1.0.0-beta.3
1867
+ - @ontrails/logging@1.0.0-beta.3
1868
+ - @ontrails/schema@1.0.0-beta.3
1869
+
1870
+ ## 1.0.0-beta.2
1871
+
1872
+ ### Patch Changes
1873
+
1874
+ - Fix workspace dependency resolution in published packages. Now using bun publish
1875
+ which correctly replaces workspace:^ with actual version numbers.
1876
+ - Updated dependencies
1877
+ - @ontrails/core@1.0.0-beta.2
1878
+ - @ontrails/cli@1.0.0-beta.2
1879
+ - @ontrails/logging@1.0.0-beta.2
1880
+ - @ontrails/warden@1.0.0-beta.2
1881
+ - @ontrails/schema@1.0.0-beta.2
1882
+
1883
+ ## 1.0.0-beta.1
1884
+
1885
+ ### Patch Changes
1886
+
1887
+ - Fix two blocking bugs from real-world migration:
1888
+ - Published packages now resolve correctly (workspace:^ instead of workspace:\*)
1889
+ - Error forwarding works across different success types (Err no longer carries phantom T)
1890
+ - Updated dependencies
1891
+ - @ontrails/core@1.0.0-beta.1
1892
+ - @ontrails/cli@1.0.0-beta.1
1893
+ - @ontrails/logging@1.0.0-beta.1
1894
+ - @ontrails/warden@1.0.0-beta.1
1895
+ - @ontrails/schema@1.0.0-beta.1
1896
+
1897
+ ## 0.1.1-beta.0
1898
+
1899
+ ### Patch Changes
1900
+
1901
+ - Updated dependencies
1902
+ - @ontrails/core@1.0.0-beta.0
1903
+ - @ontrails/cli@1.0.0-beta.0
1904
+ - @ontrails/logging@1.0.0-beta.0
1905
+ - @ontrails/warden@1.0.0-beta.0
1906
+ - @ontrails/schema@1.0.0-beta.0