@ontrails/warden 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 (188) hide show
  1. package/CHANGELOG.md +1556 -0
  2. package/README.md +200 -0
  3. package/bin/warden.ts +51 -0
  4. package/package.json +51 -0
  5. package/src/adapter-check.ts +136 -0
  6. package/src/cli.ts +2159 -0
  7. package/src/command.ts +1167 -0
  8. package/src/config.ts +193 -0
  9. package/src/draft.ts +22 -0
  10. package/src/drift.ts +260 -0
  11. package/src/fix.ts +126 -0
  12. package/src/formatters.ts +178 -0
  13. package/src/guide.ts +245 -0
  14. package/src/index.ts +295 -0
  15. package/src/project-context.ts +446 -0
  16. package/src/project-rules.ts +290 -0
  17. package/src/regrade-history.ts +188 -0
  18. package/src/regrade-receipt.ts +484 -0
  19. package/src/resolve.ts +531 -0
  20. package/src/rules/activation-orphan.ts +97 -0
  21. package/src/rules/captured-kernel.ts +375 -0
  22. package/src/rules/circular-refs.ts +150 -0
  23. package/src/rules/cli-command-route-coherence.ts +177 -0
  24. package/src/rules/composes-declarations.ts +839 -0
  25. package/src/rules/context-no-surface-types.ts +214 -0
  26. package/src/rules/dead-internal-trail.ts +161 -0
  27. package/src/rules/dead-public-trail.ts +258 -0
  28. package/src/rules/draft-file-marking.ts +155 -0
  29. package/src/rules/draft-visible-debt.ts +83 -0
  30. package/src/rules/duplicate-exported-symbol.ts +172 -0
  31. package/src/rules/duplicate-public-contract.ts +137 -0
  32. package/src/rules/entity-exists.ts +254 -0
  33. package/src/rules/entity-ids.ts +15 -0
  34. package/src/rules/error-mapping-completeness.ts +290 -0
  35. package/src/rules/example-valid.ts +395 -0
  36. package/src/rules/fires-declarations.ts +740 -0
  37. package/src/rules/governed-symbol-residue.ts +535 -0
  38. package/src/rules/governed-vocabulary-permutation-watch.ts +77 -0
  39. package/src/rules/implementation-returns-result.ts +1733 -0
  40. package/src/rules/incomplete-accessor-for-standard-op.ts +272 -0
  41. package/src/rules/incomplete-crud.ts +583 -0
  42. package/src/rules/index.ts +328 -0
  43. package/src/rules/intent-propagation.ts +125 -0
  44. package/src/rules/layer-field-name-drift.ts +102 -0
  45. package/src/rules/library-render-coherence.ts +97 -0
  46. package/src/rules/metadata.ts +929 -0
  47. package/src/rules/missing-reconcile.ts +97 -0
  48. package/src/rules/missing-visibility.ts +111 -0
  49. package/src/rules/no-destructured-compose.ts +196 -0
  50. package/src/rules/no-dev-permit-in-source.ts +99 -0
  51. package/src/rules/no-direct-implementation-call.ts +52 -0
  52. package/src/rules/no-legacy-cli-alias-export.ts +247 -0
  53. package/src/rules/no-legacy-layer-imports.ts +211 -0
  54. package/src/rules/no-native-error-result.ts +118 -0
  55. package/src/rules/no-redundant-result-error-wrap.ts +382 -0
  56. package/src/rules/no-retired-cross-vocabulary.ts +203 -0
  57. package/src/rules/no-sync-result-assumption.ts +1199 -0
  58. package/src/rules/no-throw-in-detour-recover.ts +225 -0
  59. package/src/rules/no-throw-in-implementation.ts +48 -0
  60. package/src/rules/no-top-level-surface.ts +371 -0
  61. package/src/rules/on-references-exist.ts +194 -0
  62. package/src/rules/orphaned-signal.ts +149 -0
  63. package/src/rules/owner-render-parity.ts +143 -0
  64. package/src/rules/permit-governance.ts +25 -0
  65. package/src/rules/prefer-schema-inference.ts +141 -0
  66. package/src/rules/public-export-example-coverage.ts +561 -0
  67. package/src/rules/public-internal-deep-imports.ts +454 -0
  68. package/src/rules/public-output-schema.ts +29 -0
  69. package/src/rules/public-union-output-discriminants.ts +150 -0
  70. package/src/rules/read-intent-fires.ts +188 -0
  71. package/src/rules/reference-exists.ts +97 -0
  72. package/src/rules/registry-names.ts +171 -0
  73. package/src/rules/resolved-import-boundary.ts +146 -0
  74. package/src/rules/resource-declarations.ts +697 -0
  75. package/src/rules/resource-exists.ts +181 -0
  76. package/src/rules/resource-id-grammar.ts +65 -0
  77. package/src/rules/resource-mock-coverage.ts +115 -0
  78. package/src/rules/retired-vocabulary.ts +1407 -0
  79. package/src/rules/scan.ts +59 -0
  80. package/src/rules/scheduled-destroy-intent.ts +44 -0
  81. package/src/rules/signal-graph-coaching.ts +220 -0
  82. package/src/rules/source/composition.ts +165 -0
  83. package/src/rules/source/drafts.ts +164 -0
  84. package/src/rules/source/entities.ts +618 -0
  85. package/src/rules/source/pragmas.ts +45 -0
  86. package/src/rules/source/resources.ts +64 -0
  87. package/src/rules/source/signals.ts +397 -0
  88. package/src/rules/source/stores.ts +310 -0
  89. package/src/rules/specs.ts +388 -0
  90. package/src/rules/static-resource-accessor-preference.ts +654 -0
  91. package/src/rules/structure.ts +234 -0
  92. package/src/rules/surface-overlay-coherence.ts +262 -0
  93. package/src/rules/surface-trailhead-coherence.ts +366 -0
  94. package/src/rules/trail-fork-coaching.ts +625 -0
  95. package/src/rules/trail-versioning-source.ts +1076 -0
  96. package/src/rules/trail-versioning-topo.ts +172 -0
  97. package/src/rules/trailhead-override-divergence.ts +356 -0
  98. package/src/rules/types.ts +464 -0
  99. package/src/rules/unmaterialized-activation-source.ts +85 -0
  100. package/src/rules/unreachable-detour-shadowing.ts +343 -0
  101. package/src/rules/valid-describe-refs.ts +224 -0
  102. package/src/rules/valid-detour-contract.ts +78 -0
  103. package/src/rules/warden-export-symmetry.ts +540 -0
  104. package/src/rules/warden-rules-use-ast.ts +1109 -0
  105. package/src/rules/webhook-route-collision.ts +306 -0
  106. package/src/rules/workspace-lock-ownership.ts +34 -0
  107. package/src/trails/activation-orphan.trail.ts +84 -0
  108. package/src/trails/captured-kernel.trail.ts +108 -0
  109. package/src/trails/circular-refs.trail.ts +29 -0
  110. package/src/trails/cli-command-route-coherence.trail.ts +47 -0
  111. package/src/trails/composes-declarations.trail.ts +22 -0
  112. package/src/trails/context-no-surface-types.trail.ts +21 -0
  113. package/src/trails/dead-internal-trail.trail.ts +26 -0
  114. package/src/trails/dead-public-trail.trail.ts +31 -0
  115. package/src/trails/deprecation-without-guidance.trail.ts +21 -0
  116. package/src/trails/draft-file-marking.trail.ts +16 -0
  117. package/src/trails/draft-visible-debt.trail.ts +16 -0
  118. package/src/trails/duplicate-exported-symbol.trail.ts +48 -0
  119. package/src/trails/duplicate-public-contract.trail.ts +47 -0
  120. package/src/trails/entity-exists.trail.ts +21 -0
  121. package/src/trails/error-mapping-completeness.trail.ts +30 -0
  122. package/src/trails/example-valid.trail.ts +25 -0
  123. package/src/trails/fires-declarations.trail.ts +23 -0
  124. package/src/trails/fork-without-preserved-implementation.trail.ts +31 -0
  125. package/src/trails/governed-symbol-residue.trail.ts +24 -0
  126. package/src/trails/governed-vocabulary-permutation-watch.trail.ts +16 -0
  127. package/src/trails/implementation-returns-result.trail.ts +20 -0
  128. package/src/trails/incomplete-accessor-for-standard-op.trail.ts +76 -0
  129. package/src/trails/incomplete-crud.trail.ts +39 -0
  130. package/src/trails/index.ts +91 -0
  131. package/src/trails/intent-propagation.trail.ts +30 -0
  132. package/src/trails/layer-field-name-drift.trail.ts +39 -0
  133. package/src/trails/library-render-coherence.trail.ts +43 -0
  134. package/src/trails/marker-schema-unsupported.trail.ts +23 -0
  135. package/src/trails/missing-reconcile.trail.ts +33 -0
  136. package/src/trails/missing-visibility.trail.ts +22 -0
  137. package/src/trails/no-destructured-compose.trail.ts +44 -0
  138. package/src/trails/no-dev-permit-in-source.trail.ts +16 -0
  139. package/src/trails/no-direct-implementation-call.trail.ts +16 -0
  140. package/src/trails/no-legacy-cli-alias-export.trail.ts +41 -0
  141. package/src/trails/no-legacy-layer-imports.trail.ts +41 -0
  142. package/src/trails/no-native-error-result.trail.ts +18 -0
  143. package/src/trails/no-redundant-result-error-wrap.trail.ts +55 -0
  144. package/src/trails/no-retired-cross-vocabulary.trail.ts +42 -0
  145. package/src/trails/no-sync-result-assumption.trail.ts +19 -0
  146. package/src/trails/no-throw-in-detour-recover.trail.ts +24 -0
  147. package/src/trails/no-throw-in-implementation.trail.ts +20 -0
  148. package/src/trails/no-top-level-surface.trail.ts +43 -0
  149. package/src/trails/on-references-exist.trail.ts +21 -0
  150. package/src/trails/orphaned-signal.trail.ts +36 -0
  151. package/src/trails/owner-render-parity.trail.ts +26 -0
  152. package/src/trails/pending-force.trail.ts +21 -0
  153. package/src/trails/permit-governance.trail.ts +51 -0
  154. package/src/trails/prefer-schema-inference.trail.ts +21 -0
  155. package/src/trails/public-export-example-coverage.trail.ts +16 -0
  156. package/src/trails/public-internal-deep-imports.trail.ts +94 -0
  157. package/src/trails/public-output-schema.trail.ts +55 -0
  158. package/src/trails/public-union-output-discriminants.trail.ts +33 -0
  159. package/src/trails/read-intent-fires.trail.ts +20 -0
  160. package/src/trails/reference-exists.trail.ts +25 -0
  161. package/src/trails/resolved-import-boundary.trail.ts +109 -0
  162. package/src/trails/resource-declarations.trail.ts +25 -0
  163. package/src/trails/resource-exists.trail.ts +27 -0
  164. package/src/trails/resource-id-grammar.trail.ts +39 -0
  165. package/src/trails/resource-mock-coverage.trail.ts +40 -0
  166. package/src/trails/run.ts +205 -0
  167. package/src/trails/scheduled-destroy-intent.trail.ts +56 -0
  168. package/src/trails/schema.ts +295 -0
  169. package/src/trails/signal-graph-coaching.trail.ts +77 -0
  170. package/src/trails/static-resource-accessor-preference.trail.ts +25 -0
  171. package/src/trails/surface-overlay-coherence.trail.ts +24 -0
  172. package/src/trails/surface-trailhead-coherence.trail.ts +25 -0
  173. package/src/trails/topo.ts +6 -0
  174. package/src/trails/trail-fork-coaching.trail.ts +42 -0
  175. package/src/trails/trailhead-override-divergence.trail.ts +47 -0
  176. package/src/trails/unmaterialized-activation-source.trail.ts +72 -0
  177. package/src/trails/unreachable-detour-shadowing.trail.ts +45 -0
  178. package/src/trails/valid-describe-refs.trail.ts +18 -0
  179. package/src/trails/valid-detour-contract.trail.ts +71 -0
  180. package/src/trails/version-gap.trail.ts +35 -0
  181. package/src/trails/version-pinned-compose.trail.ts +23 -0
  182. package/src/trails/version-without-examples.trail.ts +38 -0
  183. package/src/trails/warden-export-symmetry.trail.ts +16 -0
  184. package/src/trails/warden-rules-use-ast.trail.ts +64 -0
  185. package/src/trails/webhook-route-collision.trail.ts +50 -0
  186. package/src/trails/workspace-lock-ownership.trail.ts +16 -0
  187. package/src/trails/wrap-rule.ts +269 -0
  188. package/src/workspaces.ts +264 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,1556 @@
1
+ # @ontrails/warden
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
+ - [`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.
9
+
10
+ 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.
11
+
12
+ ## 1.0.0
13
+
14
+ ### Major Changes
15
+
16
+ - [`93607de`](https://github.com/outfitter-dev/trails/commit/93607deae7f5a6badb4fed40f9f6b7fef43c8b64): API simplification: unified trail model, intent enum, blaze, metadata.
17
+
18
+ **BREAKING CHANGES:**
19
+
20
+ - `hike()` removed — use `trail()` with optional `crosses: [...]` field
21
+ - `follows` renamed to `crosses` (matching `ctx.cross()`)
22
+ - `topo.hikes` removed — single `topo.trails` map
23
+ - `kind: 'hike'` removed — everything is `kind: 'trail'`
24
+ - `readOnly`/`destructive` booleans replaced by `intent: 'read' | 'write' | 'destroy'`
25
+ - `implementation` field renamed to `blaze`
26
+ - `markers` field renamed to `metadata`
27
+ - `testHike` renamed to `testCrosses`, `HikeScenario` to `CrossScenario`
28
+ - `surface()` now returns the surface handle (`Command` for CLI, `Server` for MCP)
29
+
30
+ - [`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.
31
+
32
+ ### Minor Changes
33
+
34
+ - [`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.
35
+ - [`ebbf0c5`](https://github.com/outfitter-dev/trails/commit/ebbf0c538550429f92944ac2d196b6bc9ca00c4b): Consolidated improvements across all surface packages.
36
+
37
+ **core**: Add `TrailResult<T>` utility type, `topo.ids()` and `topo.count` accessors, `dispatch()` for headless trail execution, and extract shared `executeTrail` pipeline used by CLI/MCP/HTTP.
38
+
39
+ **http**: Detect route path collisions and return `Result` from `buildHttpRoutes()`, wire request `AbortSignal` through to trail context, and make write → POST mapping explicit in intent-to-method lookup.
40
+
41
+ **mcp**: Return `Result` from `buildMcpTools()` on collision instead of throwing.
42
+
43
+ **cli**: Verify exception catching via centralized `executeTrail`.
44
+
45
+ **testing**: Follow context awareness improvements.
46
+
47
+ **warden**: Refactor rules as composable trails with examples.
48
+
49
+ **schema**: Error code and empty body fixes.
50
+
51
+ - [`39ecab9`](https://github.com/outfitter-dev/trails/commit/39ecab9940ad8255215c25b9db55047180828457): Bug fixes across all surface packages found via parallel Codex review.
52
+
53
+ **core**: Fix Result.toJson false circular detection on DAGs, deserializeError subclass round-trip, topo cross-kind ID collisions, validateTopo multi-node cycle detection, error example input validation bypass, and deriveFields array type collapse.
54
+
55
+ **cli**: Switch the CLI surface to parseAsync for proper async error handling, add boolean flag negation (--no-flag), and strict number parsing that rejects partial input.
56
+
57
+ **mcp**: Align BlobRef with core (including ReadableStream support) and detect tool-name collisions after normalization.
58
+
59
+ **testing**: Include trails in testContracts validation, with cross-context awareness.
60
+
61
+ **warden**: Collect trail detour targets, validate detour refs in trail specs, and stop implementation-returns-result from walking into nested function bodies.
62
+
63
+ - [`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.
64
+ - [`8fde0a6`](https://github.com/outfitter-dev/trails/commit/8fde0a6c66a7f64f0c27909df7db2731fa4b10f4): Add an advisory project-static rule that reports unknown governed vocabulary permutations from the latest committed Regrade history until they are classified.
65
+ - [`e991a5b`](https://github.com/outfitter-dev/trails/commit/e991a5b2e8b9057d8e33a067e29fb0aca641d5ad): Add generic enum value aliases for CLI flags and migrate Warden command aliases onto the shared alias model.
66
+ - [`f2a7857`](https://github.com/outfitter-dev/trails/commit/f2a785777ba9cb2d540c0fd79c80b43d4cb934d3): Initial v1 beta release of the Trails framework.
67
+
68
+ - **@ontrails/core** — Result type, error taxonomy, trail/signal/topo, validateTopo, validateInput/Output, deriveFields, patterns, redaction, branded types, resilience
69
+ - **@ontrails/cli** — CLI command model, flag derivation, output formatting
70
+ - **@ontrails/mcp** — MCP surface, tool generation, annotations, progress bridge
71
+ - **@ontrails/testing** — testAll, testExamples, testTrail, testCrosses, testContracts, testDetours, surface harnesses
72
+ - **@ontrails/warden** — AST-based code convention rules via oxc-parser, drift detection, CI formatters
73
+ - **@ontrails/topographer** — Surface map generation, hashing, semantic diffing, lock helpers
74
+
75
+ - [`4ad6b25`](https://github.com/outfitter-dev/trails/commit/4ad6b257497bc4e07bb66c261b4164277e7b62be): Lexicon rename cleanup (ADR-0023). Breaking for `@ontrails/core`, `@ontrails/cli`, and `@ontrails/tracing` at the boundary; internal-only churn for `@ontrails/warden`.
76
+
77
+ - **core**: the topo store schema renames `topo_provisions` / `topo_trail_provisions` → `topo_resources` / `topo_trail_resources` and `provision_count` → `resource_count`. Schema version bumped v4→v5. Stores still carrying the legacy schema are detected on open, dropped, and recreated from the new DDL — previous topo saves are cleared. Stored-data helpers `listTopoStoreProvisions` / `getTopoStoreProvision` / `readProvisionUsage` / `mapProvisionRow` renamed to their `resource` counterparts. TS row types `TopoTrailProvisionRow` / `TopoProvisionRow` renamed to `TopoTrailResourceRow` / `TopoResourceRow`.
78
+ - **cli**: CLI output mode env vars are now derived from the topo name per ADR-0023. Legacy globals `TRAILS_JSON` / `TRAILS_JSONL` are no longer honored — a topo named `stash` reads `STASH_JSON` / `STASH_JSONL`. `ActionResultContext` gains a `topoName: string` field; `resolveOutputMode(flags, topoName)` takes a topo name argument.
79
+ - **tracing**: legacy `.trails/dev/tracker.db` migration path removed. Any user still running a pre-rename beta build with a `tracker.db` should delete it or migrate before upgrading.
80
+ - **warden**: internal-only rename of `provisionDeclarations` / `provisionExists` rules and their trails to `resourceDeclarations` / `resourceExists`. No behavior change.
81
+
82
+ - [`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.
83
+ - [`5a7d22a`](https://github.com/outfitter-dev/trails/commit/5a7d22ab9d674f86b28758f23c3e94a17efb5be1): Add three-tier vocabulary migration scope. Protected historical paths remain
84
+ scanned and counted as `historical-by-policy` without being rewritten, while
85
+ reports expose scope-tier totals and census-expected teaching-surface coverage
86
+ through equivalent CLI and MCP plan schemas. Applied vocabulary occurrences
87
+ remain auditable in history with an `applied` verdict, while policy-only
88
+ evidence does not make an active plan stale merely by being recorded.
89
+ - [`00f7093`](https://github.com/outfitter-dev/trails/commit/00f7093132a50c49b7bc2dcf9eef98f9424fd2e0): Add resources as a first-class primitive.
90
+
91
+ 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()`.
92
+
93
+ **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.
94
+
95
+ **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.
96
+
97
+ **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.
98
+
99
+ **Surfaces:** Resource overrides thread through the CLI, MCP, and HTTP surfaces.
100
+
101
+ **Introspection:** Survey and surface map outputs include resource graph. Topo exposes `.resources`, `.getResource()`, `.hasResource()`, `.listResources()`, `.resourceIds()`, `.resourceCount`.
102
+
103
+ **Docs:** ADR-009 accepted. Unified resource guide, updated vocabulary, getting-started, architecture, and package READMEs.
104
+
105
+ - [`120caf5`](https://github.com/outfitter-dev/trails/commit/120caf57e6b6da4e01e53a1bff3a629cadf48d6e): Promote topo artifact commands to `trails compile` and `trails validate`.
106
+ - [`8424b67`](https://github.com/outfitter-dev/trails/commit/8424b67d929b8e48d5e27dbf5b0d2347fde8e481): Make `run`, Wayfinder navigation and semantic diff, Warden, and shell
107
+ completions use Config-owned project identity. Add stable `--app <id>`
108
+ selection and structured project provenance, preserve partial saved workspace
109
+ navigation, and require complete app-partitioned views for workspace diff.
110
+ Preserve canonical sole-app discovery for standalone run and live Wayfinder
111
+ consumers, and keep healthy shell completions available when configured sibling
112
+ apps cannot load. Keep nested app completion suggestions inside the selected
113
+ app, and retain selected project provenance plus authored inputs when running or
114
+ listing trail examples. Preserve completed `--app` selection and typed
115
+ `--root-dir` boundaries throughout dynamic completion, encode shell tokens
116
+ through the internal variadic input without losing flags, spaces, or empty
117
+ values. While an app value is still being completed, preserve its typed root
118
+ but defer app-local module selection until the app is complete. Validate
119
+ Config-owned identity on the same fresh Survey lease that derives live
120
+ Wayfinder responses. Record the executed app identity as `executedAppId` on
121
+ `run.examples` and `run.example` results so every listing and comparison names
122
+ the app that produced it, including standalone single-app runs.
123
+
124
+ Remove the superseded `buildWorkspaceTrailIndex()` package-workspace discovery
125
+ API now that no operator consumer uses it as identity.
126
+
127
+ Let Config-owning Warden consumers provide expected stable app bindings so topo
128
+ identity is validated before any safe source fixes run. Require every configured
129
+ app target to have committed app-local lock evidence before Warden claims the
130
+ workspace is current.
131
+ Expose deterministic per-app Warden drift evidence alongside the aggregate
132
+ workspace verdict.
133
+ Run the Warden artifact preflight for every topo-aware run that consumes saved
134
+ lock evidence, including `--fix` runs, and run that preflight before a fixing
135
+ run applies any safe source fix so invalid saved evidence can never rewrite
136
+ source first. Reject `wayfind diff` baselines whose recorded lock hash or
137
+ summary contradicts the embedded graph, including `--against-dir` directories.
138
+
139
+ - [`5adb995`](https://github.com/outfitter-dev/trails/commit/5adb99551c2dda6190d46cce7f60bb08d63c99aa): Complete the v1 hard cutover from the authored `blaze` field to
140
+ `implementation` across trail contracts, surface projections, tests, examples,
141
+ and public source-analysis helpers. Existing applications must rename authored
142
+ trail behavior fields and direct trail-object access before upgrading.
143
+ - [`88a6a62`](https://github.com/outfitter-dev/trails/commit/88a6a62a9e9e230ca6d368fa78dc3ece6c816204): Complete the v1 classification-first cutover from projection/project vocabulary
144
+ to derive/derived for contract-owned fact production and render/rendered for
145
+ surface presentation. Public type, helper, rule, relation, and report names move
146
+ without compatibility aliases; ordinary repository/project nouns remain
147
+ explicit preserves or structured review inventory.
148
+ - [`6712075`](https://github.com/outfitter-dev/trails/commit/67120754df3f614c7f4dd98be1fa0ba9d69b7765): Complete the v1 hard cutover from the `contour` domain-object declaration
149
+ vocabulary to `entity` across contracts, topo facts, store helpers, Warden,
150
+ Wayfinder, operator surfaces, examples, and generated locks. Existing
151
+ applications must rename contour APIs, run `trails dev reset --yes` to discard
152
+ pre-cutover local Topographer snapshots, and then recompile committed
153
+ `trails.lock` artifacts before upgrading. Those derived snapshots are
154
+ intentionally not read through a compatibility layer.
155
+ The entity-shaped wire contract advances `TopoGraph` and split lock manifests
156
+ from schema version 3 to 4; old split artifacts fail with regeneration guidance,
157
+ while the canonical root `trails.lock` remains schema version 5.
158
+ Wayfinder reports those stale rows as topo-store drift while keeping current
159
+ committed lock facts available for inspection.
160
+ - [`aedb87b`](https://github.com/outfitter-dev/trails/commit/aedb87b3b536c5849636c7a5951c51e1e7f0d1cc): Add governed identifier-segment renames for AST-backed migrations. Regrade can
161
+ now migrate camelCase, PascalCase, leading-underscore, and SCREAMING_SNAKE
162
+ identifier segments, including single-segment forms such as `BLAZE` and
163
+ `_BLAZE`, while preserving exact-mode behavior and rejecting lowercase
164
+ substring, concatenated acronym, or inflection matches.
165
+ - [`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.
166
+ - [`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.
167
+ - [`2e05e27`](https://github.com/outfitter-dev/trails/commit/2e05e27c09eb2e9addecd3c526c5df75b4c2f1ef): Add `--dev-permit` for local-development synthetic full-access. New `devPermitPreset()` exposes a boolean flag; when set, the CLI synthesizes a `BasePermit` (`id: 'dev-permit'`, scopes enumerated from every declared scope across the topo) and overlays it on `ctx.permit`. Mutually exclusive with `--permit` and `--token` — any combination fails with `ValidationError` listing the conflicting flags. New Warden rule `no-dev-permit-in-source` flags any committed source file containing `--dev-permit` as an error, with a tight allow-list (`packages/cli/src/flags.ts`, `packages/cli/src/build.ts`, the rule itself). The Warden runner still scans test TypeScript files for this literal while keeping unrelated source rules filtered out of tests. Apps that import `authResource`/`authLayer` are unaffected.
168
+ - [`ad553a6`](https://github.com/outfitter-dev/trails/commit/ad553a60173233be1a0a566840e6eac3463e0ec8): Add one warden rule coaching against the removed legacy layer API. `no-legacy-layer-imports` (error) flags any source-string reference to `authLayer`, `autoIterateLayer`, or `dateShortcutsLayer` and points the developer at the migration paths (CLI surface derivation for pagination/date-shortcuts; intrinsic permit enforcement for auth). Allow-list covers the migration notes in `packages/cli/src/{pagination,date-shortcuts}.ts` and the rule's own files. The rule is classified `lifecycle: temporary` with a `retireWhen` string tying it to the legacy layer migration window. Trail count bumps 45 → 46.
169
+ - [`802fdfc`](https://github.com/outfitter-dev/trails/commit/802fdfc0360800404c83f2255c6ac7c6f67fee45): Rename Warden guide manifest rule grouping from `category` to `concern` so the
170
+ public JSON contract matches the source metadata field.
171
+ - [`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.
172
+ - [`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.
173
+
174
+ 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.
175
+
176
+ - [`8bc0708`](https://github.com/outfitter-dev/trails/commit/8bc07086bbfad54f6563996b80e7e4148beb36dd): Add surface facet coherence diagnostics for selector overlap, visibility widening acknowledgements, dynamic selectors, and description hygiene.
177
+ - [`88e2ac7`](https://github.com/outfitter-dev/trails/commit/88e2ac7d831ca15aefbad4763886386523581dcf): Type utilities and cross-declarations warden rule.
178
+
179
+ **core**: Add `TrailInput<T>`, `TrailOutput<T>` utility types and `inputOf()`, `outputOf()` runtime schema accessors.
180
+
181
+ **warden**: Add `cross-declarations` rule — statically analyzes `ctx.cross()` calls against declared `crosses: [...]` arrays. Errors on undeclared calls, warns on unused declarations.
182
+
183
+ - [`22c6c06`](https://github.com/outfitter-dev/trails/commit/22c6c06a3b846dab64b78b7ccc27cb1ebd22e402): Accept ADR-0041 Unified Observability and ship the first activation and
184
+ observability primitives it depends on: activation trace records, topo-level
185
+ observe configuration, webhook activation materialization, signal/webhook
186
+ warden coaching, the `@ontrails/observe` package, sink composition, and
187
+ zero-dependency observe sinks.
188
+ - [`fde5516`](https://github.com/outfitter-dev/trails/commit/fde5516ad396faa718936b10ff658b3ade3383b9): Trail-native vocabulary cutover. Breaking API field renames across all packages:
189
+
190
+ - Trail spec: `run:` → `blaze:`, `follow:` → `crosses:`, `services:` → `resources:`, `metadata:` → `meta:`, `emits:` → `fires:`
191
+ - Runtime: `ctx.follow()` → `ctx.cross()`, `ctx.emit()` → `ctx.fire()`, `ctx.signal` (abort) → `ctx.abortSignal`
192
+ - Entry points: `trailhead(app)` → `surface(app)`
193
+ - Package rename: `@ontrails/crumbs` / `@ontrails/tracker` → `@ontrails/tracing`
194
+ - Wrapper types: retired gate/middleware vocabulary in favor of `Layer` and `layers`
195
+ - Package taxonomy: retired connector vocabulary in favor of adapters
196
+
197
+ - [`767eb41`](https://github.com/outfitter-dev/trails/commit/767eb41008d73133363cdb330f297090e8aa2837): Ship the default `warden` bin from `@ontrails/warden` and migrate the old private `apps/ci` runner into the package-local CLI surface.
198
+
199
+ The new bin supports `--ci`, `--pre-push`, `--depth`, `--fail-on`, `--strict`, `--format`, `--lock`, `--drafts`, `--apps`, and the Sprint 1 standalone aliases. CI output now uses the package Warden formatters directly, so GitHub annotations and JSON payloads follow the `@ontrails/warden` report shape instead of the retired `apps/ci` wrapper shape.
200
+
201
+ - [`82019a7`](https://github.com/outfitter-dev/trails/commit/82019a7d44736d18c8f1e9db4d81fe9025653b1d): Export `wardenConfigSchema` for composing Warden options into `trails.config.ts`.
202
+ - [`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.
203
+ - [`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.
204
+ - [`5be032c`](https://github.com/outfitter-dev/trails/commit/5be032c48779f7b7dc9bbc28ab7a22cbfabc83f0): Add the repo-local `public-export-example-coverage` Warden rule (and its `publicExportExampleCoverageTrail` wrapper), graduating `scripts/check-public-api-examples.ts` into governed rule coverage. The rule anchors to this repository's five public surface package barrels via the rule module's own on-disk location, so it stays silent in consumer repositories.
205
+ - [`7085f01`](https://github.com/outfitter-dev/trails/commit/7085f01d6487c62f8f80535cdf77f0d542b55927): Add a Warden topo-aware rule that requires public MCP/HTTP surface-eligible trails to declare output schemas.
206
+ - [`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.
207
+
208
+ Adapt the built-in `trails warden` wrapper to consume the readonly Warden report diagnostics contract without weakening its output schema.
209
+
210
+ - [`f5b6112`](https://github.com/outfitter-dev/trails/commit/f5b6112a7f88e76f72b2d82e863f11d0c89b518b): Add an advisory Warden rule that prefers static resource helpers over dynamic context resource lookups when the resource definition is already in scope.
211
+ - [`bd1bd96`](https://github.com/outfitter-dev/trails/commit/bd1bd96b90cd8b55f73061e4078a14cd75bed745): Require committed Regrade provenance for governed vocabulary transitions.
212
+
213
+ Applied governed plans now expose deterministic transition, plan, source,
214
+ safe-apply, and review-follow-up evidence through history results. Warden loads
215
+ committed history into project context, cites it for reintroduced symbols, and
216
+ rejects invalid or missing provenance for transitions that require Regrade in
217
+ the workspace that owns the governed registry, without making downstream apps
218
+ prove the framework's own migrations.
219
+ Portable validation accepts the authoritative numeric file-rename counters
220
+ persisted by Regrade history.
221
+
222
+ - [`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.
223
+
224
+ Make the Trails operator topo reproducible by keeping its authored examples free of temporary filesystem paths, so its committed app-owned lock validates deterministically.
225
+
226
+ 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.
227
+
228
+ 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.
229
+
230
+ **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.
231
+
232
+ ### Patch Changes
233
+
234
+ - [`da6e2ca`](https://github.com/outfitter-dev/trails/commit/da6e2caeb06f150042148f10f03a6a9dae5648d1): Cleanup and hardening pass across all packages.
235
+
236
+ **core**: Deduplicate `DispatchOptions` as type alias of `ExecuteTrailOptions`. Replace `TrailContext` index signature with typed `extensions` field for type safety. Deep-merge `extensions` in `executeTrail` context resolution. Remove unused surface-map type plus legacy `connectors.ts`, `health.ts`, and `job.ts` proof-of-concept files from the published package.
237
+
238
+ **cli**: Remove vestigial `kind` checks from build. Run `validateTopo()` automatically in `surface()` with opt-out via `validate: false`.
239
+
240
+ **http**: Remove vestigial `kind` checks from build. Run `validateTopo()` automatically in `surface()` with opt-out.
241
+
242
+ **mcp**: Remove vestigial `kind` checks from build. Run `validateTopo()` automatically in `surface()` with opt-out.
243
+
244
+ **warden**: Project-aware rule context preserved in trail wrappers.
245
+
246
+ - [`ea2f296`](https://github.com/outfitter-dev/trails/commit/ea2f296e8119cf79bd03aeca3f0aa804f2fbcdd6): Classify adjacent package-route variants in the authored Warden AST regression
247
+ fixtures as explicit preserves so the completed transition remains auditable.
248
+ - [`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.
249
+
250
+ 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.
251
+
252
+ - [`9874e0b`](https://github.com/outfitter-dev/trails/commit/9874e0bb034c0f98edeb19833d9d3519c2a07a4c): Add `@ontrails/cloudflare/d1`, an env-bound Cloudflare D1 store resource for `@ontrails/store` definitions. The new subpath exports `cloudflareD1` and `connectD1`, supports the backend-agnostic store accessor contract (`get`, `list`, `upsert`, `remove`), versioned-table optimistic concurrency, fixture/mock seeding, store-derived write signals, Miniflare-backed conformance tests, and Worker env-bridge integration.
253
+
254
+ `@ontrails/core` and `@ontrails/store` no longer require the Bun global for signal fire ids or late-bound store signal tokens, so store definitions and store-derived signal emission work inside Worker modules. `@ontrails/warden` now treats `cloudflareD1` as a required Cloudflare public export with `@example` coverage.
255
+
256
+ - [`1e64ee7`](https://github.com/outfitter-dev/trails/commit/1e64ee7bc270901486c5bb51ac38bf045c924adc): Add first-class queue activation sources with `queue()` in `@ontrails/core`.
257
+ Queue sources validate their runtime queue name and parse contract, project the
258
+ queue name into durable topo facts, participate in activation input
259
+ compatibility, and block established outputs when malformed.
260
+
261
+ Add `@ontrails/cloudflare/queues` with `cloudflareQueue`, `createMemoryQueue`,
262
+ and `createQueueHandler`. Cloudflare Workers now expose both `fetch` and
263
+ `queue` entrypoints from `createWorkersHandler`, resolve env-bound resources for
264
+ queue-activated trails, acknowledge successful/skipped/cancelled messages, and
265
+ acknowledge traced non-retryable Trails errors so permanently invalid messages
266
+ do not churn through the queue. Failures explicitly marked retryable enter
267
+ Cloudflare's retry and DLQ flow, with rate-limit delays preserved.
268
+
269
+ `@ontrails/warden` now treats queue activation sources as materialized and
270
+ requires `cloudflareQueue` public export example coverage.
271
+
272
+ - [`4086b5b`](https://github.com/outfitter-dev/trails/commit/4086b5b2f01b24660924fd8b667523f38caaed29): Add `@ontrails/cloudflare/r2`, an env-bound Cloudflare R2 bucket resource with
273
+ `cloudflareR2`, `createMemoryR2`, and `r2ObjectToBlobRef`. The resource
274
+ materializes Worker `r2_buckets` bindings through the shared env bridge, records
275
+ Cloudflare lock overlay facts, carries an in-memory object mock for
276
+ configuration-free tests, and documents the supported object operations plus
277
+ streaming/metadata boundaries.
278
+
279
+ `@ontrails/warden` now treats `cloudflareR2` as a required Cloudflare public
280
+ export with `@example` coverage.
281
+
282
+ - [`a105127`](https://github.com/outfitter-dev/trails/commit/a105127e5662ed9a6c245125f791fb0182da3f5e): Add the `@ontrails/cloudflare` adapter collection with its first two service subpaths. `@ontrails/cloudflare/workers` exports `createWorkersHandler`, a materializer producing the `{ fetch(request, env, ctx) }` Worker export on the shared HTTP fetch kernel, with an env bridge that re-resolves env-bound resources whenever a new Worker `env` arrives so no resource instance serves a request with a stale env. `@ontrails/cloudflare/kv` exports `cloudflareKv`, a resource definition wrapping a KV namespace binding (`get`/`put`/`delete`/`list` with TTL options) plus an in-memory `createMemoryKv` mock so `testAll` runs configuration-free.
283
+
284
+ `@ontrails/core` now guards the default trail context fields: `requestId` falls back to `crypto.randomUUID()` when the `Bun` global is absent, and `cwd`/`env` fall back to `'/'`/`{}` when `process` is absent, so trail execution works on runtimes like Cloudflare Workers.
285
+
286
+ `@ontrails/warden` registers the `@ontrails/cloudflare` public barrel in the repo-local `public-export-example-coverage` policy, requiring `@example` TSDoc coverage on `createWorkersHandler` and `cloudflareKv`.
287
+
288
+ - [`26be41d`](https://github.com/outfitter-dev/trails/commit/26be41d229ab688d3bf315b53cb7ebf2456b63db): Fix Codex review findings on type-utils and cross-declarations.
289
+
290
+ **core**: `inputOf()`/`outputOf()` now preserve the exact Zod schema subtype instead of widening to `z.ZodType`.
291
+
292
+ **warden**: `cross-declarations` rule now recognizes single-object trail overload, detects any context parameter name (not just `ctx`), matches destructured `cross()` calls, resolves const identifiers in `crosses` arrays, and restricts blaze body extraction to top-level config properties.
293
+
294
+ - [`f8d80b9`](https://github.com/outfitter-dev/trails/commit/f8d80b9cd823f02b2aa854934702f598bceff07d): Refresh current-facing compose vocabulary in package documentation after the composition cutover.
295
+ - [`3e5c0fc`](https://github.com/outfitter-dev/trails/commit/3e5c0fc1f2db8fae130782d167cd6b7bb141f4e5): Export shared diagnostic base types from core and align governance diagnostic
296
+ severity vocabulary across adapter checks, permits, and Warden.
297
+ - [`f3c4fef`](https://github.com/outfitter-dev/trails/commit/f3c4fef87617461a20b641d60f359dab3c625ca8): Export a shared `escapeRegExp` helper from core and migrate first-party callers off local copies.
298
+ - [`c3fc5c3`](https://github.com/outfitter-dev/trails/commit/c3fc5c3b89a3128631ee6045af6673d9108bbfd9): Move previously root-exported helper contracts out of `src/internal/*` to stable core module homes, document their public boundary, and guard the public barrel against future internal re-exports.
299
+ - [`cb0a9d8`](https://github.com/outfitter-dev/trails/commit/cb0a9d8fe294494fb3e026d1f066ab5281b3557c): Export shared workspace package discovery helpers from core and migrate first-party discovery callers.
300
+ - [`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.
301
+ - [`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.
302
+ - [`7065b55`](https://github.com/outfitter-dev/trails/commit/7065b55568dced6df9f8687288842cdbbfd7f6e4): Fix two blocking bugs from real-world migration:
303
+
304
+ - Published packages now resolve correctly (workspace:^ instead of workspace:\*)
305
+ - Error forwarding works across different success types (Err no longer carries phantom T)
306
+
307
+ - [`42a87c1`](https://github.com/outfitter-dev/trails/commit/42a87c1b8691c2fad94ba45175b6eec0219f4594): Fix workspace dependency resolution in published packages. Now using bun publish
308
+ which correctly replaces workspace:^ with actual version numbers.
309
+ - [`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.
310
+ - [`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`.
311
+
312
+ 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.
313
+
314
+ 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.
315
+
316
+ - [`f0f7e2f`](https://github.com/outfitter-dev/trails/commit/f0f7e2f33c0c34d1b0834fa14e86eb24ed8c7035): Avoid draft-marker false positives when a packed Warden install scans the Trails framework source tree from a different package location.
317
+ - [`53014a4`](https://github.com/outfitter-dev/trails/commit/53014a4593170edd5adfbaa2c94c895c67a320d1): Exclude immutable Regrade history artifacts from downstream migration source scans while preserving active plan and other policy-classified evidence. Warden continues to validate committed history through its dedicated provenance loader.
318
+ - [`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.
319
+ - [`90d394c`](https://github.com/outfitter-dev/trails/commit/90d394c005fdf6b898ba7052d0b56755af0f4954): Derive nested worktree, repository, and submodule collection boundaries in the
320
+ shared Source walker. Regrade and Warden now observe one directly targeted
321
+ working tree per run, and Regrade audit summaries expose boundary skip counts.
322
+ - [`ee9f3ae`](https://github.com/outfitter-dev/trails/commit/ee9f3ae0c1f42e371bae6568c00bbdfccb4da677): Let Warden fix capabilities declare downstream scan targets and have Regrade
323
+ honor those targets for Warden-backed term-rewrite classes.
324
+
325
+ Dogfood the first safe facet-to-trailhead prose rewrite through project-local
326
+ Warden rules and Regrade.
327
+
328
+ - [`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.
329
+ - [`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.
330
+ - [`54d259b`](https://github.com/outfitter-dev/trails/commit/54d259be81fb6c41d85be48a6cb2100c746a7126): Expose parser-native comment spans from `parseWithDiagnostics` so source-aware
331
+ tooling can distinguish exact JavaScript and TypeScript comment trivia without
332
+ reimplementing a lexer.
333
+
334
+ Use the shared spans in Warden's public-example rule while keeping leading
335
+ comment ownership fail-closed across JavaScript line terminators.
336
+
337
+ - [`a9fdbc7`](https://github.com/outfitter-dev/trails/commit/a9fdbc7769be77e1ee63d89a4a25d17b9f29d8ed): Clarify surface accommodation doctrine in MCP surface facet metadata and Warden trail-fork coaching guidance.
338
+ - [`820b4ad`](https://github.com/outfitter-dev/trails/commit/820b4ad9c40ea383b3c489a05fe7e4b2328e324f): Add `surfaceOverlay` — the shared surface-naming schema (scalar binding = synonym, list binding = grouped entry, singleton list stays a group) with app-authored/adapter-derived overlay provenance enforced at collection and consumption, and the `surface-overlay-coherence` Warden rule. MCP tool-name derivation moves to `@ontrails/core` (`deriveMcpToolName`) so the surface and governance read one projection; `@ontrails/mcp`'s `deriveToolName` now delegates to it. The coherence rule activates on standard warden runs once fresh derivations collect app-module overlays through the shared compile channel (TRL-1209, next in this stack).
339
+ - [`de30d6c`](https://github.com/outfitter-dev/trails/commit/de30d6c358048fba48822ac43b1c2cc04a3d30be): Introduce `topo.compile` as the canonical trail for writing `.trails` lockfile
340
+ and surface artifacts, remove the `survey --generate` mode, and update drift
341
+ guidance to point at the compile command.
342
+ - [`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.
343
+
344
+ Breaking pre-1.0 beta change. Update consumer imports:
345
+
346
+ ```diff
347
+ - import { topoStore, createTopoStore, createMockTopoStore, createTopoSnapshot, listTopoSnapshots, pinTopoSnapshot, unpinTopoSnapshot, createStoredTopoSnapshot, getStoredTopoExport, countTopoSnapshots, countPinnedSnapshots, countPrunableSnapshots, pruneUnpinnedSnapshots } from '@ontrails/core';
348
+ + import { topoStore, createTopoStore, createMockTopoStore, createTopoSnapshot, listTopoSnapshots, pinTopoSnapshot, unpinTopoSnapshot } from '@ontrails/topographer';
349
+ + import { createStoredTopoSnapshot, getStoredTopoExport, countTopoSnapshots, countPinnedSnapshots, countPrunableSnapshots, pruneUnpinnedSnapshots } from '@ontrails/topographer/backend-support';
350
+ ```
351
+
352
+ 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`.
353
+
354
+ 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.
355
+
356
+ - [`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.
357
+ - [`f8fd6ca`](https://github.com/outfitter-dev/trails/commit/f8fd6ca741e521bcfed1954d0949e76fd4e15dc4): Add OXC Walker-backed AST facade helpers for parent-aware traversal, scope-aware traversal, source locations, and safe source edits.
358
+ - [`0fcc42b`](https://github.com/outfitter-dev/trails/commit/0fcc42b544945f27d9d1bf3f13e9f5281c1efbed): Add `dead-public-trail` and `duplicate-public-contract` Warden coaching rules so exported public trails stay anchored and duplicate surface contracts become visible drift.
359
+ - [`c36aca9`](https://github.com/outfitter-dev/trails/commit/c36aca978c7e1561e68701c084241e5b3f85dcef): Preserve existing Result error boundaries directly and widen Warden pass-through
360
+ coaching beyond trail blazes.
361
+ - [`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/`.
362
+ - [`01b9204`](https://github.com/outfitter-dev/trails/commit/01b92046db52c71f22a871e58a308d7a94483cab): Harden governed v1 vocabulary transitions with property-key-only blaze literal
363
+ rewrites, structured review for ambiguous literal positions, explicit
364
+ scratch/history boundaries, and scan-only preservation for migration plans and
365
+ historical decision evidence.
366
+ - [`768cc79`](https://github.com/outfitter-dev/trails/commit/768cc79ca10947b8808b376e281e1a81131b4acc): Close missed projection vocabulary residue in Regrade internals and public
367
+ error-rendering guidance, and keep lifecycle-ambiguous governed identifiers in
368
+ the Warden review inventory instead of assigning them an unsafe automatic
369
+ target.
370
+ - [`ef09e46`](https://github.com/outfitter-dev/trails/commit/ef09e4673563fc3b763fef3df510b34d67c45fe1): Add shared Trails project-root discovery helpers and use them in Warden so nested
371
+ cwd invocations still load root `trails.config.*` and project-local
372
+ `.trails/rules*` governance.
373
+ - [`6250729`](https://github.com/outfitter-dev/trails/commit/6250729665c6bc2022c92938be93d156bebdf6b1): Expands the public AST guard/accessor surface and migrates Warden/Regrade AST
374
+ consumers onto the typed helpers instead of rule-local node-field casts.
375
+ - [`d73c38e`](https://github.com/outfitter-dev/trails/commit/d73c38e47218500d18ca62b641ef889b195fe508): Warn when Warden rules add raw AST node-field casts where a typed accessor exists.
376
+ - [`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.
377
+ - [`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.
378
+ - [`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.
379
+ - [`ff48e41`](https://github.com/outfitter-dev/trails/commit/ff48e413bf2c3c12fe9596561a7c01499c89e4bf): Harden project-local rule loading: Warden now discovers `.trails/rules.ts` and direct `.trails/rules/*.ts` files only, reports duplicate project-local rule ids, and emits a migration diagnostic for the retired `trails/warden/rules` location.
380
+ - [`a0126d9`](https://github.com/outfitter-dev/trails/commit/a0126d901b57648a3415dc71d692c71f78f93bb6): Add Warden `scope.exclude` globs through project config and the Trails CLI
381
+ wrapper so governance runs can exclude local notes, scratch space, and generated
382
+ state without dropping durable skills or plugin assets from scope.
383
+ - [`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.
384
+ - [`fe72b84`](https://github.com/outfitter-dev/trails/commit/fe72b84f88f4b18025f3d1b9463ca99238662d99): Fold remaining Regrade and Warden scan-target surfaces onto the shared path-scope vocabulary.
385
+ - [`1f5659b`](https://github.com/outfitter-dev/trails/commit/1f5659bfe39568f7bbee0503ace8b6e562d3f899): Add the `duplicate-exported-symbol` Warden rule to warn when multiple first-party packages define the same exported symbol name.
386
+ - [`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.
387
+ - [`fc002d5`](https://github.com/outfitter-dev/trails/commit/fc002d5669f4303427e99f45f9998fd0b0172bdb): Add governed AST identifier rename helpers and Warden residue detection for
388
+ active vocabulary symbol transitions.
389
+ - [`6ca0d8f`](https://github.com/outfitter-dev/trails/commit/6ca0d8f776801eee71ddd86cb88c198eaf5815fd): Add a typed governed-vocabulary transition registry that Warden owns and Regrade
390
+ can consume for migration planning.
391
+ - [`9f0842e`](https://github.com/outfitter-dev/trails/commit/9f0842ee9d7c7155d86a4fd023760ac0a5636f5d): Retire the temporary root vocabulary-cutover toolchain now that Regrade owns
392
+ structured migration plans, safe rewrites, classification, census, CLI/MCP
393
+ reports, and immutable history. Remove the obsolete source exemptions so
394
+ Oxlint and Warden enforce the durable transition contract directly, and add a
395
+ history-driven Regrade audit surface for current-tree regression checks.
396
+ - [`9f0842e`](https://github.com/outfitter-dev/trails/commit/9f0842ee9d7c7155d86a4fd023760ac0a5636f5d): Allow source rules to opt into documentation and text-file scanning so durable repository vocabulary guards cover every declared source kind.
397
+ - [`58db715`](https://github.com/outfitter-dev/trails/commit/58db715209442604fe58f5004fec37426c5969b1): `duplicate-public-contract` now includes contour anchoring in the normalized contract fingerprint, so factory CRUD trails derived against different contours (for example two tables' `delete` trails that both normalize to `{ id } → void` with the same intent) are no longer flagged as duplicates. Genuine duplicates — identical facts with the same or no contour anchoring — still warn, and the diagnostic message names contours among the shared facts.
398
+ - [`7cd0576`](https://github.com/outfitter-dev/trails/commit/7cd0576db8bc421cfd441c126f884e425e2254af): `signal-graph-coaching` no longer flags store-derived table signals (`created`/`updated`/`removed`) that have no consumers. Store resources advertise those signals as available capability, so leaving them unconsumed is a legitimate steady state for store-backed apps. Non-store produced signals without consumers still warn, and dead-signal coaching (no producer and no consumer) is unchanged.
399
+ - [`b9e82a3`](https://github.com/outfitter-dev/trails/commit/b9e82a33546356c93fbc302fb934a83f19f1c2c5): Webhook ingress v2 (TRL-1194, absorbing TRL-1174 and TRL-1175): store-verified, per-endpoint webhook ingress becomes framework-expressible. `webhook()` accepts dynamic path segments (`path: '/hooks/:endpoint'`) whose values are delivered as envelope fields, opt-in `rawBody: true` delivery (a non-JSON body is no longer a surface-level failure — the trail owns payload interpretation), an allowlisted `headers` list delivered lowercased, and `resources` that make `verify` resource-capable: the HTTP surface resolves the declared resources into a context for the verifier and releases them afterwards, so signature checks can reach stores holding per-endpoint secrets. Envelope-mode ingress responds 202 Accepted; classic static webhooks keep their exact-match, JSON-gated, 200 behavior. Core exports `parseWebhookPathParams`, `matchWebhookPath`, `webhookPathPatternsOverlap`, and `createResources`. The `webhook-route-collision` Warden rule now also flags dynamic patterns that overlap other webhook or derived routes, not just exact method/path duplicates.
400
+ - [`64fb15a`](https://github.com/outfitter-dev/trails/commit/64fb15acaaa76bd9785b69296e4f433886dfe098): Add Warden rules for trail version lifecycle guidance, version gaps, marker-safe schemas, pinned composes, examples, and pending force audit events.
401
+ - [`ce86e06`](https://github.com/outfitter-dev/trails/commit/ce86e06ea1624cb426f50f7333ae9b01c592868e): Treat same-scope inverse operation pairs such as enable/disable, pause/resume,
402
+ star/unstar, and archive/restore as intentional distinct public contracts in
403
+ the `duplicate-public-contract` rule.
404
+ - [`b1fbe57`](https://github.com/outfitter-dev/trails/commit/b1fbe574e6f44d1fecb5e3a000270955c0a77b7b): Publish Bun-validated package tarballs through an npm trusted-publishing adapter
405
+ binding, add exact repository metadata for each public workspace package, and
406
+ correct the native Bun release descriptor to its pack-only runtime boundary.
407
+ - [`3531b58`](https://github.com/outfitter-dev/trails/commit/3531b58ba5320753d6d2594257ef71bc950d28a1): Add the advisory captured-kernel Warden rule for ownership review when a public
408
+ subpath re-exports package internals and multiple production workspaces consume
409
+ that subpath, including import-then-export barrels that preserve the internal
410
+ binding through a local alias or default export.
411
+
412
+ Expose typed import-kind inspection from `@ontrails/source` so project rules
413
+ can keep erased type bindings separate from runtime exports.
414
+
415
+ - [`35cbe28`](https://github.com/outfitter-dev/trails/commit/35cbe289db46539b3689dbf6cf8ab0e5d9a1b09c): Found `@ontrails/source` as the shared source-code AST kernel for parsing,
416
+ walking, locations, edits, literals, and generic Trails syntax recognition.
417
+ Warden, Regrade, Wayfinder, and the Trails operator now import those shared
418
+ mechanics from `@ontrails/source`; the legacy Warden AST route is removed by the
419
+ stacked hard cutover.
420
+ - [`113aed6`](https://github.com/outfitter-dev/trails/commit/113aed62d20041e35b0cf9d6c1b1a18df4b88f57): Rename the dependency-light observability owner from `@ontrails/observe` to
421
+ `@ontrails/observability` as a pre-v1 hard cut. Update dependent packages,
422
+ documentation, package discovery, and the governed Regrade route; no
423
+ compatibility package or old import route is retained.
424
+ - [`0938e7b`](https://github.com/outfitter-dev/trails/commit/0938e7badc0c5470d194139d642b673658d099e0): Fold the removed `@ontrails/tracing` package into the truthful existing
425
+ owners: intrinsic trace contracts remain in core, developer-state tooling now
426
+ lives at `@ontrails/observability/dev`, and the dependency-light OTel adapter
427
+ lives at `@ontrails/observability/otel`. There is intentionally no root-package
428
+ compatibility redirect because the former root had more than one owner.
429
+ - [`50e2779`](https://github.com/outfitter-dev/trails/commit/50e27796d074851bccd57d7df009db749757b457): Extract the real `@ontrails/logtape` and `@ontrails/pino` adapters from the
430
+ temporary observability subpaths. The new packages own their namesake foreign
431
+ dependencies and preserve Trails record metadata, levels, redaction boundaries,
432
+ and lifecycle behavior; the old subpaths are removed in the pre-v1 hard cut.
433
+
434
+ Add governed Regrade transitions for both exact import replacements and expose
435
+ the observability adapter target through the shared adapter readiness check.
436
+
437
+ - [`35e5fed`](https://github.com/outfitter-dev/trails/commit/35e5fedd228e498783f479f0dd502e2f3ec772b8): Fold the Wayfinder graph-read catalog into `@ontrails/topography`. Wayfind
438
+ remains the product, trail-id, CLI, and MCP brand, but there is no longer an
439
+ `@ontrails/wayfinder` package to install or import. Programmatic consumers
440
+ should move imports such as `wayfinderTopo`, `wayfindOverviewTrail`,
441
+ `loadWayfinderArtifacts`, and the Wayfinder filter/provenance types to
442
+ `@ontrails/topography`.
443
+
444
+ Expose that package move as a governed Regrade transition so exact
445
+ `@ontrails/wayfinder` imports can move safely while product vocabulary and near
446
+ routes remain unchanged for review. Regrade routes package manifests through
447
+ structured review instead of rewriting dependency keys as plain text.
448
+
449
+ The Trails operator now reads all `wayfind.*` query trails and artifact helpers
450
+ from `@ontrails/topography` while preserving the existing CLI/MCP schemas,
451
+ route IDs, output shapes, and internal trail visibility.
452
+
453
+ - [`3a65ae3`](https://github.com/outfitter-dev/trails/commit/3a65ae363e05b7589f4a9876da4346886353b48c): Rename the durable graph substrate package from `@ontrails/topographer` to
454
+ `@ontrails/topography` after folding Wayfind graph queries into that owner.
455
+
456
+ Update imports to `@ontrails/topography` or
457
+ `@ontrails/topography/backend-support`. The pre-1.0 cutover does not ship a
458
+ compatibility package. TopoGraph, lock, topo-store, semantic diff, and Wayfind
459
+ APIs keep their existing contracts, and the `trails wayfind` CLI and MCP names
460
+ remain unchanged.
461
+
462
+ The governed package-route transition moves legacy `@ontrails/wayfinder`
463
+ imports directly to `@ontrails/topography`; it does not emit the retired
464
+ intermediate `@ontrails/topographer` route.
465
+
466
+ - [`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.
467
+ - [`2b7da24`](https://github.com/outfitter-dev/trails/commit/2b7da245b7d689e056bfd642e3651244c95e7ff4): Split Warden's source-analysis implementation into focused shared mechanics and
468
+ Warden-owned policy modules while preserving the public AST helper contract.
469
+ - [`76a9e1d`](https://github.com/outfitter-dev/trails/commit/76a9e1da974de24259f7384947e198e1f6380e44): Remove the legacy Warden AST compatibility export now that shared source-analysis helpers are published from `@ontrails/source`.
470
+ - [`a45cead`](https://github.com/outfitter-dev/trails/commit/a45cead6e3ddf6ce606bf5e663b74c0d3b5664b8): Make the planned contour-to-entity Regrade transition code-fact complete for
471
+ apply readiness while leaving the repository cutover status planned.
472
+ Identifiers that already contain the target segment now stay in the review
473
+ inventory instead of producing duplicated target names.
474
+ - [`8a1ac00`](https://github.com/outfitter-dev/trails/commit/8a1ac00b5d789be41ca6e464358c96b01e442bf4): Govern the exact `@ontrails/warden/ast` to `@ontrails/source` package route
475
+ transition for Regrade string-literal and module-specifier rewrites exposed
476
+ through the Trails CLI and MCP tools. Safe rewrites now require the owning
477
+ manifest to already declare the target package; otherwise Regrade preserves the
478
+ occurrence with dependency repair guidance. Invalid manifests remain unchanged
479
+ and produce structured repair guidance that names the owning manifest. Explicit
480
+ preserve rules remain no-ops before dependency validation, and dotted or
481
+ subpath-like near routes remain deferred instead of becoming invented imports.
482
+ - [`c009619`](https://github.com/outfitter-dev/trails/commit/c0096190e8ea66caf2cab5feb9c8d45e62aeccc2): The `resource-id-grammar` diagnostic now serializes its suggested rename with `JSON.stringify`, so the suggested `resource(...)` call stays valid TypeScript even when the resource id contains quote characters.
483
+ - [`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`.
484
+
485
+ 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.
486
+
487
+ - [`fb10112`](https://github.com/outfitter-dev/trails/commit/fb10112eb3a6f2092871e451a39d1bd1f339c7f8): Polish Warden guidance projection by preserving labels in plain-text doc links
488
+ and reusing the shared diagnostic schema from the Trails CLI wrapper.
489
+ - [`bfabe09`](https://github.com/outfitter-dev/trails/commit/bfabe09eda8f61abebfc369193f134c7db009ef1): Suppress static resource accessor warnings when a string lookup resolves to a
490
+ resource variable name shadowed inside `blaze`.
491
+ - [`7a1d4a9`](https://github.com/outfitter-dev/trails/commit/7a1d4a904d05b1ccd46af01fdab389cb2ab10a3d): Rename the public resolved graph API from `SurfaceMap` to `TopoGraph`, including
492
+ the derive, hash, diff, and current graph artifact I/O helpers.
493
+ - [`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.
494
+ - [`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`.
495
+ - [`2cc05da`](https://github.com/outfitter-dev/trails/commit/2cc05da8dbf8c9bb72e7ad23c624f6f1290a2f01): Harden Warden drift checks for lock v3 manifests. Malformed legacy lock files and manifests without the `topo.lock` artifact now report blocked drift with a regenerate instruction instead of throwing or silently passing.
496
+ - [`5d88104`](https://github.com/outfitter-dev/trails/commit/5d88104c6c269e2ef1e92ba3b9e09a410df10c7b): Polish Trails blaze terminology across package docs and Warden guidance.
497
+ - [`8f0cd26`](https://github.com/outfitter-dev/trails/commit/8f0cd26528428059173c7ba335c8982911dc2b7d): Upgrade the second wave of Warden diagnostics — the audit's "partial" set — to coaching diagnostics that teach the canonical fix instead of only naming the violation: `context-no-surface-types`, `static-resource-accessor-preference` (inline dependency construction), `example-valid`, `valid-detour-contract` (`on:` constructor), `intent-propagation`, `error-mapping-completeness`, `unreachable-detour-shadowing`, `draft-visible-debt`, `version-pinned-compose`, `orphaned-signal`, `scheduled-destroy-intent`, `resource-id-grammar`, `incomplete-crud`, and `webhook-route-collision`. Rule firing logic is unchanged; only diagnostic text and the matching test/example expectations moved.
498
+ - [`48d5ff4`](https://github.com/outfitter-dev/trails/commit/48d5ff446c6f933b5a5501fd1be861dfe02a5a07): Attach term-rewrite fix metadata to the `no-legacy-layer-imports` rule, marking it review-required with no mechanical edits (the legacy layers were removed, not renamed) so `warden --fix` reports but never auto-applies the migration.
499
+ - [`216bf10`](https://github.com/outfitter-dev/trails/commit/216bf10d92359d8464343ea81f6c445d06b43629): Fix a false `dead-internal-trail` warning by unioning file-local compose evidence with the project-context compose set, so same-file composition in scanned-but-unregistered packages is recognized.
500
+ - [`678cb1c`](https://github.com/outfitter-dev/trails/commit/678cb1c6f49ee0e12615f9dbf757672df49bdcdd): Expose the shared adapter readiness engine through Warden's opt-in
501
+ `--adapter-check` diagnostics and the local `trails adapter check` authoring
502
+ workflow.
503
+ - [`5874fd6`](https://github.com/outfitter-dev/trails/commit/5874fd6df872123eff26ce3e10c191681b3eec50): Preserve diagnostic fix metadata through Warden rule trail outputs.
504
+ - [`a4f9cf6`](https://github.com/outfitter-dev/trails/commit/a4f9cf6062d0d602eb9c00d06369a098950b72b2): Reserve the `shift` error category and `WorkspaceShiftError` before the stable
505
+ cutover so surface mappings can distinguish moved-workspace retry verdicts.
506
+ Update Warden's error-mapping completeness examples to cover the reserved
507
+ category.
508
+ - [`00c0cf8`](https://github.com/outfitter-dev/trails/commit/00c0cf8aa4d7bd4c893883413128d9bf0c5c03b2): Add Warden governance for CLI command route and alias coherence.
509
+ - [`b313c58`](https://github.com/outfitter-dev/trails/commit/b313c5864e3ca950193e5f10cc5002874f36c363): Add library projection coherence governance so Warden reports generated library export collisions and stale projection targets before packages materialize.
510
+ - [`f245fa0`](https://github.com/outfitter-dev/trails/commit/f245fa03081178163076712fc2c7fbca4ad940fa): Add advisory trail-fork coaching so Warden can warn when a trail may be hiding
511
+ several capabilities behind one branching action or operation input.
512
+ - [`f1e6efa`](https://github.com/outfitter-dev/trails/commit/f1e6efa4f383287f0b2196f48185699e7476b18c): Recognize module-local helper functions that receive the trail context when checking declared compose usage.
513
+ - [`caff950`](https://github.com/outfitter-dev/trails/commit/caff950232df606ad48106c9324f191b81b43ba6): `implementation-returns-result` now recognizes conditional returns whose branches are all recognized Result expressions — both `return cond ? Result.err(...) : Result.ok(...)` statements (including branches that are Result helpers or Result-bound variables) and concise ternary blaze bodies. Previously the idiomatic two-branch ternary was flagged as an error.
514
+ - [`6901776`](https://github.com/outfitter-dev/trails/commit/6901776beaa1412a859f0e9e69c0251c7c432fd9): Add a Warden rule and safe-fix metadata for rewriting retired cross vocabulary to compose vocabulary.
515
+ - [`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.
516
+
517
+ Keep the generated `create` trail on the direct `ctx.compose(...)` shape so framework-authored trails follow the same composition guidance.
518
+
519
+ - [`4642268`](https://github.com/outfitter-dev/trails/commit/464226862202b682a450e9858d9900e149a08f14): Make the standalone `warden --help` entry point print CLI help instead of running Warden with an unknown-option diagnostic.
520
+ - [`9bab0cf`](https://github.com/outfitter-dev/trails/commit/9bab0cf0a3c7d2a24c22605899653c84af7c3e6b): Follow schema aliases when detecting hidden optional wrappers in version marker
521
+ schemas.
522
+ - [`3ceeba8`](https://github.com/outfitter-dev/trails/commit/3ceeba8a0d4f7f8bc889a2455c106e60271c051e): Expand marker-schema-unsupported diagnostics to catch Zod schema constructs that
523
+ runtime marker derivation rejects.
524
+ - [`5e7fee8`](https://github.com/outfitter-dev/trails/commit/5e7fee84902c5015f8aefb249e3b0306704a8c92): Keep file-authored signal, resource, entity, and trail definitions known to existence rules for workspace files outside a narrowed app selection. A `trails warden --app <id>` run scans the whole configured workspace but previously built its known-id sets only from the selected app's topo, so honest references in unselected apps — such as a demo trail's `on:` reference to its own declared signal — failed `on-references-exist`. Loaded topos stay authoritative for files under their app-local roots, and root-less topo targets keep governing the entire scan.
525
+ - [`df9a7d0`](https://github.com/outfitter-dev/trails/commit/df9a7d00fe4d9ebec948b6ebed6dc4525fc8e0dc): Add project-aware public export-map governance for @ontrails workspace docs,
526
+ imports, root barrels, and bin-only package surfaces.
527
+ - [`beafd03`](https://github.com/outfitter-dev/trails/commit/beafd0359435a8427f48126271fa59aebc2bcc32): Add a warning for blazes that re-wrap an existing Result error with Result.err(result.error) instead of returning the original Result.
528
+ - [`30a2c7e`](https://github.com/outfitter-dev/trails/commit/30a2c7e362e75cf8c04a2472c6e2179cedea5ea4): Add the resolver-backed `resolved-import-boundary` Warden rule for cross-package import boundary enforcement.
529
+ - [`81bffec`](https://github.com/outfitter-dev/trails/commit/81bffece74acc353a59749b7153f70000f52e3e3): Add Warden import-resolution substrate backed by `oxc-resolver`.
530
+ - [`7b173e0`](https://github.com/outfitter-dev/trails/commit/7b173e0cae2f12859e0ee06299e579e492d88706): Warn when a `resource('id', { ... })` definition declares neither a `mock` factory nor an explicit `unmockable` reason, so `testAll(app)` can provision it without production configuration (common pitfall #10).
531
+ - [`6e50e7b`](https://github.com/outfitter-dev/trails/commit/6e50e7b43386cd2a52fec9dea8e0bc72412fc8e4): Recognize Result-returning helper provenance when helpers use an imported Result type alias.
532
+ - [`48edf8d`](https://github.com/outfitter-dev/trails/commit/48edf8d5d3d11f482101b21e268d296a3815480c): Expose shared Warden source scan-target predicates so downstream consumers can
533
+ preserve the CLI runner's test and declaration-file filtering before invoking
534
+ Warden-owned rules directly.
535
+ - [`12ffa3b`](https://github.com/outfitter-dev/trails/commit/12ffa3b86a77a591e624108bfff7a802b4057483): Align Warden signal-rule trail examples so producer trails call `ctx.fire()` for their declared signals.
536
+ - [`2f262f7`](https://github.com/outfitter-dev/trails/commit/2f262f7b092d68a9f4351a94ff6176058e86f11f): Improve Warden diagnostics so names-only findings teach the canonical fix instead of only naming the violation.
537
+ - [`58b01f2`](https://github.com/outfitter-dev/trails/commit/58b01f24a8ec96eb835bd427469eaca83c803cac): Warn when topo export modules open Trails surfaces at module top level.
538
+ - [`d675a53`](https://github.com/outfitter-dev/trails/commit/d675a53e0232f6116d5c5ee8a26eded720ea4d62): Omit `topoNames` from Warden reports when no topo targets were governed, matching the optional report contract.
539
+ - [`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.
540
+
541
+ ## 1.0.0-beta.50
542
+
543
+ ## 1.0.0-beta.49
544
+
545
+ ## 1.0.0-beta.48
546
+
547
+ ## 1.0.0-beta.47
548
+
549
+ ### Patch Changes
550
+
551
+ - [`ea2f296`](https://github.com/outfitter-dev/trails/commit/ea2f296e8119cf79bd03aeca3f0aa804f2fbcdd6): Classify adjacent package-route variants in the authored Warden AST regression
552
+ fixtures as explicit preserves so the completed transition remains auditable.
553
+ - [`90d394c`](https://github.com/outfitter-dev/trails/commit/90d394c005fdf6b898ba7052d0b56755af0f4954): Derive nested worktree, repository, and submodule collection boundaries in the
554
+ shared Source walker. Regrade and Warden now observe one directly targeted
555
+ working tree per run, and Regrade audit summaries expose boundary skip counts.
556
+
557
+ ## 1.0.0-beta.46
558
+
559
+ ### Minor Changes
560
+
561
+ - [`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.
562
+ - [`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.
563
+
564
+ ### Patch Changes
565
+
566
+ - [`54d259b`](https://github.com/outfitter-dev/trails/commit/54d259be81fb6c41d85be48a6cb2100c746a7126): Expose parser-native comment spans from `parseWithDiagnostics` so source-aware
567
+ tooling can distinguish exact JavaScript and TypeScript comment trivia without
568
+ reimplementing a lexer.
569
+
570
+ Use the shared spans in Warden's public-example rule while keeping leading
571
+ comment ownership fail-closed across JavaScript line terminators.
572
+
573
+ - [`768cc79`](https://github.com/outfitter-dev/trails/commit/768cc79ca10947b8808b376e281e1a81131b4acc): Close missed projection vocabulary residue in Regrade internals and public
574
+ error-rendering guidance, and keep lifecycle-ambiguous governed identifiers in
575
+ the Warden review inventory instead of assigning them an unsafe automatic
576
+ target.
577
+
578
+ ## 1.0.0-beta.45
579
+
580
+ ### Patch Changes
581
+
582
+ - [`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.
583
+
584
+ ## 1.0.0-beta.44
585
+
586
+ ### Patch Changes
587
+
588
+ - [`b1fbe57`](https://github.com/outfitter-dev/trails/commit/b1fbe574e6f44d1fecb5e3a000270955c0a77b7b): Publish Bun-validated package tarballs through an npm trusted-publishing adapter
589
+ binding, add exact repository metadata for each public workspace package, and
590
+ correct the native Bun release descriptor to its pack-only runtime boundary.
591
+
592
+ ## 1.0.0-beta.43
593
+
594
+ ### Minor Changes
595
+
596
+ - [`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.
597
+ - [`8fde0a6`](https://github.com/outfitter-dev/trails/commit/8fde0a6c66a7f64f0c27909df7db2731fa4b10f4): Add an advisory project-static rule that reports unknown governed vocabulary permutations from the latest committed Regrade history until they are classified.
598
+ - [`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.
599
+ - [`5a7d22a`](https://github.com/outfitter-dev/trails/commit/5a7d22ab9d674f86b28758f23c3e94a17efb5be1): Add three-tier vocabulary migration scope. Protected historical paths remain
600
+ scanned and counted as `historical-by-policy` without being rewritten, while
601
+ reports expose scope-tier totals and census-expected teaching-surface coverage
602
+ through equivalent CLI and MCP plan schemas. Applied vocabulary occurrences
603
+ remain auditable in history with an `applied` verdict, while policy-only
604
+ evidence does not make an active plan stale merely by being recorded.
605
+ - [`88a6a62`](https://github.com/outfitter-dev/trails/commit/88a6a62a9e9e230ca6d368fa78dc3ece6c816204): Complete the v1 classification-first cutover from projection/project vocabulary
606
+ to derive/derived for contract-owned fact production and render/rendered for
607
+ surface presentation. Public type, helper, rule, relation, and report names move
608
+ without compatibility aliases; ordinary repository/project nouns remain
609
+ explicit preserves or structured review inventory.
610
+ - [`bd1bd96`](https://github.com/outfitter-dev/trails/commit/bd1bd96b90cd8b55f73061e4078a14cd75bed745): Require committed Regrade provenance for governed vocabulary transitions.
611
+
612
+ Applied governed plans now expose deterministic transition, plan, source,
613
+ safe-apply, and review-follow-up evidence through history results. Warden loads
614
+ committed history into project context, cites it for reintroduced symbols, and
615
+ rejects invalid or missing provenance for transitions that require Regrade in
616
+ the workspace that owns the governed registry, without making downstream apps
617
+ prove the framework's own migrations.
618
+ Portable validation accepts the authoritative numeric file-rename counters
619
+ persisted by Regrade history.
620
+
621
+ ### Patch Changes
622
+
623
+ - [`53014a4`](https://github.com/outfitter-dev/trails/commit/53014a4593170edd5adfbaa2c94c895c67a320d1): Exclude immutable Regrade history artifacts from downstream migration source scans while preserving active plan and other policy-classified evidence. Warden continues to validate committed history through its dedicated provenance loader.
624
+ - [`9f0842e`](https://github.com/outfitter-dev/trails/commit/9f0842ee9d7c7155d86a4fd023760ac0a5636f5d): Retire the temporary root vocabulary-cutover toolchain now that Regrade owns
625
+ structured migration plans, safe rewrites, classification, census, CLI/MCP
626
+ reports, and immutable history. Remove the obsolete source exemptions so
627
+ Oxlint and Warden enforce the durable transition contract directly, and add a
628
+ history-driven Regrade audit surface for current-tree regression checks.
629
+ - [`9f0842e`](https://github.com/outfitter-dev/trails/commit/9f0842ee9d7c7155d86a4fd023760ac0a5636f5d): Allow source rules to opt into documentation and text-file scanning so durable repository vocabulary guards cover every declared source kind.
630
+ - [`113aed6`](https://github.com/outfitter-dev/trails/commit/113aed62d20041e35b0cf9d6c1b1a18df4b88f57): Rename the dependency-light observability owner from `@ontrails/observe` to
631
+ `@ontrails/observability` as a pre-v1 hard cut. Update dependent packages,
632
+ documentation, package discovery, and the governed Regrade route; no
633
+ compatibility package or old import route is retained.
634
+ - [`0938e7b`](https://github.com/outfitter-dev/trails/commit/0938e7badc0c5470d194139d642b673658d099e0): Fold the removed `@ontrails/tracing` package into the truthful existing
635
+ owners: intrinsic trace contracts remain in core, developer-state tooling now
636
+ lives at `@ontrails/observability/dev`, and the dependency-light OTel adapter
637
+ lives at `@ontrails/observability/otel`. There is intentionally no root-package
638
+ compatibility redirect because the former root had more than one owner.
639
+ - [`50e2779`](https://github.com/outfitter-dev/trails/commit/50e27796d074851bccd57d7df009db749757b457): Extract the real `@ontrails/logtape` and `@ontrails/pino` adapters from the
640
+ temporary observability subpaths. The new packages own their namesake foreign
641
+ dependencies and preserve Trails record metadata, levels, redaction boundaries,
642
+ and lifecycle behavior; the old subpaths are removed in the pre-v1 hard cut.
643
+
644
+ Add governed Regrade transitions for both exact import replacements and expose
645
+ the observability adapter target through the shared adapter readiness check.
646
+
647
+ ## 1.0.0-beta.42
648
+
649
+ ## 1.0.0-beta.41
650
+
651
+ ## 1.0.0-beta.40
652
+
653
+ ### Minor Changes
654
+
655
+ - [`5adb995`](https://github.com/outfitter-dev/trails/commit/5adb99551c2dda6190d46cce7f60bb08d63c99aa): Complete the v1 hard cutover from the authored `blaze` field to
656
+ `implementation` across trail contracts, surface projections, tests, examples,
657
+ and public source-analysis helpers. Existing applications must rename authored
658
+ trail behavior fields and direct trail-object access before upgrading.
659
+ - [`6712075`](https://github.com/outfitter-dev/trails/commit/67120754df3f614c7f4dd98be1fa0ba9d69b7765): Complete the v1 hard cutover from the `contour` domain-object declaration
660
+ vocabulary to `entity` across contracts, topo facts, store helpers, Warden,
661
+ Wayfinder, operator surfaces, examples, and generated locks. Existing
662
+ applications must rename contour APIs, run `trails dev reset --yes` to discard
663
+ pre-cutover local Topographer snapshots, and then recompile committed
664
+ `trails.lock` artifacts before upgrading. Those derived snapshots are
665
+ intentionally not read through a compatibility layer.
666
+ The entity-shaped wire contract advances `TopoGraph` and split lock manifests
667
+ from schema version 3 to 4; old split artifacts fail with regeneration guidance,
668
+ while the canonical root `trails.lock` remains schema version 5.
669
+ Wayfinder reports those stale rows as topo-store drift while keeping current
670
+ committed lock facts available for inspection.
671
+ - [`aedb87b`](https://github.com/outfitter-dev/trails/commit/aedb87b3b536c5849636c7a5951c51e1e7f0d1cc): Add governed identifier-segment renames for AST-backed migrations. Regrade can
672
+ now migrate camelCase, PascalCase, leading-underscore, and SCREAMING_SNAKE
673
+ identifier segments, including single-segment forms such as `BLAZE` and
674
+ `_BLAZE`, while preserving exact-mode behavior and rejecting lowercase
675
+ substring, concatenated acronym, or inflection matches.
676
+
677
+ ### Patch Changes
678
+
679
+ - [`9874e0b`](https://github.com/outfitter-dev/trails/commit/9874e0bb034c0f98edeb19833d9d3519c2a07a4c): Add `@ontrails/cloudflare/d1`, an env-bound Cloudflare D1 store resource for `@ontrails/store` definitions. The new subpath exports `cloudflareD1` and `connectD1`, supports the backend-agnostic store accessor contract (`get`, `list`, `upsert`, `remove`), versioned-table optimistic concurrency, fixture/mock seeding, store-derived write signals, Miniflare-backed conformance tests, and Worker env-bridge integration.
680
+
681
+ `@ontrails/core` and `@ontrails/store` no longer require the Bun global for signal fire ids or late-bound store signal tokens, so store definitions and store-derived signal emission work inside Worker modules. `@ontrails/warden` now treats `cloudflareD1` as a required Cloudflare public export with `@example` coverage.
682
+
683
+ - [`1e64ee7`](https://github.com/outfitter-dev/trails/commit/1e64ee7bc270901486c5bb51ac38bf045c924adc): Add first-class queue activation sources with `queue()` in `@ontrails/core`.
684
+ Queue sources validate their runtime queue name and parse contract, project the
685
+ queue name into durable topo facts, participate in activation input
686
+ compatibility, and block established outputs when malformed.
687
+
688
+ Add `@ontrails/cloudflare/queues` with `cloudflareQueue`, `createMemoryQueue`,
689
+ and `createQueueHandler`. Cloudflare Workers now expose both `fetch` and
690
+ `queue` entrypoints from `createWorkersHandler`, resolve env-bound resources for
691
+ queue-activated trails, acknowledge successful/skipped/cancelled messages, and
692
+ acknowledge traced non-retryable Trails errors so permanently invalid messages
693
+ do not churn through the queue. Failures explicitly marked retryable enter
694
+ Cloudflare's retry and DLQ flow, with rate-limit delays preserved.
695
+
696
+ `@ontrails/warden` now treats queue activation sources as materialized and
697
+ requires `cloudflareQueue` public export example coverage.
698
+
699
+ - [`4086b5b`](https://github.com/outfitter-dev/trails/commit/4086b5b2f01b24660924fd8b667523f38caaed29): Add `@ontrails/cloudflare/r2`, an env-bound Cloudflare R2 bucket resource with
700
+ `cloudflareR2`, `createMemoryR2`, and `r2ObjectToBlobRef`. The resource
701
+ materializes Worker `r2_buckets` bindings through the shared env bridge, records
702
+ Cloudflare lock overlay facts, carries an in-memory object mock for
703
+ configuration-free tests, and documents the supported object operations plus
704
+ streaming/metadata boundaries.
705
+
706
+ `@ontrails/warden` now treats `cloudflareR2` as a required Cloudflare public
707
+ export with `@example` coverage.
708
+
709
+ - [`01b9204`](https://github.com/outfitter-dev/trails/commit/01b92046db52c71f22a871e58a308d7a94483cab): Harden governed v1 vocabulary transitions with property-key-only blaze literal
710
+ rewrites, structured review for ambiguous literal positions, explicit
711
+ scratch/history boundaries, and scan-only preservation for migration plans and
712
+ historical decision evidence.
713
+ - [`ce86e06`](https://github.com/outfitter-dev/trails/commit/ce86e06ea1624cb426f50f7333ae9b01c592868e): Treat same-scope inverse operation pairs such as enable/disable, pause/resume,
714
+ star/unstar, and archive/restore as intentional distinct public contracts in
715
+ the `duplicate-public-contract` rule.
716
+ - [`3531b58`](https://github.com/outfitter-dev/trails/commit/3531b58ba5320753d6d2594257ef71bc950d28a1): Add the advisory captured-kernel Warden rule for ownership review when a public
717
+ subpath re-exports package internals and multiple production workspaces consume
718
+ that subpath, including import-then-export barrels that preserve the internal
719
+ binding through a local alias or default export.
720
+
721
+ Expose typed import-kind inspection from `@ontrails/source` so project rules
722
+ can keep erased type bindings separate from runtime exports.
723
+
724
+ - [`35cbe28`](https://github.com/outfitter-dev/trails/commit/35cbe289db46539b3689dbf6cf8ab0e5d9a1b09c): Found `@ontrails/source` as the shared source-code AST kernel for parsing,
725
+ walking, locations, edits, literals, and generic Trails syntax recognition.
726
+ Warden, Regrade, Wayfinder, and the Trails operator now import those shared
727
+ mechanics from `@ontrails/source`; the legacy Warden AST route is removed by the
728
+ stacked hard cutover.
729
+ - [`35e5fed`](https://github.com/outfitter-dev/trails/commit/35e5fedd228e498783f479f0dd502e2f3ec772b8): Fold the Wayfinder graph-read catalog into `@ontrails/topography`. Wayfind
730
+ remains the product, trail-id, CLI, and MCP brand, but there is no longer an
731
+ `@ontrails/wayfinder` package to install or import. Programmatic consumers
732
+ should move imports such as `wayfinderTopo`, `wayfindOverviewTrail`,
733
+ `loadWayfinderArtifacts`, and the Wayfinder filter/provenance types to
734
+ `@ontrails/topography`.
735
+
736
+ Expose that package move as a governed Regrade transition so exact
737
+ `@ontrails/wayfinder` imports can move safely while product vocabulary and near
738
+ routes remain unchanged for review. Regrade routes package manifests through
739
+ structured review instead of rewriting dependency keys as plain text.
740
+
741
+ The Trails operator now reads all `wayfind.*` query trails and artifact helpers
742
+ from `@ontrails/topography` while preserving the existing CLI/MCP schemas,
743
+ route IDs, output shapes, and internal trail visibility.
744
+
745
+ - [`3a65ae3`](https://github.com/outfitter-dev/trails/commit/3a65ae363e05b7589f4a9876da4346886353b48c): Rename the durable graph substrate package from `@ontrails/topographer` to
746
+ `@ontrails/topography` after folding Wayfind graph queries into that owner.
747
+
748
+ Update imports to `@ontrails/topography` or
749
+ `@ontrails/topography/backend-support`. The pre-1.0 cutover does not ship a
750
+ compatibility package. TopoGraph, lock, topo-store, semantic diff, and Wayfind
751
+ APIs keep their existing contracts, and the `trails wayfind` CLI and MCP names
752
+ remain unchanged.
753
+
754
+ The governed package-route transition moves legacy `@ontrails/wayfinder`
755
+ imports directly to `@ontrails/topography`; it does not emit the retired
756
+ intermediate `@ontrails/topographer` route.
757
+
758
+ - [`2b7da24`](https://github.com/outfitter-dev/trails/commit/2b7da245b7d689e056bfd642e3651244c95e7ff4): Split Warden's source-analysis implementation into focused shared mechanics and
759
+ Warden-owned policy modules while preserving the public AST helper contract.
760
+ - [`76a9e1d`](https://github.com/outfitter-dev/trails/commit/76a9e1da974de24259f7384947e198e1f6380e44): Remove the legacy Warden AST compatibility export now that shared source-analysis helpers are published from `@ontrails/source`.
761
+ - [`a45cead`](https://github.com/outfitter-dev/trails/commit/a45cead6e3ddf6ce606bf5e663b74c0d3b5664b8): Make the planned contour-to-entity Regrade transition code-fact complete for
762
+ apply readiness while leaving the repository cutover status planned.
763
+ Identifiers that already contain the target segment now stay in the review
764
+ inventory instead of producing duplicated target names.
765
+ - [`8a1ac00`](https://github.com/outfitter-dev/trails/commit/8a1ac00b5d789be41ca6e464358c96b01e442bf4): Govern the exact `@ontrails/warden/ast` to `@ontrails/source` package route
766
+ transition for Regrade string-literal and module-specifier rewrites exposed
767
+ through the Trails CLI and MCP tools. Safe rewrites now require the owning
768
+ manifest to already declare the target package; otherwise Regrade preserves the
769
+ occurrence with dependency repair guidance. Invalid manifests remain unchanged
770
+ and produce structured repair guidance that names the owning manifest. Explicit
771
+ preserve rules remain no-ops before dependency validation, and dotted or
772
+ subpath-like near routes remain deferred instead of becoming invented imports.
773
+
774
+ ## 1.0.0-beta.39
775
+
776
+ ### Patch Changes
777
+
778
+ - [`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.
779
+
780
+ 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.
781
+
782
+ - [`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.
783
+ - [`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.
784
+ - [`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`.
785
+
786
+ 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.
787
+
788
+ 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.
789
+
790
+ - [`820b4ad`](https://github.com/outfitter-dev/trails/commit/820b4ad9c40ea383b3c489a05fe7e4b2328e324f): Add `surfaceOverlay` — the shared surface-naming schema (scalar binding = synonym, list binding = grouped entry, singleton list stays a group) with app-authored/adapter-derived overlay provenance enforced at collection and consumption, and the `surface-overlay-coherence` Warden rule. MCP tool-name derivation moves to `@ontrails/core` (`deriveMcpToolName`) so the surface and governance read one projection; `@ontrails/mcp`'s `deriveToolName` now delegates to it. The coherence rule activates on standard warden runs once fresh derivations collect app-module overlays through the shared compile channel (TRL-1209, next in this stack).
791
+ - [`58db715`](https://github.com/outfitter-dev/trails/commit/58db715209442604fe58f5004fec37426c5969b1): `duplicate-public-contract` now includes contour anchoring in the normalized contract fingerprint, so factory CRUD trails derived against different contours (for example two tables' `delete` trails that both normalize to `{ id } → void` with the same intent) are no longer flagged as duplicates. Genuine duplicates — identical facts with the same or no contour anchoring — still warn, and the diagnostic message names contours among the shared facts.
792
+ - [`7cd0576`](https://github.com/outfitter-dev/trails/commit/7cd0576db8bc421cfd441c126f884e425e2254af): `signal-graph-coaching` no longer flags store-derived table signals (`created`/`updated`/`removed`) that have no consumers. Store resources advertise those signals as available capability, so leaving them unconsumed is a legitimate steady state for store-backed apps. Non-store produced signals without consumers still warn, and dead-signal coaching (no producer and no consumer) is unchanged.
793
+ - [`b9e82a3`](https://github.com/outfitter-dev/trails/commit/b9e82a33546356c93fbc302fb934a83f19f1c2c5): Webhook ingress v2 (TRL-1194, absorbing TRL-1174 and TRL-1175): store-verified, per-endpoint webhook ingress becomes framework-expressible. `webhook()` accepts dynamic path segments (`path: '/hooks/:endpoint'`) whose values are delivered as envelope fields, opt-in `rawBody: true` delivery (a non-JSON body is no longer a surface-level failure — the trail owns payload interpretation), an allowlisted `headers` list delivered lowercased, and `resources` that make `verify` resource-capable: the HTTP surface resolves the declared resources into a context for the verifier and releases them afterwards, so signature checks can reach stores holding per-endpoint secrets. Envelope-mode ingress responds 202 Accepted; classic static webhooks keep their exact-match, JSON-gated, 200 behavior. Core exports `parseWebhookPathParams`, `matchWebhookPath`, `webhookPathPatternsOverlap`, and `createResources`. The `webhook-route-collision` Warden rule now also flags dynamic patterns that overlap other webhook or derived routes, not just exact method/path duplicates.
794
+
795
+ ## 1.0.0-beta.38
796
+
797
+ ### Patch Changes
798
+
799
+ - [`a105127`](https://github.com/outfitter-dev/trails/commit/a105127e5662ed9a6c245125f791fb0182da3f5e): Add the `@ontrails/cloudflare` adapter collection with its first two service subpaths. `@ontrails/cloudflare/workers` exports `createWorkersHandler`, a materializer producing the `{ fetch(request, env, ctx) }` Worker export on the shared HTTP fetch kernel, with an env bridge that re-resolves env-bound resources whenever a new Worker `env` arrives so no resource instance serves a request with a stale env. `@ontrails/cloudflare/kv` exports `cloudflareKv`, a resource definition wrapping a KV namespace binding (`get`/`put`/`delete`/`list` with TTL options) plus an in-memory `createMemoryKv` mock so `testAll` runs configuration-free.
800
+
801
+ `@ontrails/core` now guards the default trail context fields: `requestId` falls back to `crypto.randomUUID()` when the `Bun` global is absent, and `cwd`/`env` fall back to `'/'`/`{}` when `process` is absent, so trail execution works on runtimes like Cloudflare Workers.
802
+
803
+ `@ontrails/warden` registers the `@ontrails/cloudflare` public barrel in the repo-local `public-export-example-coverage` policy, requiring `@example` TSDoc coverage on `createWorkersHandler` and `cloudflareKv`.
804
+
805
+ ## 1.0.0-beta.37
806
+
807
+ ## 1.0.0-beta.36
808
+
809
+ ### Patch Changes
810
+
811
+ - [`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.
812
+
813
+ ## 1.0.0-beta.35
814
+
815
+ ### Patch Changes
816
+
817
+ - [`1f5659b`](https://github.com/outfitter-dev/trails/commit/1f5659bfe39568f7bbee0503ace8b6e562d3f899): Add the `duplicate-exported-symbol` Warden rule to warn when multiple first-party packages define the same exported symbol name.
818
+
819
+ ## 1.0.0-beta.34
820
+
821
+ ## 1.0.0-beta.33
822
+
823
+ ### Patch Changes
824
+
825
+ - [`fc002d5`](https://github.com/outfitter-dev/trails/commit/fc002d5669f4303427e99f45f9998fd0b0172bdb): Add governed AST identifier rename helpers and Warden residue detection for
826
+ active vocabulary symbol transitions.
827
+ - [`6ca0d8f`](https://github.com/outfitter-dev/trails/commit/6ca0d8f776801eee71ddd86cb88c198eaf5815fd): Add a typed governed-vocabulary transition registry that Warden owns and Regrade
828
+ can consume for migration planning.
829
+
830
+ ## 1.0.0-beta.32
831
+
832
+ ### Patch Changes
833
+
834
+ - 3e5c0fc: Export shared diagnostic base types from core and align governance diagnostic
835
+ severity vocabulary across adapter checks, permits, and Warden.
836
+ - f3c4fef: Export a shared `escapeRegExp` helper from core and migrate first-party callers off local copies.
837
+ - cb0a9d8: Export shared workspace package discovery helpers from core and migrate first-party discovery callers.
838
+ - fe72b84: Fold remaining Regrade and Warden scan-target surfaces onto the shared path-scope vocabulary.
839
+ - Updated dependencies [3e5c0fc]
840
+ - Updated dependencies [f3c4fef]
841
+ - Updated dependencies [cb0a9d8]
842
+ - Updated dependencies [8db145e]
843
+ - Updated dependencies [2b819f4]
844
+ - Updated dependencies [21c6dda]
845
+ - Updated dependencies [860ef32]
846
+ - Updated dependencies [fe72b84]
847
+ - @ontrails/adapter-kit@1.0.0-beta.32
848
+ - @ontrails/core@1.0.0-beta.32
849
+ - @ontrails/permits@1.0.0-beta.32
850
+ - @ontrails/topographer@1.0.0-beta.32
851
+ - @ontrails/config@1.0.0-beta.32
852
+ - @ontrails/cli@1.0.0-beta.32
853
+ - @ontrails/store@1.0.0-beta.32
854
+
855
+ ## 1.0.0-beta.31
856
+
857
+ ### Patch Changes
858
+
859
+ - ee9f3ae: Let Warden fix capabilities declare downstream scan targets and have Regrade
860
+ honor those targets for Warden-backed term-rewrite classes.
861
+
862
+ Dogfood the first safe facet-to-trailhead prose rewrite through project-local
863
+ Warden rules and Regrade.
864
+
865
+ - a0126d9: Add Warden `scope.exclude` globs through project config and the Trails CLI
866
+ wrapper so governance runs can exclude local notes, scratch space, and generated
867
+ state without dropping durable skills or plugin assets from scope.
868
+ - 6a26a08: Rename Warden governance scope controls from jurisdiction ignore settings to `scope.exclude` across config, CLI, and Trails surfaces.
869
+ - Updated dependencies [4cd5d4e]
870
+ - Updated dependencies [38907cc]
871
+ - @ontrails/core@1.0.0-beta.31
872
+ - @ontrails/adapter-kit@1.0.0-beta.31
873
+ - @ontrails/cli@1.0.0-beta.31
874
+ - @ontrails/config@1.0.0-beta.31
875
+ - @ontrails/permits@1.0.0-beta.31
876
+ - @ontrails/store@1.0.0-beta.31
877
+ - @ontrails/topographer@1.0.0-beta.31
878
+
879
+ ## 1.0.0-beta.30
880
+
881
+ ### Patch Changes
882
+
883
+ - @ontrails/adapter-kit@1.0.0-beta.30
884
+ - @ontrails/cli@1.0.0-beta.30
885
+ - @ontrails/config@1.0.0-beta.30
886
+ - @ontrails/core@1.0.0-beta.30
887
+ - @ontrails/permits@1.0.0-beta.30
888
+ - @ontrails/store@1.0.0-beta.30
889
+ - @ontrails/topographer@1.0.0-beta.30
890
+
891
+ ## 1.0.0-beta.29
892
+
893
+ ### Patch Changes
894
+
895
+ - @ontrails/adapter-kit@1.0.0-beta.29
896
+ - @ontrails/cli@1.0.0-beta.29
897
+ - @ontrails/config@1.0.0-beta.29
898
+ - @ontrails/core@1.0.0-beta.29
899
+ - @ontrails/permits@1.0.0-beta.29
900
+ - @ontrails/store@1.0.0-beta.29
901
+ - @ontrails/topographer@1.0.0-beta.29
902
+
903
+ ## 1.0.0-beta.28
904
+
905
+ ### Patch Changes
906
+
907
+ - @ontrails/adapter-kit@1.0.0-beta.28
908
+ - @ontrails/cli@1.0.0-beta.28
909
+ - @ontrails/config@1.0.0-beta.28
910
+ - @ontrails/core@1.0.0-beta.28
911
+ - @ontrails/permits@1.0.0-beta.28
912
+ - @ontrails/store@1.0.0-beta.28
913
+ - @ontrails/topographer@1.0.0-beta.28
914
+
915
+ ## 1.0.0-beta.27
916
+
917
+ ### Patch Changes
918
+
919
+ - @ontrails/adapter-kit@1.0.0-beta.27
920
+ - @ontrails/cli@1.0.0-beta.27
921
+ - @ontrails/config@1.0.0-beta.27
922
+ - @ontrails/core@1.0.0-beta.27
923
+ - @ontrails/permits@1.0.0-beta.27
924
+ - @ontrails/store@1.0.0-beta.27
925
+ - @ontrails/topographer@1.0.0-beta.27
926
+
927
+ ## 1.0.0-beta.26
928
+
929
+ ### Patch Changes
930
+
931
+ - 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/`.
932
+ - ef09e46: Add shared Trails project-root discovery helpers and use them in Warden so nested
933
+ cwd invocations still load root `trails.config.*` and project-local
934
+ `.trails/rules*` governance.
935
+ - 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.
936
+ - 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.
937
+ - ff48e41: Harden project-local rule loading: Warden now discovers `.trails/rules.ts` and direct `.trails/rules/*.ts` files only, reports duplicate project-local rule ids, and emits a migration diagnostic for the retired `trails/warden/rules` location.
938
+ - Updated dependencies [1307568]
939
+ - Updated dependencies [ef09e46]
940
+ - Updated dependencies [38cd9d6]
941
+ - Updated dependencies [f8403c4]
942
+ - Updated dependencies [371d19e]
943
+ - @ontrails/config@1.0.0-beta.26
944
+ - @ontrails/core@1.0.0-beta.26
945
+ - @ontrails/topographer@1.0.0-beta.26
946
+ - @ontrails/adapter-kit@1.0.0-beta.26
947
+ - @ontrails/cli@1.0.0-beta.26
948
+ - @ontrails/permits@1.0.0-beta.26
949
+ - @ontrails/store@1.0.0-beta.26
950
+
951
+ ## 1.0.0-beta.25
952
+
953
+ ### Patch Changes
954
+
955
+ - a9fdbc7: Clarify surface accommodation doctrine in MCP surface facet metadata and Warden trail-fork coaching guidance.
956
+ - f8fd6ca: Add OXC Walker-backed AST facade helpers for parent-aware traversal, scope-aware traversal, source locations, and safe source edits.
957
+ - 0fcc42b: Add `dead-public-trail` and `duplicate-public-contract` Warden coaching rules so exported public trails stay anchored and duplicate surface contracts become visible drift.
958
+ - c36aca9: Preserve existing Result error boundaries directly and widen Warden pass-through
959
+ coaching beyond trail blazes.
960
+ - f556559: Adds curated typed AST node guards to the public `@ontrails/warden/ast` helper
961
+ surface so source consumers can narrow common OXC node shapes without assertion
962
+ casts.
963
+ - 6250729: Expands the public AST guard/accessor surface and migrates Warden/Regrade AST
964
+ consumers onto the typed helpers instead of rule-local node-field casts.
965
+ - d73c38e: Warn when Warden rules add raw AST node-field casts where a typed accessor exists.
966
+ - 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.
967
+ - a4f9cf6: Reserve the `shift` error category and `WorkspaceShiftError` before the stable
968
+ cutover so surface mappings can distinguish moved-workspace retry verdicts.
969
+ Update Warden's error-mapping completeness examples to cover the reserved
970
+ category.
971
+ - 00c0cf8: Add Warden governance for CLI command route and alias coherence.
972
+ - b313c58: Add library projection coherence governance so Warden reports generated library export collisions and stale projection targets before packages materialize.
973
+ - f245fa0: Add advisory trail-fork coaching so Warden can warn when a trail may be hiding
974
+ several capabilities behind one branching action or operation input.
975
+ - f1e6efa: Recognize module-local helper functions that receive the trail context when checking declared compose usage.
976
+ - caff950: `implementation-returns-result` now recognizes conditional returns whose branches are all recognized Result expressions — both `return cond ? Result.err(...) : Result.ok(...)` statements (including branches that are Result helpers or Result-bound variables) and concise ternary blaze bodies. Previously the idiomatic two-branch ternary was flagged as an error.
977
+ - 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.
978
+ - Updated dependencies [c36aca9]
979
+ - Updated dependencies [3befcf1]
980
+ - Updated dependencies [f1e6efa]
981
+ - Updated dependencies [a4f9cf6]
982
+ - Updated dependencies [9bcf34e]
983
+ - Updated dependencies [f7d97fc]
984
+ - Updated dependencies [59d10da]
985
+ - Updated dependencies [d9c6e50]
986
+ - @ontrails/core@1.0.0-beta.25
987
+ - @ontrails/topographer@1.0.0-beta.25
988
+ - @ontrails/cli@1.0.0-beta.25
989
+ - @ontrails/adapter-kit@1.0.0-beta.25
990
+ - @ontrails/permits@1.0.0-beta.25
991
+ - @ontrails/store@1.0.0-beta.25
992
+
993
+ ## 1.0.0-beta.24
994
+
995
+ ### Patch Changes
996
+
997
+ - @ontrails/adapter-kit@1.0.0-beta.24
998
+ - @ontrails/cli@1.0.0-beta.24
999
+ - @ontrails/core@1.0.0-beta.24
1000
+ - @ontrails/permits@1.0.0-beta.24
1001
+ - @ontrails/store@1.0.0-beta.24
1002
+ - @ontrails/topographer@1.0.0-beta.24
1003
+
1004
+ ## 1.0.0-beta.23
1005
+
1006
+ ### Patch Changes
1007
+
1008
+ - @ontrails/adapter-kit@1.0.0-beta.23
1009
+ - @ontrails/cli@1.0.0-beta.23
1010
+ - @ontrails/core@1.0.0-beta.23
1011
+ - @ontrails/permits@1.0.0-beta.23
1012
+ - @ontrails/store@1.0.0-beta.23
1013
+ - @ontrails/topographer@1.0.0-beta.23
1014
+
1015
+ ## 1.0.0-beta.22
1016
+
1017
+ ### Patch Changes
1018
+
1019
+ - @ontrails/adapter-kit@1.0.0-beta.22
1020
+ - @ontrails/cli@1.0.0-beta.22
1021
+ - @ontrails/core@1.0.0-beta.22
1022
+ - @ontrails/permits@1.0.0-beta.22
1023
+ - @ontrails/store@1.0.0-beta.22
1024
+ - @ontrails/topographer@1.0.0-beta.22
1025
+
1026
+ ## 1.0.0-beta.21
1027
+
1028
+ ### Minor Changes
1029
+
1030
+ - 5be032c: Add the repo-local `public-export-example-coverage` Warden rule (and its `publicExportExampleCoverageTrail` wrapper), graduating `scripts/check-public-api-examples.ts` into governed rule coverage. The rule anchors to this repository's five public surface package barrels via the rule module's own on-disk location, so it stays silent in consumer repositories.
1031
+
1032
+ ### Patch Changes
1033
+
1034
+ - Updated dependencies [99523f2]
1035
+ - Updated dependencies [3caa263]
1036
+ - @ontrails/core@1.0.0-beta.21
1037
+ - @ontrails/permits@1.0.0-beta.21
1038
+ - @ontrails/topographer@1.0.0-beta.21
1039
+ - @ontrails/adapter-kit@1.0.0-beta.21
1040
+ - @ontrails/cli@1.0.0-beta.21
1041
+ - @ontrails/store@1.0.0-beta.21
1042
+
1043
+ ## 1.0.0-beta.20
1044
+
1045
+ ### Minor Changes
1046
+
1047
+ - 8bc0708: Add surface facet coherence diagnostics for selector overlap, visibility widening acknowledgements, dynamic selectors, and description hygiene.
1048
+
1049
+ ### Patch Changes
1050
+
1051
+ - 851a2a3: Derive trail caller and blaze input types from the authored input schema while keeping one public input contract.
1052
+ - 6901776: Add a Warden rule and safe-fix metadata for rewriting retired cross vocabulary to compose vocabulary.
1053
+ - Updated dependencies [851a2a3]
1054
+ - Updated dependencies [eee1307]
1055
+ - Updated dependencies [b248d4a]
1056
+ - @ontrails/core@1.0.0-beta.20
1057
+ - @ontrails/store@1.0.0-beta.20
1058
+ - @ontrails/topographer@1.0.0-beta.20
1059
+ - @ontrails/adapter-kit@1.0.0-beta.20
1060
+ - @ontrails/cli@1.0.0-beta.20
1061
+ - @ontrails/permits@1.0.0-beta.20
1062
+
1063
+ ## 1.0.0-beta.19
1064
+
1065
+ ### Major Changes
1066
+
1067
+ - 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.
1068
+
1069
+ ### Minor Changes
1070
+
1071
+ - 120caf5: Promote topo artifact commands to `trails compile` and `trails validate`.
1072
+ - 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.
1073
+ - 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.
1074
+
1075
+ 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.
1076
+
1077
+ ### Patch Changes
1078
+
1079
+ - f8d80b9: Refresh current-facing compose vocabulary in package documentation after the composition cutover.
1080
+ - f0f7e2f: Avoid draft-marker false positives when a packed Warden install scans the Trails framework source tree from a different package location.
1081
+ - 64fb15a: Add Warden rules for trail version lifecycle guidance, version gaps, marker-safe schemas, pinned composes, examples, and pending force audit events.
1082
+ - 5d88104: Polish Trails blaze terminology across package docs and Warden guidance.
1083
+ - 48d5ff4: Attach term-rewrite fix metadata to the `no-legacy-layer-imports` rule, marking it review-required with no mechanical edits (the legacy layers were removed, not renamed) so `warden --fix` reports but never auto-applies the migration.
1084
+ - 216bf10: Fix a false `dead-internal-trail` warning by unioning file-local compose evidence with the project-context compose set, so same-file composition in scanned-but-unregistered packages is recognized.
1085
+ - 678cb1c: Expose the shared adapter readiness engine through Warden's opt-in
1086
+ `--adapter-check` diagnostics and the local `trails adapter check` authoring
1087
+ workflow.
1088
+ - 5874fd6: Preserve diagnostic fix metadata through Warden rule trail outputs.
1089
+ - 619cb15: Add a Warden rule (`no-destructured-compose`) that coaches trail blazes to call `ctx.compose(...)` directly instead of destructuring `compose` from the context.
1090
+
1091
+ Keep the generated `create` trail on the direct `ctx.compose(...)` shape so framework-authored trails follow the same composition guidance.
1092
+
1093
+ - 4642268: Make the standalone `warden --help` entry point print CLI help instead of running Warden with an unknown-option diagnostic.
1094
+ - 9bab0cf: Follow schema aliases when detecting hidden optional wrappers in version marker
1095
+ schemas.
1096
+ - 3ceeba8: Expand marker-schema-unsupported diagnostics to catch Zod schema constructs that
1097
+ runtime marker derivation rejects.
1098
+ - beafd03: Add a warning for blazes that re-wrap an existing Result error with Result.err(result.error) instead of returning the original Result.
1099
+ - 7b173e0: Warn when a `resource('id', { ... })` definition declares neither a `mock` factory nor an explicit `unmockable` reason, so `testAll(app)` can provision it without production configuration (common pitfall #10).
1100
+ - 6e50e7b: Recognize Result-returning helper provenance when helpers use an imported Result type alias.
1101
+ - 48edf8d: Expose shared Warden source scan-target predicates so downstream consumers can
1102
+ preserve the CLI runner's test and declaration-file filtering before invoking
1103
+ Warden-owned rules directly.
1104
+ - 12ffa3b: Align Warden signal-rule trail examples so producer trails call `ctx.fire()` for their declared signals.
1105
+ - 2f262f7: Improve Warden diagnostics so names-only findings teach the canonical fix instead of only naming the violation.
1106
+ - 58b01f2: Warn when topo export modules open Trails surfaces at module top level.
1107
+ - Updated dependencies [bb81ffe]
1108
+ - Updated dependencies [e41c382]
1109
+ - Updated dependencies [a2f1825]
1110
+ - Updated dependencies [a2f1825]
1111
+ - Updated dependencies [1eb5bdc]
1112
+ - Updated dependencies [f8d80b9]
1113
+ - Updated dependencies [846a597]
1114
+ - Updated dependencies [223aaad]
1115
+ - Updated dependencies [3125f4d]
1116
+ - Updated dependencies [2494dc6]
1117
+ - Updated dependencies [4bc8a99]
1118
+ - Updated dependencies [120caf5]
1119
+ - Updated dependencies [2d53717]
1120
+ - Updated dependencies [16cb740]
1121
+ - Updated dependencies [8894ecb]
1122
+ - Updated dependencies [fdf7ec9]
1123
+ - Updated dependencies [92e709b]
1124
+ - Updated dependencies [d76be13]
1125
+ - Updated dependencies [84f56a5]
1126
+ - Updated dependencies [653d1fc]
1127
+ - Updated dependencies [431b04c]
1128
+ - Updated dependencies [2e76288]
1129
+ - Updated dependencies [5d88104]
1130
+ - Updated dependencies [f04a9ef]
1131
+ - Updated dependencies [fc00aeb]
1132
+ - Updated dependencies [ab1c77c]
1133
+ - Updated dependencies [4f43874]
1134
+ - Updated dependencies [678cb1c]
1135
+ - @ontrails/adapter-kit@1.0.0-beta.19
1136
+ - @ontrails/core@1.0.0-beta.19
1137
+ - @ontrails/cli@1.0.0-beta.19
1138
+ - @ontrails/store@1.0.0-beta.19
1139
+ - @ontrails/topographer@1.0.0-beta.19
1140
+ - @ontrails/permits@1.0.0-beta.19
1141
+
1142
+ ## 1.0.0-beta.18
1143
+
1144
+ ### Patch Changes
1145
+
1146
+ - @ontrails/cli@1.0.0-beta.18
1147
+ - @ontrails/core@1.0.0-beta.18
1148
+ - @ontrails/permits@1.0.0-beta.18
1149
+ - @ontrails/store@1.0.0-beta.18
1150
+ - @ontrails/topographer@1.0.0-beta.18
1151
+
1152
+ ## 1.0.0-beta.17
1153
+
1154
+ ### Patch Changes
1155
+
1156
+ - Updated dependencies [3dc8254]
1157
+ - Updated dependencies [61497c5]
1158
+ - @ontrails/core@1.0.0-beta.17
1159
+ - @ontrails/cli@1.0.0-beta.17
1160
+ - @ontrails/permits@1.0.0-beta.17
1161
+ - @ontrails/store@1.0.0-beta.17
1162
+ - @ontrails/topographer@1.0.0-beta.17
1163
+
1164
+ ## 1.0.0-beta.16
1165
+
1166
+ ### Minor Changes
1167
+
1168
+ - e991a5b: Add generic enum value aliases for CLI flags and migrate Warden command aliases onto the shared alias model.
1169
+ - 2e05e27: Add `--dev-permit` for local-development synthetic full-access. New `devPermitPreset()` exposes a boolean flag; when set, the CLI synthesizes a `BasePermit` (`id: 'dev-permit'`, scopes enumerated from every declared scope across the topo) and overlays it on `ctx.permit`. Mutually exclusive with `--permit` and `--token` — any combination fails with `ValidationError` listing the conflicting flags. New Warden rule `no-dev-permit-in-source` flags any committed source file containing `--dev-permit` as an error, with a tight allow-list (`packages/cli/src/flags.ts`, `packages/cli/src/build.ts`, the rule itself). The Warden runner still scans test TypeScript files for this literal while keeping unrelated source rules filtered out of tests. Apps that import `authResource`/`authLayer` are unaffected.
1170
+ - ad553a6: Add one warden rule coaching against the removed legacy layer API. `no-legacy-layer-imports` (error) flags any source-string reference to `authLayer`, `autoIterateLayer`, or `dateShortcutsLayer` and points the developer at the migration paths (CLI surface derivation for pagination/date-shortcuts; intrinsic permit enforcement for auth). Allow-list covers the migration notes in `packages/cli/src/{pagination,date-shortcuts}.ts` and the rule's own files. The rule is classified `lifecycle: temporary` with a `retireWhen` string tying it to the legacy layer migration window. Trail count bumps 45 → 46.
1171
+ - 802fdfc: Rename Warden guide manifest rule grouping from `category` to `concern` so the
1172
+ public JSON contract matches the source metadata field.
1173
+ - 22c6c06: Accept ADR-0041 Unified Observability and ship the first activation and
1174
+ observability primitives it depends on: activation trace records, topo-level
1175
+ observe configuration, webhook activation materialization, signal/webhook
1176
+ warden coaching, the `@ontrails/observe` package, sink composition, and
1177
+ zero-dependency observe sinks.
1178
+ - 767eb41: Ship the default `warden` bin from `@ontrails/warden` and migrate the old private `apps/ci` runner into the package-local CLI surface.
1179
+
1180
+ The new bin supports `--ci`, `--pre-push`, `--depth`, `--fail-on`, `--strict`, `--format`, `--lock`, `--drafts`, `--apps`, and the Sprint 1 standalone aliases. CI output now uses the package Warden formatters directly, so GitHub annotations and JSON payloads follow the `@ontrails/warden` report shape instead of the retired `apps/ci` wrapper shape.
1181
+
1182
+ - 82019a7: Export `wardenConfigSchema` for composing Warden options into `trails.config.ts`.
1183
+ - f6fdc62: Add structured Warden remediation guidance to rule metadata, diagnostics, report output, and the `trails warden` result schema.
1184
+ - a10ffa4: Add a Warden guide manifest projection and expose it through `trails warden guide` in markdown, agent-json, and manifest formats.
1185
+ - 7085f01: Add a Warden topo-aware rule that requires public MCP/HTTP surface-eligible trails to declare output schemas.
1186
+ - 8ddf5ff: Extend `runWarden` into the shared Warden orchestration entrypoint with effective config resolution, depth/fail thresholds, rule facets, and multi-topo report metadata.
1187
+
1188
+ Adapt the built-in `trails warden` wrapper to consume the readonly Warden report diagnostics contract without weakening its output schema.
1189
+
1190
+ - f5b6112: Add an advisory Warden rule that prefers static resource helpers over dynamic context resource lookups when the resource definition is already in scope.
1191
+
1192
+ ### Patch Changes
1193
+
1194
+ - c3fc5c3: Move previously root-exported helper contracts out of `src/internal/*` to stable core module homes, document their public boundary, and guard the public barrel against future internal re-exports.
1195
+ - e898cc4: Add repo-level Knip dead-code detection and remove stale internal exports and unused package dependencies surfaced by the new check.
1196
+ - 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.
1197
+ - 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.
1198
+ - de30d6c: Introduce `topo.compile` as the canonical trail for writing `.trails` lockfile
1199
+ and surface artifacts, remove the `survey --generate` mode, and update drift
1200
+ guidance to point at the compile command.
1201
+ - 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.
1202
+
1203
+ Breaking pre-1.0 beta change. Update consumer imports:
1204
+
1205
+ ```diff
1206
+ - import { topoStore, createTopoStore, createMockTopoStore, createTopoSnapshot, listTopoSnapshots, pinTopoSnapshot, unpinTopoSnapshot, createStoredTopoSnapshot, getStoredTopoExport, countTopoSnapshots, countPinnedSnapshots, countPrunableSnapshots, pruneUnpinnedSnapshots } from '@ontrails/core';
1207
+ + import { topoStore, createTopoStore, createMockTopoStore, createTopoSnapshot, listTopoSnapshots, pinTopoSnapshot, unpinTopoSnapshot } from '@ontrails/topographer';
1208
+ + import { createStoredTopoSnapshot, getStoredTopoExport, countTopoSnapshots, countPinnedSnapshots, countPrunableSnapshots, pruneUnpinnedSnapshots } from '@ontrails/topographer/backend-support';
1209
+ ```
1210
+
1211
+ 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`.
1212
+
1213
+ 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.
1214
+
1215
+ - 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.
1216
+ - 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`.
1217
+
1218
+ 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.
1219
+
1220
+ - fb10112: Polish Warden guidance projection by preserving labels in plain-text doc links
1221
+ and reusing the shared diagnostic schema from the Trails CLI wrapper.
1222
+ - bfabe09: Suppress static resource accessor warnings when a string lookup resolves to a
1223
+ resource variable name shadowed inside `blaze`.
1224
+ - 7a1d4a9: Rename the public resolved graph API from `SurfaceMap` to `TopoGraph`, including
1225
+ the derive, hash, diff, and current graph artifact I/O helpers.
1226
+ - 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.
1227
+ - 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`.
1228
+ - 2cc05da: Harden Warden drift checks for lock v3 manifests. Malformed legacy lock files and manifests without the `topo.lock` artifact now report blocked drift with a regenerate instruction instead of throwing or silently passing.
1229
+ - df9a7d0: Add project-aware public export-map governance for @ontrails workspace docs,
1230
+ imports, root barrels, and bin-only package surfaces.
1231
+ - 30a2c7e: Add the resolver-backed `resolved-import-boundary` Warden rule for cross-package import boundary enforcement.
1232
+ - 81bffec: Add Warden import-resolution substrate backed by `oxc-resolver`.
1233
+ - d675a53: Omit `topoNames` from Warden reports when no topo targets were governed, matching the optional report contract.
1234
+ - Updated dependencies [73622ae]
1235
+ - Updated dependencies [e991a5b]
1236
+ - Updated dependencies [25f3c5c]
1237
+ - Updated dependencies [6300f70]
1238
+ - Updated dependencies [d172013]
1239
+ - Updated dependencies [c3fc5c3]
1240
+ - Updated dependencies [20d7a5c]
1241
+ - Updated dependencies [be5fb46]
1242
+ - Updated dependencies [199304e]
1243
+ - Updated dependencies [e898cc4]
1244
+ - Updated dependencies [2bf239e]
1245
+ - Updated dependencies [200bece]
1246
+ - Updated dependencies [e4beec9]
1247
+ - Updated dependencies [3395234]
1248
+ - Updated dependencies [bcdc484]
1249
+ - Updated dependencies [6300f70]
1250
+ - Updated dependencies [3f678d4]
1251
+ - Updated dependencies [ed171d5]
1252
+ - Updated dependencies [49c2e7d]
1253
+ - Updated dependencies [de30d6c]
1254
+ - Updated dependencies [331e3a9]
1255
+ - Updated dependencies [c40865a]
1256
+ - Updated dependencies [4399fdb]
1257
+ - Updated dependencies [4b8d13b]
1258
+ - Updated dependencies [4b8d13b]
1259
+ - Updated dependencies [4b8d13b]
1260
+ - Updated dependencies [fbd42fc]
1261
+ - Updated dependencies [63d1aef]
1262
+ - Updated dependencies [6be2e95]
1263
+ - Updated dependencies [819de09]
1264
+ - Updated dependencies [be08686]
1265
+ - Updated dependencies [112b9f2]
1266
+ - Updated dependencies [893025e]
1267
+ - Updated dependencies [ed888e2]
1268
+ - Updated dependencies [2e05e27]
1269
+ - Updated dependencies [c8caa5e]
1270
+ - Updated dependencies [f4b90c9]
1271
+ - Updated dependencies [eec5e9d]
1272
+ - Updated dependencies [4e75129]
1273
+ - Updated dependencies [47505fe]
1274
+ - Updated dependencies [ebd4434]
1275
+ - Updated dependencies [863d473]
1276
+ - Updated dependencies [344f2f7]
1277
+ - Updated dependencies [26f9ffd]
1278
+ - Updated dependencies [66056ac]
1279
+ - Updated dependencies [b12e19b]
1280
+ - Updated dependencies [ed7f6f6]
1281
+ - Updated dependencies [0bad534]
1282
+ - Updated dependencies [7a1d4a9]
1283
+ - Updated dependencies [84f595a]
1284
+ - Updated dependencies [d2cb9ba]
1285
+ - Updated dependencies [10eae9a]
1286
+ - Updated dependencies [bbb1ea4]
1287
+ - Updated dependencies [22c6c06]
1288
+ - Updated dependencies [df9a7d0]
1289
+ - @ontrails/core@1.0.0-beta.16
1290
+ - @ontrails/cli@1.0.0-beta.16
1291
+ - @ontrails/permits@1.0.0-beta.16
1292
+ - @ontrails/store@1.0.0-beta.16
1293
+ - @ontrails/topographer@1.0.0-beta.16
1294
+
1295
+ ## 1.0.0-beta.15
1296
+
1297
+ ### Minor Changes
1298
+
1299
+ - 4ad6b25: Lexicon rename cleanup (ADR-0023). Breaking for `@ontrails/core`, `@ontrails/cli`, and `@ontrails/tracing` at the boundary; internal-only churn for `@ontrails/warden`.
1300
+
1301
+ - **core**: the topo store schema renames `topo_provisions` / `topo_trail_provisions` → `topo_resources` / `topo_trail_resources` and `provision_count` → `resource_count`. Schema version bumped v4→v5. Stores still carrying the legacy schema are detected on open, dropped, and recreated from the new DDL — previous topo saves are cleared. Stored-data helpers `listTopoStoreProvisions` / `getTopoStoreProvision` / `readProvisionUsage` / `mapProvisionRow` renamed to their `resource` counterparts. TS row types `TopoTrailProvisionRow` / `TopoProvisionRow` renamed to `TopoTrailResourceRow` / `TopoResourceRow`.
1302
+ - **cli**: CLI output mode env vars are now derived from the topo name per ADR-0023. Legacy globals `TRAILS_JSON` / `TRAILS_JSONL` are no longer honored — a topo named `stash` reads `STASH_JSON` / `STASH_JSONL`. `ActionResultContext` gains a `topoName: string` field; `resolveOutputMode(flags, topoName)` takes a topo name argument.
1303
+ - **tracing**: legacy `.trails/dev/tracker.db` migration path removed. Any user still running a pre-rename beta build with a `tracker.db` should delete it or migrate before upgrading.
1304
+ - **warden**: internal-only rename of `provisionDeclarations` / `provisionExists` rules and their trails to `resourceDeclarations` / `resourceExists`. No behavior change.
1305
+
1306
+ ### Patch Changes
1307
+
1308
+ - Updated dependencies [4ad6b25]
1309
+ - @ontrails/core@1.0.0-beta.15
1310
+ - @ontrails/permits@1.0.0-beta.15
1311
+ - @ontrails/topographer@1.0.0-beta.15
1312
+
1313
+ ## 1.0.0-beta.14
1314
+
1315
+ ### Minor Changes
1316
+
1317
+ - 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.
1318
+
1319
+ ### Patch Changes
1320
+
1321
+ - Updated dependencies [69057e9]
1322
+ - @ontrails/core@1.0.0-beta.14
1323
+ - @ontrails/schema@1.0.0-beta.14
1324
+
1325
+ ## 1.0.0-beta.13
1326
+
1327
+ ### Minor Changes
1328
+
1329
+ - Trail-native vocabulary cutover. Breaking API field renames across all packages:
1330
+
1331
+ - Trail spec: `run:` → `blaze:`, `follow:` → `crosses:`, `services:` → `provisions:`, `metadata:` → `meta:`, `emits:` → `signals:`
1332
+ - Runtime: `ctx.follow()` → `ctx.cross()`, `ctx.emit()` → `ctx.signal()`, `ctx.signal` (abort) → `ctx.abortSignal`
1333
+ - Entry points: `blaze(app)` → `trailhead(app)`
1334
+ - Package rename: `@ontrails/crumbs` → `@ontrails/tracker`
1335
+ - Wrapper types: `Layer` → `Gate`, `layers`/`middleware` → `gates`
1336
+ - Transport: `surface` → `trailhead`, `adapter` → `connector`
1337
+
1338
+ ### Patch Changes
1339
+
1340
+ - Updated dependencies [6944147]
1341
+ - Updated dependencies
1342
+ - @ontrails/core@1.0.0-beta.13
1343
+ - @ontrails/schema@1.0.0-beta.13
1344
+
1345
+ ## 1.0.0-beta.12
1346
+
1347
+ ### Patch Changes
1348
+
1349
+ - Updated dependencies
1350
+ - @ontrails/core@1.0.0-beta.12
1351
+ - @ontrails/schema@1.0.0-beta.12
1352
+
1353
+ ## 1.0.0-beta.11
1354
+
1355
+ ### Minor Changes
1356
+
1357
+ - Add provisions as a first-class primitive.
1358
+
1359
+ Provisions make infrastructure dependencies declarative, injectable, and governable. Define a provision with `provision()`, declare it on a trail with `provisions: [db]`, and access it with `db.from(ctx)` or `ctx.provision()`.
1360
+
1361
+ **Core:** `provision()` factory, `ProvisionSpec<T>`, `ProvisionContext`, singleton resolution in `executeTrail`, in-flight creation dedup, `isProvision` guard, `findDuplicateProvisionId`, topo provision discovery and validation, `provisions` field on trail specs.
1362
+
1363
+ **Testing:** Auto-resolution of `mock` factories in `testAll`, `testExamples`, `testContracts`, and `testCrosses`. Explicit `provisions` overrides with correct precedence (`explicit > ctx.extensions > auto-mock`). Provision mock propagation through crossing graphs.
1364
+
1365
+ **Warden:** `provision-declarations` rule validates `db.from(ctx)` and `ctx.provision()` usage matches declared `provisions: [...]`. `provision-exists` rule validates declared provision IDs resolve in project context. Scope-aware AST walking skips nested function boundaries.
1366
+
1367
+ **Trailheads:** Provision overrides thread through `run` and `trailhead` on CLI, MCP, and HTTP.
1368
+
1369
+ **Introspection:** Survey and trailhead map outputs include provision graph. Topo exposes `.provisions`, `.getProvision()`, `.hasProvision()`, `.listProvisions()`, `.provisionIds()`, `.provisionCount`.
1370
+
1371
+ **Docs:** ADR-009 accepted. Unified services guide, updated vocabulary, getting-started, architecture, and package READMEs.
1372
+
1373
+ ### Patch Changes
1374
+
1375
+ - Updated dependencies
1376
+ - @ontrails/core@1.0.0-beta.11
1377
+ - @ontrails/schema@1.0.0-beta.11
1378
+
1379
+ ## 1.0.0-beta.10
1380
+
1381
+ ### Patch Changes
1382
+
1383
+ - Cleanup and hardening pass across all packages.
1384
+
1385
+ **core**: Deduplicate `RunOptions` as type alias of `ExecuteTrailOptions`. Replace `TrailContext` index signature with typed `extensions` field for type safety. Deep-merge `extensions` in `executeTrail` context resolution. Remove unused `Trailhead` type and proof-of-concept files from published package.
1386
+
1387
+ **cli**: Remove vestigial `kind` checks from build. Run `validateTopo()` automatically in `trailhead()` with opt-out via `validate: false`.
1388
+
1389
+ **http**: Remove vestigial `kind` checks from build. Run `validateTopo()` automatically in `trailhead()` with opt-out.
1390
+
1391
+ **mcp**: Remove vestigial `kind` checks from build. Run `validateTopo()` automatically in `trailhead()` with opt-out.
1392
+
1393
+ **warden**: Project-aware rule context preserved in trail wrappers.
1394
+
1395
+ - Updated dependencies
1396
+ - @ontrails/core@1.0.0-beta.10
1397
+ - @ontrails/schema@1.0.0-beta.10
1398
+
1399
+ ## 1.0.0-beta.9
1400
+
1401
+ ### Minor Changes
1402
+
1403
+ - Consolidated improvements across all trailhead packages.
1404
+
1405
+ **core**: Add `TrailResult<T>` utility type, `topo.ids()` and `topo.count` accessors, `run()` for headless trail execution, and extract shared `executeTrail` pipeline used by CLI/MCP/HTTP.
1406
+
1407
+ **http**: Detect route path collisions and return `Result` from `buildHttpRoutes()`, wire request `AbortSignal` through to trail context, and make write → POST mapping explicit in intent-to-method lookup.
1408
+
1409
+ **mcp**: Return `Result` from `buildMcpTools()` on collision instead of throwing.
1410
+
1411
+ **cli**: Verify exception catching via centralized `executeTrail`.
1412
+
1413
+ **testing**: Cross-context awareness improvements.
1414
+
1415
+ **warden**: Refactor rules as composable trails with examples.
1416
+
1417
+ **schema**: Error code and empty body fixes.
1418
+
1419
+ ### Patch Changes
1420
+
1421
+ - Updated dependencies
1422
+ - @ontrails/core@1.0.0-beta.9
1423
+ - @ontrails/schema@1.0.0-beta.9
1424
+
1425
+ ## 1.0.0-beta.8
1426
+
1427
+ ### Patch Changes
1428
+
1429
+ - Updated dependencies
1430
+ - @ontrails/schema@1.0.0-beta.8
1431
+ - @ontrails/core@1.0.0-beta.8
1432
+
1433
+ ## 1.0.0-beta.7
1434
+
1435
+ ### Patch Changes
1436
+
1437
+ - Updated dependencies
1438
+ - @ontrails/schema@1.0.0-beta.7
1439
+ - @ontrails/core@1.0.0-beta.7
1440
+
1441
+ ## 1.0.0-beta.6
1442
+
1443
+ ### Patch Changes
1444
+
1445
+ - Fix Codex review findings on type-utils and cross-declarations.
1446
+
1447
+ **core**: `inputOf()`/`outputOf()` now preserve the exact Zod schema subtype instead of widening to `z.ZodType`.
1448
+
1449
+ **warden**: `cross-declarations` rule now recognizes single-object trail overload, detects any context parameter name (not just `ctx`), matches destructured `cross()` calls, resolves const identifiers in `crosses` arrays, and restricts blaze body extraction to top-level config properties.
1450
+
1451
+ - Updated dependencies
1452
+ - @ontrails/core@1.0.0-beta.6
1453
+ - @ontrails/schema@1.0.0-beta.6
1454
+
1455
+ ## 1.0.0-beta.5
1456
+
1457
+ ### Minor Changes
1458
+
1459
+ - Type utilities and cross-declarations warden rule.
1460
+
1461
+ **core**: Add `TrailInput<T>`, `TrailOutput<T>` utility types and `inputOf()`, `outputOf()` runtime schema accessors.
1462
+
1463
+ **warden**: Add `cross-declarations` rule — statically analyzes `ctx.cross()` calls against declared `crosses: [...]` arrays. Errors on undeclared calls, warns on unused declarations.
1464
+
1465
+ ### Patch Changes
1466
+
1467
+ - Updated dependencies
1468
+ - @ontrails/core@1.0.0-beta.5
1469
+ - @ontrails/schema@1.0.0-beta.5
1470
+
1471
+ ## 1.0.0-beta.4
1472
+
1473
+ ### Major Changes
1474
+
1475
+ - API simplification: unified trail model, intent enum, run, metadata.
1476
+
1477
+ **BREAKING CHANGES:**
1478
+
1479
+ - `hike()` removed — use `trail()` with optional `crosses: [...]` field
1480
+ - `follows` renamed to `crosses` (matching `ctx.cross()`)
1481
+ - `topo.hikes` removed — single `topo.trails` map
1482
+ - `kind: 'hike'` removed — everything is `kind: 'trail'`
1483
+ - `readOnly`/`destructive` booleans replaced by `intent: 'read' | 'write' | 'destroy'`
1484
+ - `implementation` field renamed to `run`
1485
+ - `markers` field renamed to `metadata`
1486
+ - `testHike` renamed to `testCrosses`, `HikeScenario` to `CrossScenario`
1487
+ - `trailhead()` now returns the trailhead handle (`Command` for CLI, `Server` for MCP)
1488
+
1489
+ ### Patch Changes
1490
+
1491
+ - Updated dependencies
1492
+ - @ontrails/core@1.0.0-beta.4
1493
+ - @ontrails/schema@1.0.0-beta.4
1494
+
1495
+ ## 1.0.0-beta.3
1496
+
1497
+ ### Minor Changes
1498
+
1499
+ - Bug fixes across all trailhead packages found via parallel Codex review.
1500
+
1501
+ **core**: Fix Result.toJson false circular detection on DAGs, deserializeError subclass round-trip, topo cross-kind ID collisions, validateTopo multi-node cycle detection, error example input validation bypass, and deriveFields array type collapse.
1502
+
1503
+ **cli**: Switch trailhead to parseAsync for proper async error handling, add boolean flag negation (--no-flag), and strict number parsing that rejects partial input.
1504
+
1505
+ **mcp**: Align BlobRef with core (including ReadableStream support) and detect tool-name collisions after normalization.
1506
+
1507
+ **testing**: Include hikes in testContracts validation, with cross-context awareness.
1508
+
1509
+ **warden**: Collect hike detour targets, validate detour refs in hike specs, and stop implementation-returns-result from walking into nested function bodies.
1510
+
1511
+ ### Patch Changes
1512
+
1513
+ - Updated dependencies
1514
+ - @ontrails/core@1.0.0-beta.3
1515
+ - @ontrails/schema@1.0.0-beta.3
1516
+
1517
+ ## 1.0.0-beta.2
1518
+
1519
+ ### Patch Changes
1520
+
1521
+ - Fix workspace dependency resolution in published packages. Now using bun publish
1522
+ which correctly replaces workspace:^ with actual version numbers.
1523
+ - Updated dependencies
1524
+ - @ontrails/core@1.0.0-beta.2
1525
+ - @ontrails/schema@1.0.0-beta.2
1526
+
1527
+ ## 1.0.0-beta.1
1528
+
1529
+ ### Patch Changes
1530
+
1531
+ - Fix two blocking bugs from real-world migration:
1532
+ - Published packages now resolve correctly (workspace:^ instead of workspace:\*)
1533
+ - Error forwarding works across different success types (Err no longer carries phantom T)
1534
+ - Updated dependencies
1535
+ - @ontrails/core@1.0.0-beta.1
1536
+ - @ontrails/schema@1.0.0-beta.1
1537
+
1538
+ ## 1.0.0-beta.0
1539
+
1540
+ ### Minor Changes
1541
+
1542
+ - Initial v1 beta release of the Trails framework.
1543
+
1544
+ - **@ontrails/core** — Result type, error taxonomy, trail/hike/signal/topo, validateTopo, validateInput/Output, deriveFields, patterns, redaction, branded types, resilience
1545
+ - **@ontrails/cli** — CLI trailhead connector, Commander integration, flag derivation
1546
+ - **@ontrails/mcp** — MCP trailhead connector, tool generation, annotations, progress bridge
1547
+ - **@ontrails/logging** — Structured logging, sinks, formatters, LogTape connector
1548
+ - **@ontrails/testing** — testAll, testExamples, testTrail, testHike, testContracts, testDetours, trailhead harnesses
1549
+ - **@ontrails/warden** — AST-based code convention rules via oxc-parser, drift detection, CI formatters
1550
+ - **@ontrails/schema** — Trailhead map generation, hashing, semantic diffing
1551
+
1552
+ ### Patch Changes
1553
+
1554
+ - Updated dependencies
1555
+ - @ontrails/core@1.0.0-beta.0
1556
+ - @ontrails/schema@1.0.0-beta.0