@ontrails/topography 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.
- package/CHANGELOG.md +866 -0
- package/README.md +228 -0
- package/package.json +40 -0
- package/src/activation-report.ts +385 -0
- package/src/backend-support.ts +11 -0
- package/src/derive.ts +690 -0
- package/src/diff.ts +1088 -0
- package/src/forces.ts +125 -0
- package/src/hash.ts +55 -0
- package/src/index.ts +273 -0
- package/src/internal/topo-snapshots.ts +682 -0
- package/src/internal/topo-store-read.ts +1102 -0
- package/src/internal/topo-store.ts +1651 -0
- package/src/io.ts +280 -0
- package/src/library-derivation.ts +131 -0
- package/src/overlays.ts +155 -0
- package/src/permit.ts +19 -0
- package/src/source-fingerprint.ts +103 -0
- package/src/surface-bindings.ts +101 -0
- package/src/topo-store.ts +716 -0
- package/src/types.ts +749 -0
- package/src/versioning.ts +277 -0
- package/src/wayfind/error-facts.ts +363 -0
- package/src/wayfind/filters.ts +430 -0
- package/src/wayfind/loader.ts +443 -0
- package/src/wayfind/navigation.ts +265 -0
- package/src/wayfind/provenance.ts +152 -0
- package/src/wayfind/queries.ts +1656 -0
- package/src/wayfind/relations.ts +344 -0
- package/src/workspace-configured-aliases.ts +221 -0
- package/src/workspace-lock-census.ts +306 -0
- package/src/workspace-view-types.ts +104 -0
- package/src/workspace-view.ts +486 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,866 @@
|
|
|
1
|
+
# @ontrails/topography
|
|
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
|
+
- [`2bf239e`](https://github.com/outfitter-dev/trails/commit/2bf239e0ed42f82c3b3789b89db98fb6fe0c017a): Move OpenAPI generation ownership to the HTTP surface.
|
|
32
|
+
|
|
33
|
+
**http**: Export `deriveOpenApiSpec()` and its OpenAPI types from `@ontrails/http`.
|
|
34
|
+
|
|
35
|
+
**schema**: Remove the OpenAPI helper export so schema stays focused on surface maps, locks, and semantic diffing.
|
|
36
|
+
|
|
37
|
+
- [`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.
|
|
38
|
+
- [`7a1d4a9`](https://github.com/outfitter-dev/trails/commit/7a1d4a904d05b1ccd46af01fdab389cb2ab10a3d): Rename the public resolved graph API from `SurfaceMap` to `TopoGraph`, including
|
|
39
|
+
the derive, hash, diff, and current graph artifact I/O helpers.
|
|
40
|
+
- [`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.
|
|
41
|
+
- [`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`.
|
|
42
|
+
- [`bbb1ea4`](https://github.com/outfitter-dev/trails/commit/bbb1ea4ff47a050094e1100e510e6e6196a21c57): Move the workspace trail index out of the lock manifest and into the serialized TopoGraph artifact. Workspace index reads now consult `topo.lock` workspace metadata, and `buildWorkspaceTrailIndex()` exposes `topo-lock` cache hits through the artifact-family path.
|
|
43
|
+
|
|
44
|
+
### Minor Changes
|
|
45
|
+
|
|
46
|
+
- [`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.
|
|
47
|
+
- [`ebbf0c5`](https://github.com/outfitter-dev/trails/commit/ebbf0c538550429f92944ac2d196b6bc9ca00c4b): Consolidated improvements across all surface packages.
|
|
48
|
+
|
|
49
|
+
**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.
|
|
50
|
+
|
|
51
|
+
**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.
|
|
52
|
+
|
|
53
|
+
**mcp**: Return `Result` from `buildMcpTools()` on collision instead of throwing.
|
|
54
|
+
|
|
55
|
+
**cli**: Verify exception catching via centralized `executeTrail`.
|
|
56
|
+
|
|
57
|
+
**testing**: Follow context awareness improvements.
|
|
58
|
+
|
|
59
|
+
**warden**: Refactor rules as composable trails with examples.
|
|
60
|
+
|
|
61
|
+
**schema**: Error code and empty body fixes.
|
|
62
|
+
|
|
63
|
+
- [`f2a7857`](https://github.com/outfitter-dev/trails/commit/f2a785777ba9cb2d540c0fd79c80b43d4cb934d3): Initial v1 beta release of the Trails framework.
|
|
64
|
+
|
|
65
|
+
- **@ontrails/core** — Result type, error taxonomy, trail/signal/topo, validateTopo, validateInput/Output, deriveFields, patterns, redaction, branded types, resilience
|
|
66
|
+
- **@ontrails/cli** — CLI command model, flag derivation, output formatting
|
|
67
|
+
- **@ontrails/mcp** — MCP surface, tool generation, annotations, progress bridge
|
|
68
|
+
- **@ontrails/testing** — testAll, testExamples, testTrail, testCrosses, testContracts, testDetours, surface harnesses
|
|
69
|
+
- **@ontrails/warden** — AST-based code convention rules via oxc-parser, drift detection, CI formatters
|
|
70
|
+
- **@ontrails/topographer** — Surface map generation, hashing, semantic diffing, lock helpers
|
|
71
|
+
|
|
72
|
+
- [`3f678d4`](https://github.com/outfitter-dev/trails/commit/3f678d47b7c6258b561c635b4d93ef75b5b65c2e): Record topo and trail layer attachments in trail surface-map entries, including layer input schemas, so resolved-contract hashing and diffing can detect layer contract changes.
|
|
73
|
+
- [`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.
|
|
74
|
+
|
|
75
|
+
Breaking pre-1.0 beta change. Update consumer imports:
|
|
76
|
+
|
|
77
|
+
```diff
|
|
78
|
+
- import { topoStore, createTopoStore, createMockTopoStore, createTopoSnapshot, listTopoSnapshots, pinTopoSnapshot, unpinTopoSnapshot, createStoredTopoSnapshot, getStoredTopoExport, countTopoSnapshots, countPinnedSnapshots, countPrunableSnapshots, pruneUnpinnedSnapshots } from '@ontrails/core';
|
|
79
|
+
+ import { topoStore, createTopoStore, createMockTopoStore, createTopoSnapshot, listTopoSnapshots, pinTopoSnapshot, unpinTopoSnapshot } from '@ontrails/topographer';
|
|
80
|
+
+ import { createStoredTopoSnapshot, getStoredTopoExport, countTopoSnapshots, countPinnedSnapshots, countPrunableSnapshots, pruneUnpinnedSnapshots } from '@ontrails/topographer/backend-support';
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
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`.
|
|
84
|
+
|
|
85
|
+
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.
|
|
86
|
+
|
|
87
|
+
- [`be3db8a`](https://github.com/outfitter-dev/trails/commit/be3db8a23a64e73ac00fc759520acd9ccc2711c9): Add a Config-fed app-partitioned workspace view over app-local locks, with deterministic collision and hash facts plus separate completeness, binding, freshness, collection-boundary, and unowned-lock evidence. The lock census honors configured app roots that sit at or below default-ignored directories, while ignored directories inside an app root stay pruned so dependency locks are never reported as unowned.
|
|
88
|
+
- [`120caf5`](https://github.com/outfitter-dev/trails/commit/120caf57e6b6da4e01e53a1bff3a629cadf48d6e): Promote topo artifact commands to `trails compile` and `trails validate`.
|
|
89
|
+
- [`4b8d13b`](https://github.com/outfitter-dev/trails/commit/4b8d13b6bbac0de4e78bcb0ea0aae6cf06638f1e): **BREAKING:** Rename surface-map exposure fields from `trailheads` to `surfaces`.
|
|
90
|
+
|
|
91
|
+
`SurfaceMapEntry.trailheads` is now `SurfaceMapEntry.surfaces`, persisted surface-map JSON now writes `surfaces`, and diff details now report `Surface "<name>" added/removed`.
|
|
92
|
+
|
|
93
|
+
See `docs/migration/trailhead-to-surface.md` for the full migration map.
|
|
94
|
+
|
|
95
|
+
- [`8424b67`](https://github.com/outfitter-dev/trails/commit/8424b67d929b8e48d5e27dbf5b0d2347fde8e481): Make `run`, Wayfinder navigation and semantic diff, Warden, and shell
|
|
96
|
+
completions use Config-owned project identity. Add stable `--app <id>`
|
|
97
|
+
selection and structured project provenance, preserve partial saved workspace
|
|
98
|
+
navigation, and require complete app-partitioned views for workspace diff.
|
|
99
|
+
Preserve canonical sole-app discovery for standalone run and live Wayfinder
|
|
100
|
+
consumers, and keep healthy shell completions available when configured sibling
|
|
101
|
+
apps cannot load. Keep nested app completion suggestions inside the selected
|
|
102
|
+
app, and retain selected project provenance plus authored inputs when running or
|
|
103
|
+
listing trail examples. Preserve completed `--app` selection and typed
|
|
104
|
+
`--root-dir` boundaries throughout dynamic completion, encode shell tokens
|
|
105
|
+
through the internal variadic input without losing flags, spaces, or empty
|
|
106
|
+
values. While an app value is still being completed, preserve its typed root
|
|
107
|
+
but defer app-local module selection until the app is complete. Validate
|
|
108
|
+
Config-owned identity on the same fresh Survey lease that derives live
|
|
109
|
+
Wayfinder responses. Record the executed app identity as `executedAppId` on
|
|
110
|
+
`run.examples` and `run.example` results so every listing and comparison names
|
|
111
|
+
the app that produced it, including standalone single-app runs.
|
|
112
|
+
|
|
113
|
+
Remove the superseded `buildWorkspaceTrailIndex()` package-workspace discovery
|
|
114
|
+
API now that no operator consumer uses it as identity.
|
|
115
|
+
|
|
116
|
+
Let Config-owning Warden consumers provide expected stable app bindings so topo
|
|
117
|
+
identity is validated before any safe source fixes run. Require every configured
|
|
118
|
+
app target to have committed app-local lock evidence before Warden claims the
|
|
119
|
+
workspace is current.
|
|
120
|
+
Expose deterministic per-app Warden drift evidence alongside the aggregate
|
|
121
|
+
workspace verdict.
|
|
122
|
+
Run the Warden artifact preflight for every topo-aware run that consumes saved
|
|
123
|
+
lock evidence, including `--fix` runs, and run that preflight before a fixing
|
|
124
|
+
run applies any safe source fix so invalid saved evidence can never rewrite
|
|
125
|
+
source first. Reject `wayfind diff` baselines whose recorded lock hash or
|
|
126
|
+
summary contradicts the embedded graph, including `--against-dir` directories.
|
|
127
|
+
|
|
128
|
+
- [`88a6a62`](https://github.com/outfitter-dev/trails/commit/88a6a62a9e9e230ca6d368fa78dc3ece6c816204): Complete the v1 classification-first cutover from projection/project vocabulary
|
|
129
|
+
to derive/derived for contract-owned fact production and render/rendered for
|
|
130
|
+
surface presentation. Public type, helper, rule, relation, and report names move
|
|
131
|
+
without compatibility aliases; ordinary repository/project nouns remain
|
|
132
|
+
explicit preserves or structured review inventory.
|
|
133
|
+
- [`6712075`](https://github.com/outfitter-dev/trails/commit/67120754df3f614c7f4dd98be1fa0ba9d69b7765): Complete the v1 hard cutover from the `contour` domain-object declaration
|
|
134
|
+
vocabulary to `entity` across contracts, topo facts, store helpers, Warden,
|
|
135
|
+
Wayfinder, operator surfaces, examples, and generated locks. Existing
|
|
136
|
+
applications must rename contour APIs, run `trails dev reset --yes` to discard
|
|
137
|
+
pre-cutover local Topographer snapshots, and then recompile committed
|
|
138
|
+
`trails.lock` artifacts before upgrading. Those derived snapshots are
|
|
139
|
+
intentionally not read through a compatibility layer.
|
|
140
|
+
The entity-shaped wire contract advances `TopoGraph` and split lock manifests
|
|
141
|
+
from schema version 3 to 4; old split artifacts fail with regeneration guidance,
|
|
142
|
+
while the canonical root `trails.lock` remains schema version 5.
|
|
143
|
+
Wayfinder reports those stale rows as topo-store drift while keeping current
|
|
144
|
+
committed lock facts available for inspection.
|
|
145
|
+
- [`ea55825`](https://github.com/outfitter-dev/trails/commit/ea558259fa9a6585e5b7e58ff2e0acf94f4ab8a5): Add the namespaced-overlays extension point to the topo graph: `deriveTopoGraph` accepts overlay registrations (namespace + zod schema + derive function), embeds validated facts as `overlays.<namespace>`, covers them with the canonical graph hash, and preserves unknown namespaces byte-for-byte so older toolchains never drop or reject newer overlays.
|
|
146
|
+
- [`35e5fed`](https://github.com/outfitter-dev/trails/commit/35e5fedd228e498783f479f0dd502e2f3ec772b8): Fold the Wayfinder graph-read catalog into `@ontrails/topography`. Wayfind
|
|
147
|
+
remains the product, trail-id, CLI, and MCP brand, but there is no longer an
|
|
148
|
+
`@ontrails/wayfinder` package to install or import. Programmatic consumers
|
|
149
|
+
should move imports such as `wayfinderTopo`, `wayfindOverviewTrail`,
|
|
150
|
+
`loadWayfinderArtifacts`, and the Wayfinder filter/provenance types to
|
|
151
|
+
`@ontrails/topography`.
|
|
152
|
+
|
|
153
|
+
Expose that package move as a governed Regrade transition so exact
|
|
154
|
+
`@ontrails/wayfinder` imports can move safely while product vocabulary and near
|
|
155
|
+
routes remain unchanged for review. Regrade routes package manifests through
|
|
156
|
+
structured review instead of rewriting dependency keys as plain text.
|
|
157
|
+
|
|
158
|
+
The Trails operator now reads all `wayfind.*` query trails and artifact helpers
|
|
159
|
+
from `@ontrails/topography` while preserving the existing CLI/MCP schemas,
|
|
160
|
+
route IDs, output shapes, and internal trail visibility.
|
|
161
|
+
|
|
162
|
+
- [`3a65ae3`](https://github.com/outfitter-dev/trails/commit/3a65ae363e05b7589f4a9876da4346886353b48c): Rename the durable graph substrate package from `@ontrails/topographer` to
|
|
163
|
+
`@ontrails/topography` after folding Wayfind graph queries into that owner.
|
|
164
|
+
|
|
165
|
+
Update imports to `@ontrails/topography` or
|
|
166
|
+
`@ontrails/topography/backend-support`. The pre-1.0 cutover does not ship a
|
|
167
|
+
compatibility package. TopoGraph, lock, topo-store, semantic diff, and Wayfind
|
|
168
|
+
APIs keep their existing contracts, and the `trails wayfind` CLI and MCP names
|
|
169
|
+
remain unchanged.
|
|
170
|
+
|
|
171
|
+
The governed package-route transition moves legacy `@ontrails/wayfinder`
|
|
172
|
+
imports directly to `@ontrails/topography`; it does not emit the retired
|
|
173
|
+
intermediate `@ontrails/topographer` route.
|
|
174
|
+
|
|
175
|
+
- [`6be2e95`](https://github.com/outfitter-dev/trails/commit/6be2e958d52561b1793ca569f537a4aa204e676b): Extend the lockfile schema to catalog trail IDs across apps. `SurfaceLock` now carries a Zod-validated `workspaceTrails` map whose entries include the trail ID, owning app name, and app module path, plus a narrowed `version: '2'` envelope for structured locks. The new `readWorkspaceLock()` reader returns the enriched trail-id index when present, or `null` for legacy / single-app locks. `TopoSnapshot` gains an optional `appName` attribution column (SQLite `topo_snapshots.app_name`, schema version 11) so snapshots can be attributed to their owning app. Single-app repos remain backward compatible — no workspace metadata is emitted unless the writer is given a `workspaceTrails` map.
|
|
176
|
+
- [`819de09`](https://github.com/outfitter-dev/trails/commit/819de09c3f4aa1ac5c234a3c7fb2e9218fa85ced): Add `buildWorkspaceTrailIndex()` for runtime workspace topo discovery and cross-app trail-ID resolution. Discovers apps via root `package.json` workspaces, identifies Trails apps by `package.json.trails.module` or a `src/app.ts` convention, and builds an enriched `{ trailId → { trailId, appName, modulePath } }` index. Prefers the lockfile's `workspaceTrails` map (from TRL-403) when present for fast paths; falls back to dynamic loader-based discovery otherwise. The loader is injectable for testing. This is the runtime substrate that `trails run <id>` (TRL-398) will use to resolve trail IDs to owning apps without scanning source. Per the TRL-608 boundary rule, this is Topographer-owned tooling — `@ontrails/core` is not modified.
|
|
177
|
+
- [`be08686`](https://github.com/outfitter-dev/trails/commit/be08686b7cd865708e18beb1f9027ce22604ccae): Detect trail-ID collisions across apps in `buildWorkspaceTrailIndex()`. Replaces last-write-wins behavior with structured collision facts: `WorkspaceTrailIndexResult` now carries `collisions: WorkspaceTrailCollision[]` where each collision records the trail ID and the sorted list of owning apps. Colliding IDs are **omitted from `index`** so silent ambiguity is impossible; callers such as `trails run` must explicitly resolve via `--app` or prompt. Non-colliding IDs continue to resolve through the enriched `index` entries. Lockfile path always returns `collisions: []` because the lockfile is already a flat map and cannot collide.
|
|
178
|
+
- [`893025e`](https://github.com/outfitter-dev/trails/commit/893025e5ed23157262621a4528758b43258698d0): Add `--permit '<json>'` to inject an inline permit on `trails run`. New `permitPreset()` exposes a `--permit` string flag that the CLI build parses and validates against the `BasePermit` shape (`{ id: string, scopes: string[] }`) using a small Zod schema. Valid permits flow through `ExecuteTrailOptions.permit` → `applyContextOverrides` → `ctx.permit` so existing `enforcePermitRequirement` behavior just sees a populated permit. Invalid JSON or schema mismatch surface as `Result.err(ValidationError)` (exit code 1) before the trail runs, avoiding spurious `PermitError` results from malformed input. The flag is global, never routed into trail input (added to `META_FLAG_CANDIDATES`), and overlays only when defined.
|
|
179
|
+
|
|
180
|
+
Topographer now projects permit requirements into surface-map entries and classifies permit-tightening diffs as breaking when new scopes are required.
|
|
181
|
+
|
|
182
|
+
- [`eee1307`](https://github.com/outfitter-dev/trails/commit/eee130707fee679d0675e8879f83e7dc4d5aa176): Serialize resolved surface facet metadata in TopoGraph artifacts and expose adapter type evidence for downstream projection checks.
|
|
183
|
+
- [`fde5516`](https://github.com/outfitter-dev/trails/commit/fde5516ad396faa718936b10ff658b3ade3383b9): Trail-native vocabulary cutover. Breaking API field renames across all packages:
|
|
184
|
+
|
|
185
|
+
- Trail spec: `run:` → `blaze:`, `follow:` → `crosses:`, `services:` → `resources:`, `metadata:` → `meta:`, `emits:` → `fires:`
|
|
186
|
+
- Runtime: `ctx.follow()` → `ctx.cross()`, `ctx.emit()` → `ctx.fire()`, `ctx.signal` (abort) → `ctx.abortSignal`
|
|
187
|
+
- Entry points: `trailhead(app)` → `surface(app)`
|
|
188
|
+
- Package rename: `@ontrails/crumbs` / `@ontrails/tracker` → `@ontrails/tracing`
|
|
189
|
+
- Wrapper types: retired gate/middleware vocabulary in favor of `Layer` and `layers`
|
|
190
|
+
- Package taxonomy: retired connector vocabulary in favor of adapters
|
|
191
|
+
|
|
192
|
+
### Patch Changes
|
|
193
|
+
|
|
194
|
+
- [`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.
|
|
195
|
+
|
|
196
|
+
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.
|
|
197
|
+
|
|
198
|
+
- [`7065b55`](https://github.com/outfitter-dev/trails/commit/7065b55568dced6df9f8687288842cdbbfd7f6e4): Fix two blocking bugs from real-world migration:
|
|
199
|
+
|
|
200
|
+
- Published packages now resolve correctly (workspace:^ instead of workspace:\*)
|
|
201
|
+
- Error forwarding works across different success types (Err no longer carries phantom T)
|
|
202
|
+
|
|
203
|
+
- [`42a87c1`](https://github.com/outfitter-dev/trails/commit/42a87c1b8691c2fad94ba45175b6eec0219f4594): Fix workspace dependency resolution in published packages. Now using bun publish
|
|
204
|
+
which correctly replaces workspace:^ with actual version numbers.
|
|
205
|
+
- [`5cab237`](https://github.com/outfitter-dev/trails/commit/5cab237bcdb47ba6317953ee42aeee3458d26acb): Restructure HTTP package and fix Codex review findings.
|
|
206
|
+
|
|
207
|
+
**http**: BREAKING — the Hono adapter moved to `@ontrails/hono` while `@ontrails/http` owns framework-agnostic route definitions. Hono is now a peer dependency of the adapter. `buildHttpRoutes()` is framework-agnostic. Fixed: malformed JSON → 400, execute() never throws, query parsing preserves raw strings and supports arrays.
|
|
208
|
+
|
|
209
|
+
**schema**: OpenAPI 200 response wraps in `{ data }` envelope matching wire format. Always includes 400 ValidationError with error schema. basePath trailing slash normalized.
|
|
210
|
+
|
|
211
|
+
- [`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`.
|
|
212
|
+
|
|
213
|
+
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.
|
|
214
|
+
|
|
215
|
+
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.
|
|
216
|
+
|
|
217
|
+
- [`00f7093`](https://github.com/outfitter-dev/trails/commit/00f7093132a50c49b7bc2dcf9eef98f9424fd2e0): Add resources as a first-class primitive.
|
|
218
|
+
|
|
219
|
+
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()`.
|
|
220
|
+
|
|
221
|
+
**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.
|
|
222
|
+
|
|
223
|
+
**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.
|
|
224
|
+
|
|
225
|
+
**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.
|
|
226
|
+
|
|
227
|
+
**Surfaces:** Resource overrides thread through the CLI, MCP, and HTTP surfaces.
|
|
228
|
+
|
|
229
|
+
**Introspection:** Survey and surface map outputs include resource graph. Topo exposes `.resources`, `.getResource()`, `.hasResource()`, `.listResources()`, `.resourceIds()`, `.resourceCount`.
|
|
230
|
+
|
|
231
|
+
**Docs:** ADR-009 accepted. Unified resource guide, updated vocabulary, getting-started, architecture, and package READMEs.
|
|
232
|
+
|
|
233
|
+
- [`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).
|
|
234
|
+
- [`de30d6c`](https://github.com/outfitter-dev/trails/commit/de30d6c358048fba48822ac43b1c2cc04a3d30be): Introduce `topo.compile` as the canonical trail for writing `.trails` lockfile
|
|
235
|
+
and surface artifacts, remove the `survey --generate` mode, and update drift
|
|
236
|
+
guidance to point at the compile command.
|
|
237
|
+
- [`c40865a`](https://github.com/outfitter-dev/trails/commit/c40865ac596d0c97a88abd9ba7259b864b836698): Batch topo-store signal relation reads for list views so signal consumers, producers, and source trails are loaded with one bounded query per relation table instead of per signal.
|
|
238
|
+
- [`8db145e`](https://github.com/outfitter-dev/trails/commit/8db145eeda955e55d000e52eb79a84cff755a9f8): Move activation report derivation into Topographer and keep the Trails app
|
|
239
|
+
consuming the owner-held activation facts through a compatibility re-export.
|
|
240
|
+
- [`4bc8a99`](https://github.com/outfitter-dev/trails/commit/4bc8a9933c03a30d34a97530b712aecc183f5889): Clarify the Topographer artifact workflow around top-level `trails compile`, `trails validate`, and `trails diff` commands, including explicit diagnostics for retired `trails topo compile`, `trails topo verify`, and `trails topo check` attempts.
|
|
241
|
+
- [`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.
|
|
242
|
+
- [`2d53717`](https://github.com/outfitter-dev/trails/commit/2d53717f7984e4d712b17e26069e2155d5e2cc75): Add trail-only `version` / `versions` authoring types and TopoGraph projection.
|
|
243
|
+
- [`16cb740`](https://github.com/outfitter-dev/trails/commit/16cb74032ecea582161743d1d30647489772c0f1): Run examples and contract checks across live trail version entries, and project version-entry example coverage into topo and survey reports.
|
|
244
|
+
- [`8894ecb`](https://github.com/outfitter-dev/trails/commit/8894ecbcafc1eaf9c75dcf9093f627acd0535735): Project content-addressed trail version markers and marker-prefix resolution.
|
|
245
|
+
- [`c36aca9`](https://github.com/outfitter-dev/trails/commit/c36aca978c7e1561e68701c084241e5b3f85dcef): Preserve existing Result error boundaries directly and widen Warden pass-through
|
|
246
|
+
coaching beyond trail blazes.
|
|
247
|
+
- [`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.
|
|
248
|
+
- [`371d19e`](https://github.com/outfitter-dev/trails/commit/371d19ea243507bfc7f85882373c40eb37476d52): Move the default `trails.db` location to the per-user Trails state store, expose deterministic state-store path helpers, stop scaffolding disposable `.trails/cache` and `.trails/state` directories, and update topo-store documentation for the global-state substrate.
|
|
249
|
+
- [`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.
|
|
250
|
+
- [`9f0842e`](https://github.com/outfitter-dev/trails/commit/9f0842ee9d7c7155d86a4fd023760ac0a5636f5d): Retire the temporary root vocabulary-cutover toolchain now that Regrade owns
|
|
251
|
+
structured migration plans, safe rewrites, classification, census, CLI/MCP
|
|
252
|
+
reports, and immutable history. Remove the obsolete source exemptions so
|
|
253
|
+
Oxlint and Warden enforce the durable transition contract directly, and add a
|
|
254
|
+
history-driven Regrade audit surface for current-tree regression checks.
|
|
255
|
+
- [`a89d469`](https://github.com/outfitter-dev/trails/commit/a89d4696aa78f3dda9394c14665ab3ea8c0f313c): Make `trails compile` → `trails validate` round-trip deterministically (TRL-1191). The per-user topo store no longer reuses previously stored JSON Schema bytes by zod definition hash — that hash cannot see `.describe()` metadata or object field order, so a warm store could serve pre-edit schema values into a freshly compiled lock and make `validate` report it stale immediately. Every snapshot now regenerates schema JSON from the live Zod schema, the store's graph hash goes through the same shared `deriveStableHash` path as `deriveTopoGraphHash`, and the committed `trails.lock` omits the wallclock `generatedAt` field so recompiling unchanged sources yields a byte-identical lock. `TopoGraph.generatedAt` is now optional; locks written by earlier versions still parse.
|
|
256
|
+
- [`a89d469`](https://github.com/outfitter-dev/trails/commit/a89d4696aa78f3dda9394c14665ab3ea8c0f313c): Make the per-user topo store an honest cache (TRL-1196). Every snapshot now records a content fingerprint of the app source set (`topo_snapshots.source_fingerprint`, store schema v14), `trails compile` reports it in its output, and Wayfinder artifact loading compares it against a freshly derived fingerprint — a mismatch surfaces as a `topo-store-source-fingerprint-mismatch` stale reason instead of silently serving pre-edit facts. Compile derives everything from live source on every run, so a poisoned or stale store can never reach `trails.lock`, with or without `--force`.
|
|
257
|
+
- [`b1fbe57`](https://github.com/outfitter-dev/trails/commit/b1fbe574e6f44d1fecb5e3a000270955c0a77b7b): Publish Bun-validated package tarballs through an npm trusted-publishing adapter
|
|
258
|
+
binding, add exact repository metadata for each public workspace package, and
|
|
259
|
+
correct the native Bun release descriptor to its pack-only runtime boundary.
|
|
260
|
+
- [`b12e19b`](https://github.com/outfitter-dev/trails/commit/b12e19b98f481e3eac7d33ac25f8d5f818026f7c): Added typed topo-store views over saved `TopoGraph` content, including typed
|
|
261
|
+
`topoGraph`, `entries`, and `contours` accessors plus parsed lock manifest and
|
|
262
|
+
TopoGraph payloads on exported snapshot records.
|
|
263
|
+
- [`ed7f6f6`](https://github.com/outfitter-dev/trails/commit/ed7f6f631f9a0ec2dd5437ac28469b2be60efc49): Expand topo-store and survey trail detail records with resolved TopoGraph contract facts for blind-agent review.
|
|
264
|
+
- [`653d1fc`](https://github.com/outfitter-dev/trails/commit/653d1fc27243164d43b16e50c7d6fb83a5faea8e): Add a top-level `trails diff` command and extend TopoGraph diffs with version, marker, lifecycle status, support set, and force-event audit details.
|
|
265
|
+
- [`2e76288`](https://github.com/outfitter-dev/trails/commit/2e76288ab0ba13afb5e648e90d6ecb54133e88ed): Add graph-only force event projection for forced compile break acceptance and block unforced breaking topo changes.
|
|
266
|
+
- [`99523f2`](https://github.com/outfitter-dev/trails/commit/99523f2a67e92091781165b6c847252b910554e2): Clean up resource context naming in shipped source and examples so resource
|
|
267
|
+
factories consistently use resource vocabulary.
|
|
268
|
+
- [`9bcf34e`](https://github.com/outfitter-dev/trails/commit/9bcf34e53e0c7a40f4ebb78be7f47ac22421ff25): Add trail-owned CLI command projection metadata and serialize resolved command
|
|
269
|
+
route facts for downstream tools.
|
|
270
|
+
- [`59d10da`](https://github.com/outfitter-dev/trails/commit/59d10da59dde304141736ef883d4257cc97f017c): Dogfood CLI command route aliases through the Trails operator, saved Topographer artifacts, and Wayfinder contract inspection.
|
|
271
|
+
- [`d9c6e50`](https://github.com/outfitter-dev/trails/commit/d9c6e507e552ad467b717d9b169e1f4850999565): Embed serializable library projection facts in `topo.lock` so Wayfinder, Warden,
|
|
272
|
+
and generated library package governance can inspect exports, exclusions, and
|
|
273
|
+
collisions from the artifact family.
|
|
274
|
+
- [`b248d4a`](https://github.com/outfitter-dev/trails/commit/b248d4ad3346eb25ade876eb57dc690e95d2fe1c): Add the read-only Wayfinder artifact loader and fact provenance envelope helpers, including cold topo-store schema preflight support.
|
|
275
|
+
- [`e95c6e3`](https://github.com/outfitter-dev/trails/commit/e95c6e3dafc51b432e0e43baa1f7afcce4f07d7f): Remove draft ADR anchors from public source comments.
|
|
276
|
+
- [`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.
|
|
277
|
+
|
|
278
|
+
Make the Trails operator topo reproducible by keeping its authored examples free of temporary filesystem paths, so its committed app-owned lock validates deterministically.
|
|
279
|
+
|
|
280
|
+
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.
|
|
281
|
+
|
|
282
|
+
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.
|
|
283
|
+
|
|
284
|
+
**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.
|
|
285
|
+
|
|
286
|
+
## 1.0.0-beta.50
|
|
287
|
+
|
|
288
|
+
## 1.0.0-beta.49
|
|
289
|
+
|
|
290
|
+
## 1.0.0-beta.48
|
|
291
|
+
|
|
292
|
+
## 1.0.0-beta.47
|
|
293
|
+
|
|
294
|
+
## 1.0.0-beta.46
|
|
295
|
+
|
|
296
|
+
## 1.0.0-beta.45
|
|
297
|
+
|
|
298
|
+
## 1.0.0-beta.44
|
|
299
|
+
|
|
300
|
+
### Patch Changes
|
|
301
|
+
|
|
302
|
+
- [`b1fbe57`](https://github.com/outfitter-dev/trails/commit/b1fbe574e6f44d1fecb5e3a000270955c0a77b7b): Publish Bun-validated package tarballs through an npm trusted-publishing adapter
|
|
303
|
+
binding, add exact repository metadata for each public workspace package, and
|
|
304
|
+
correct the native Bun release descriptor to its pack-only runtime boundary.
|
|
305
|
+
|
|
306
|
+
## 1.0.0-beta.43
|
|
307
|
+
|
|
308
|
+
### Minor Changes
|
|
309
|
+
|
|
310
|
+
- [`88a6a62`](https://github.com/outfitter-dev/trails/commit/88a6a62a9e9e230ca6d368fa78dc3ece6c816204): Complete the v1 classification-first cutover from projection/project vocabulary
|
|
311
|
+
to derive/derived for contract-owned fact production and render/rendered for
|
|
312
|
+
surface presentation. Public type, helper, rule, relation, and report names move
|
|
313
|
+
without compatibility aliases; ordinary repository/project nouns remain
|
|
314
|
+
explicit preserves or structured review inventory.
|
|
315
|
+
|
|
316
|
+
### Patch Changes
|
|
317
|
+
|
|
318
|
+
- [`9f0842e`](https://github.com/outfitter-dev/trails/commit/9f0842ee9d7c7155d86a4fd023760ac0a5636f5d): Retire the temporary root vocabulary-cutover toolchain now that Regrade owns
|
|
319
|
+
structured migration plans, safe rewrites, classification, census, CLI/MCP
|
|
320
|
+
reports, and immutable history. Remove the obsolete source exemptions so
|
|
321
|
+
Oxlint and Warden enforce the durable transition contract directly, and add a
|
|
322
|
+
history-driven Regrade audit surface for current-tree regression checks.
|
|
323
|
+
|
|
324
|
+
## 1.0.0-beta.42
|
|
325
|
+
|
|
326
|
+
## 1.0.0-beta.41
|
|
327
|
+
|
|
328
|
+
## 1.0.0-beta.40
|
|
329
|
+
|
|
330
|
+
### Minor Changes
|
|
331
|
+
|
|
332
|
+
- [`6712075`](https://github.com/outfitter-dev/trails/commit/67120754df3f614c7f4dd98be1fa0ba9d69b7765): Complete the v1 hard cutover from the `contour` domain-object declaration
|
|
333
|
+
vocabulary to `entity` across contracts, topo facts, store helpers, Warden,
|
|
334
|
+
Wayfinder, operator surfaces, examples, and generated locks. Existing
|
|
335
|
+
applications must rename contour APIs, run `trails dev reset --yes` to discard
|
|
336
|
+
pre-cutover local Topographer snapshots, and then recompile committed
|
|
337
|
+
`trails.lock` artifacts before upgrading. Those derived snapshots are
|
|
338
|
+
intentionally not read through a compatibility layer.
|
|
339
|
+
The entity-shaped wire contract advances `TopoGraph` and split lock manifests
|
|
340
|
+
from schema version 3 to 4; old split artifacts fail with regeneration guidance,
|
|
341
|
+
while the canonical root `trails.lock` remains schema version 5.
|
|
342
|
+
Wayfinder reports those stale rows as topo-store drift while keeping current
|
|
343
|
+
committed lock facts available for inspection.
|
|
344
|
+
- [`35e5fed`](https://github.com/outfitter-dev/trails/commit/35e5fedd228e498783f479f0dd502e2f3ec772b8): Fold the Wayfinder graph-read catalog into `@ontrails/topography`. Wayfind
|
|
345
|
+
remains the product, trail-id, CLI, and MCP brand, but there is no longer an
|
|
346
|
+
`@ontrails/wayfinder` package to install or import. Programmatic consumers
|
|
347
|
+
should move imports such as `wayfinderTopo`, `wayfindOverviewTrail`,
|
|
348
|
+
`loadWayfinderArtifacts`, and the Wayfinder filter/provenance types to
|
|
349
|
+
`@ontrails/topography`.
|
|
350
|
+
|
|
351
|
+
Expose that package move as a governed Regrade transition so exact
|
|
352
|
+
`@ontrails/wayfinder` imports can move safely while product vocabulary and near
|
|
353
|
+
routes remain unchanged for review. Regrade routes package manifests through
|
|
354
|
+
structured review instead of rewriting dependency keys as plain text.
|
|
355
|
+
|
|
356
|
+
The Trails operator now reads all `wayfind.*` query trails and artifact helpers
|
|
357
|
+
from `@ontrails/topography` while preserving the existing CLI/MCP schemas,
|
|
358
|
+
route IDs, output shapes, and internal trail visibility.
|
|
359
|
+
|
|
360
|
+
- [`3a65ae3`](https://github.com/outfitter-dev/trails/commit/3a65ae363e05b7589f4a9876da4346886353b48c): Rename the durable graph substrate package from `@ontrails/topographer` to
|
|
361
|
+
`@ontrails/topography` after folding Wayfind graph queries into that owner.
|
|
362
|
+
|
|
363
|
+
Update imports to `@ontrails/topography` or
|
|
364
|
+
`@ontrails/topography/backend-support`. The pre-1.0 cutover does not ship a
|
|
365
|
+
compatibility package. TopoGraph, lock, topo-store, semantic diff, and Wayfind
|
|
366
|
+
APIs keep their existing contracts, and the `trails wayfind` CLI and MCP names
|
|
367
|
+
remain unchanged.
|
|
368
|
+
|
|
369
|
+
The governed package-route transition moves legacy `@ontrails/wayfinder`
|
|
370
|
+
imports directly to `@ontrails/topography`; it does not emit the retired
|
|
371
|
+
intermediate `@ontrails/topographer` route.
|
|
372
|
+
|
|
373
|
+
## 1.0.0-beta.39
|
|
374
|
+
|
|
375
|
+
### Minor Changes
|
|
376
|
+
|
|
377
|
+
- [`ea55825`](https://github.com/outfitter-dev/trails/commit/ea558259fa9a6585e5b7e58ff2e0acf94f4ab8a5): Add the namespaced-overlays extension point to the topo graph: `deriveTopoGraph` accepts overlay registrations (namespace + zod schema + derive function), embeds validated facts as `overlays.<namespace>`, covers them with the canonical graph hash, and preserves unknown namespaces byte-for-byte so older toolchains never drop or reject newer overlays.
|
|
378
|
+
|
|
379
|
+
### Patch Changes
|
|
380
|
+
|
|
381
|
+
- [`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.
|
|
382
|
+
|
|
383
|
+
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.
|
|
384
|
+
|
|
385
|
+
- [`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`.
|
|
386
|
+
|
|
387
|
+
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.
|
|
388
|
+
|
|
389
|
+
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.
|
|
390
|
+
|
|
391
|
+
- [`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).
|
|
392
|
+
- [`a89d469`](https://github.com/outfitter-dev/trails/commit/a89d4696aa78f3dda9394c14665ab3ea8c0f313c): Make `trails compile` → `trails validate` round-trip deterministically (TRL-1191). The per-user topo store no longer reuses previously stored JSON Schema bytes by zod definition hash — that hash cannot see `.describe()` metadata or object field order, so a warm store could serve pre-edit schema values into a freshly compiled lock and make `validate` report it stale immediately. Every snapshot now regenerates schema JSON from the live Zod schema, the store's graph hash goes through the same shared `deriveStableHash` path as `deriveTopoGraphHash`, and the committed `trails.lock` omits the wallclock `generatedAt` field so recompiling unchanged sources yields a byte-identical lock. `TopoGraph.generatedAt` is now optional; locks written by earlier versions still parse.
|
|
393
|
+
- [`a89d469`](https://github.com/outfitter-dev/trails/commit/a89d4696aa78f3dda9394c14665ab3ea8c0f313c): Make the per-user topo store an honest cache (TRL-1196). Every snapshot now records a content fingerprint of the app source set (`topo_snapshots.source_fingerprint`, store schema v14), `trails compile` reports it in its output, and Wayfinder artifact loading compares it against a freshly derived fingerprint — a mismatch surfaces as a `topo-store-source-fingerprint-mismatch` stale reason instead of silently serving pre-edit facts. Compile derives everything from live source on every run, so a poisoned or stale store can never reach `trails.lock`, with or without `--force`.
|
|
394
|
+
|
|
395
|
+
## 1.0.0-beta.38
|
|
396
|
+
|
|
397
|
+
## 1.0.0-beta.37
|
|
398
|
+
|
|
399
|
+
## 1.0.0-beta.36
|
|
400
|
+
|
|
401
|
+
### Patch Changes
|
|
402
|
+
|
|
403
|
+
- [`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.
|
|
404
|
+
|
|
405
|
+
## 1.0.0-beta.35
|
|
406
|
+
|
|
407
|
+
## 1.0.0-beta.34
|
|
408
|
+
|
|
409
|
+
## 1.0.0-beta.33
|
|
410
|
+
|
|
411
|
+
## 1.0.0-beta.32
|
|
412
|
+
|
|
413
|
+
### Patch Changes
|
|
414
|
+
|
|
415
|
+
- 8db145e: Move activation report derivation into Topographer and keep the Trails app
|
|
416
|
+
consuming the owner-held activation facts through a compatibility re-export.
|
|
417
|
+
- Updated dependencies [3e5c0fc]
|
|
418
|
+
- Updated dependencies [f3c4fef]
|
|
419
|
+
- Updated dependencies [cb0a9d8]
|
|
420
|
+
- Updated dependencies [21c6dda]
|
|
421
|
+
- Updated dependencies [fe72b84]
|
|
422
|
+
- @ontrails/core@1.0.0-beta.32
|
|
423
|
+
|
|
424
|
+
## 1.0.0-beta.31
|
|
425
|
+
|
|
426
|
+
### Patch Changes
|
|
427
|
+
|
|
428
|
+
- Updated dependencies [4cd5d4e]
|
|
429
|
+
- Updated dependencies [38907cc]
|
|
430
|
+
- @ontrails/core@1.0.0-beta.31
|
|
431
|
+
|
|
432
|
+
## 1.0.0-beta.30
|
|
433
|
+
|
|
434
|
+
### Patch Changes
|
|
435
|
+
|
|
436
|
+
- @ontrails/core@1.0.0-beta.30
|
|
437
|
+
|
|
438
|
+
## 1.0.0-beta.29
|
|
439
|
+
|
|
440
|
+
### Patch Changes
|
|
441
|
+
|
|
442
|
+
- @ontrails/core@1.0.0-beta.29
|
|
443
|
+
|
|
444
|
+
## 1.0.0-beta.28
|
|
445
|
+
|
|
446
|
+
### Patch Changes
|
|
447
|
+
|
|
448
|
+
- @ontrails/core@1.0.0-beta.28
|
|
449
|
+
|
|
450
|
+
## 1.0.0-beta.27
|
|
451
|
+
|
|
452
|
+
### Patch Changes
|
|
453
|
+
|
|
454
|
+
- @ontrails/core@1.0.0-beta.27
|
|
455
|
+
|
|
456
|
+
## 1.0.0-beta.26
|
|
457
|
+
|
|
458
|
+
### Patch Changes
|
|
459
|
+
|
|
460
|
+
- 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.
|
|
461
|
+
- 371d19e: Move the default `trails.db` location to the per-user Trails state store, expose deterministic state-store path helpers, stop scaffolding disposable `.trails/cache` and `.trails/state` directories, and update topo-store documentation for the global-state substrate.
|
|
462
|
+
- Updated dependencies [1307568]
|
|
463
|
+
- Updated dependencies [371d19e]
|
|
464
|
+
- @ontrails/core@1.0.0-beta.26
|
|
465
|
+
|
|
466
|
+
## 1.0.0-beta.25
|
|
467
|
+
|
|
468
|
+
### Patch Changes
|
|
469
|
+
|
|
470
|
+
- c36aca9: Preserve existing Result error boundaries directly and widen Warden pass-through
|
|
471
|
+
coaching beyond trail blazes.
|
|
472
|
+
- 9bcf34e: Add trail-owned CLI command projection metadata and serialize resolved command
|
|
473
|
+
route facts for downstream tools.
|
|
474
|
+
- 59d10da: Dogfood CLI command route aliases through the Trails operator, saved Topographer artifacts, and Wayfinder contract inspection.
|
|
475
|
+
- d9c6e50: Embed serializable library projection facts in `topo.lock` so Wayfinder, Warden,
|
|
476
|
+
and generated library package governance can inspect exports, exclusions, and
|
|
477
|
+
collisions from the artifact family.
|
|
478
|
+
- Updated dependencies [c36aca9]
|
|
479
|
+
- Updated dependencies [3befcf1]
|
|
480
|
+
- Updated dependencies [a4f9cf6]
|
|
481
|
+
- Updated dependencies [9bcf34e]
|
|
482
|
+
- @ontrails/core@1.0.0-beta.25
|
|
483
|
+
|
|
484
|
+
## 1.0.0-beta.24
|
|
485
|
+
|
|
486
|
+
### Patch Changes
|
|
487
|
+
|
|
488
|
+
- @ontrails/core@1.0.0-beta.24
|
|
489
|
+
|
|
490
|
+
## 1.0.0-beta.23
|
|
491
|
+
|
|
492
|
+
### Patch Changes
|
|
493
|
+
|
|
494
|
+
- @ontrails/core@1.0.0-beta.23
|
|
495
|
+
|
|
496
|
+
## 1.0.0-beta.22
|
|
497
|
+
|
|
498
|
+
### Patch Changes
|
|
499
|
+
|
|
500
|
+
- @ontrails/core@1.0.0-beta.22
|
|
501
|
+
|
|
502
|
+
## 1.0.0-beta.21
|
|
503
|
+
|
|
504
|
+
### Patch Changes
|
|
505
|
+
|
|
506
|
+
- 99523f2: Clean up resource context naming in shipped source and examples so resource
|
|
507
|
+
factories consistently use resource vocabulary.
|
|
508
|
+
- Updated dependencies [99523f2]
|
|
509
|
+
- @ontrails/core@1.0.0-beta.21
|
|
510
|
+
|
|
511
|
+
## 1.0.0-beta.20
|
|
512
|
+
|
|
513
|
+
### Minor Changes
|
|
514
|
+
|
|
515
|
+
- eee1307: Serialize resolved surface facet metadata in TopoGraph artifacts and expose adapter type evidence for downstream projection checks.
|
|
516
|
+
|
|
517
|
+
### Patch Changes
|
|
518
|
+
|
|
519
|
+
- b248d4a: Add the read-only Wayfinder artifact loader and fact provenance envelope helpers, including cold topo-store schema preflight support.
|
|
520
|
+
- Updated dependencies [851a2a3]
|
|
521
|
+
- @ontrails/core@1.0.0-beta.20
|
|
522
|
+
|
|
523
|
+
## 1.0.0-beta.19
|
|
524
|
+
|
|
525
|
+
### Major Changes
|
|
526
|
+
|
|
527
|
+
- 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.
|
|
528
|
+
|
|
529
|
+
### Minor Changes
|
|
530
|
+
|
|
531
|
+
- 120caf5: Promote topo artifact commands to `trails compile` and `trails validate`.
|
|
532
|
+
|
|
533
|
+
### Patch Changes
|
|
534
|
+
|
|
535
|
+
- 4bc8a99: Clarify the Topographer artifact workflow around top-level `trails compile`, `trails validate`, and `trails diff` commands, including explicit diagnostics for retired `trails topo compile`, `trails topo verify`, and `trails topo check` attempts.
|
|
536
|
+
- 2d53717: Add trail-only `version` / `versions` authoring types and TopoGraph projection.
|
|
537
|
+
- 16cb740: Run examples and contract checks across live trail version entries, and project version-entry example coverage into topo and survey reports.
|
|
538
|
+
- 8894ecb: Project content-addressed trail version markers and marker-prefix resolution.
|
|
539
|
+
- 653d1fc: Add a top-level `trails diff` command and extend TopoGraph diffs with version, marker, lifecycle status, support set, and force-event audit details.
|
|
540
|
+
- 2e76288: Add graph-only force event projection for forced compile break acceptance and block unforced breaking topo changes.
|
|
541
|
+
- Updated dependencies [e41c382]
|
|
542
|
+
- Updated dependencies [1eb5bdc]
|
|
543
|
+
- Updated dependencies [f8d80b9]
|
|
544
|
+
- Updated dependencies [846a597]
|
|
545
|
+
- Updated dependencies [223aaad]
|
|
546
|
+
- Updated dependencies [3125f4d]
|
|
547
|
+
- Updated dependencies [2494dc6]
|
|
548
|
+
- Updated dependencies [2d53717]
|
|
549
|
+
- Updated dependencies [16cb740]
|
|
550
|
+
- Updated dependencies [8894ecb]
|
|
551
|
+
- Updated dependencies [fdf7ec9]
|
|
552
|
+
- Updated dependencies [d76be13]
|
|
553
|
+
- Updated dependencies [84f56a5]
|
|
554
|
+
- Updated dependencies [431b04c]
|
|
555
|
+
- Updated dependencies [5d88104]
|
|
556
|
+
- Updated dependencies [f04a9ef]
|
|
557
|
+
- @ontrails/core@1.0.0-beta.19
|
|
558
|
+
|
|
559
|
+
## 1.0.0-beta.18
|
|
560
|
+
|
|
561
|
+
### Patch Changes
|
|
562
|
+
|
|
563
|
+
- @ontrails/core@1.0.0-beta.18
|
|
564
|
+
|
|
565
|
+
## 1.0.0-beta.17
|
|
566
|
+
|
|
567
|
+
### Patch Changes
|
|
568
|
+
|
|
569
|
+
- Updated dependencies [3dc8254]
|
|
570
|
+
- @ontrails/core@1.0.0-beta.17
|
|
571
|
+
|
|
572
|
+
## 1.0.0-beta.16
|
|
573
|
+
|
|
574
|
+
### Major Changes
|
|
575
|
+
|
|
576
|
+
- 2bf239e: Move OpenAPI generation ownership to the HTTP surface.
|
|
577
|
+
|
|
578
|
+
**http**: Export `deriveOpenApiSpec()` and its OpenAPI types from `@ontrails/http`.
|
|
579
|
+
|
|
580
|
+
**schema**: Remove the OpenAPI helper export so schema stays focused on surface maps, locks, and semantic diffing.
|
|
581
|
+
|
|
582
|
+
- 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.
|
|
583
|
+
- 7a1d4a9: Rename the public resolved graph API from `SurfaceMap` to `TopoGraph`, including
|
|
584
|
+
the derive, hash, diff, and current graph artifact I/O helpers.
|
|
585
|
+
- 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.
|
|
586
|
+
- 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`.
|
|
587
|
+
- bbb1ea4: Move the workspace trail index out of the lock manifest and into the serialized TopoGraph artifact. Workspace index reads now consult `topo.lock` workspace metadata, and `buildWorkspaceTrailIndex()` exposes `topo-lock` cache hits through the artifact-family path.
|
|
588
|
+
|
|
589
|
+
### Minor Changes
|
|
590
|
+
|
|
591
|
+
- 3f678d4: Record topo and trail layer attachments in trail surface-map entries, including layer input schemas, so resolved-contract hashing and diffing can detect layer contract changes.
|
|
592
|
+
- 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.
|
|
593
|
+
|
|
594
|
+
Breaking pre-1.0 beta change. Update consumer imports:
|
|
595
|
+
|
|
596
|
+
```diff
|
|
597
|
+
- import { topoStore, createTopoStore, createMockTopoStore, createTopoSnapshot, listTopoSnapshots, pinTopoSnapshot, unpinTopoSnapshot, createStoredTopoSnapshot, getStoredTopoExport, countTopoSnapshots, countPinnedSnapshots, countPrunableSnapshots, pruneUnpinnedSnapshots } from '@ontrails/core';
|
|
598
|
+
+ import { topoStore, createTopoStore, createMockTopoStore, createTopoSnapshot, listTopoSnapshots, pinTopoSnapshot, unpinTopoSnapshot } from '@ontrails/topographer';
|
|
599
|
+
+ import { createStoredTopoSnapshot, getStoredTopoExport, countTopoSnapshots, countPinnedSnapshots, countPrunableSnapshots, pruneUnpinnedSnapshots } from '@ontrails/topographer/backend-support';
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
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`.
|
|
603
|
+
|
|
604
|
+
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.
|
|
605
|
+
|
|
606
|
+
- 4b8d13b: **BREAKING:** Rename surface-map exposure fields from `trailheads` to `surfaces`.
|
|
607
|
+
|
|
608
|
+
`SurfaceMapEntry.trailheads` is now `SurfaceMapEntry.surfaces`, persisted surface-map JSON now writes `surfaces`, and diff details now report `Surface "<name>" added/removed`.
|
|
609
|
+
|
|
610
|
+
See `docs/migration/trailhead-to-surface.md` for the full migration map.
|
|
611
|
+
|
|
612
|
+
- 6be2e95: Extend the lockfile schema to catalog trail IDs across apps. `SurfaceLock` now carries a Zod-validated `workspaceTrails` map whose entries include the trail ID, owning app name, and app module path, plus a narrowed `version: '2'` envelope for structured locks. The new `readWorkspaceLock()` reader returns the enriched trail-id index when present, or `null` for legacy / single-app locks. `TopoSnapshot` gains an optional `appName` attribution column (SQLite `topo_snapshots.app_name`, schema version 11) so snapshots can be attributed to their owning app. Single-app repos remain backward compatible — no workspace metadata is emitted unless the writer is given a `workspaceTrails` map.
|
|
613
|
+
- 819de09: Add `buildWorkspaceTrailIndex()` for runtime workspace topo discovery and cross-app trail-ID resolution. Discovers apps via root `package.json` workspaces, identifies Trails apps by `package.json.trails.module` or a `src/app.ts` convention, and builds an enriched `{ trailId → { trailId, appName, modulePath } }` index. Prefers the lockfile's `workspaceTrails` map (from TRL-403) when present for fast paths; falls back to dynamic loader-based discovery otherwise. The loader is injectable for testing. This is the runtime substrate that `trails run <id>` (TRL-398) will use to resolve trail IDs to owning apps without scanning source. Per the TRL-608 boundary rule, this is Topographer-owned tooling — `@ontrails/core` is not modified.
|
|
614
|
+
- be08686: Detect trail-ID collisions across apps in `buildWorkspaceTrailIndex()`. Replaces last-write-wins behavior with structured collision facts: `WorkspaceTrailIndexResult` now carries `collisions: WorkspaceTrailCollision[]` where each collision records the trail ID and the sorted list of owning apps. Colliding IDs are **omitted from `index`** so silent ambiguity is impossible; callers such as `trails run` must explicitly resolve via `--app` or prompt. Non-colliding IDs continue to resolve through the enriched `index` entries. Lockfile path always returns `collisions: []` because the lockfile is already a flat map and cannot collide.
|
|
615
|
+
- 893025e: Add `--permit '<json>'` to inject an inline permit on `trails run`. New `permitPreset()` exposes a `--permit` string flag that the CLI build parses and validates against the `BasePermit` shape (`{ id: string, scopes: string[] }`) using a small Zod schema. Valid permits flow through `ExecuteTrailOptions.permit` → `applyContextOverrides` → `ctx.permit` so existing `enforcePermitRequirement` behavior just sees a populated permit. Invalid JSON or schema mismatch surface as `Result.err(ValidationError)` (exit code 1) before the trail runs, avoiding spurious `PermitError` results from malformed input. The flag is global, never routed into trail input (added to `META_FLAG_CANDIDATES`), and overlays only when defined.
|
|
616
|
+
|
|
617
|
+
Topographer now projects permit requirements into surface-map entries and classifies permit-tightening diffs as breaking when new scopes are required.
|
|
618
|
+
|
|
619
|
+
### Patch Changes
|
|
620
|
+
|
|
621
|
+
- de30d6c: Introduce `topo.compile` as the canonical trail for writing `.trails` lockfile
|
|
622
|
+
and surface artifacts, remove the `survey --generate` mode, and update drift
|
|
623
|
+
guidance to point at the compile command.
|
|
624
|
+
- c40865a: Batch topo-store signal relation reads for list views so signal consumers, producers, and source trails are loaded with one bounded query per relation table instead of per signal.
|
|
625
|
+
- 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.
|
|
626
|
+
- b12e19b: Added typed topo-store views over saved `TopoGraph` content, including typed
|
|
627
|
+
`topoGraph`, `entries`, and `contours` accessors plus parsed lock manifest and
|
|
628
|
+
TopoGraph payloads on exported snapshot records.
|
|
629
|
+
- ed7f6f6: Expand topo-store and survey trail detail records with resolved TopoGraph contract facts for blind-agent review.
|
|
630
|
+
- Updated dependencies [73622ae]
|
|
631
|
+
- Updated dependencies [6300f70]
|
|
632
|
+
- Updated dependencies [d172013]
|
|
633
|
+
- Updated dependencies [c3fc5c3]
|
|
634
|
+
- Updated dependencies [20d7a5c]
|
|
635
|
+
- Updated dependencies [be5fb46]
|
|
636
|
+
- Updated dependencies [e898cc4]
|
|
637
|
+
- Updated dependencies [3395234]
|
|
638
|
+
- Updated dependencies [bcdc484]
|
|
639
|
+
- Updated dependencies [331e3a9]
|
|
640
|
+
- Updated dependencies [4399fdb]
|
|
641
|
+
- Updated dependencies [4b8d13b]
|
|
642
|
+
- Updated dependencies [112b9f2]
|
|
643
|
+
- Updated dependencies [893025e]
|
|
644
|
+
- Updated dependencies [eec5e9d]
|
|
645
|
+
- Updated dependencies [ebd4434]
|
|
646
|
+
- Updated dependencies [863d473]
|
|
647
|
+
- Updated dependencies [344f2f7]
|
|
648
|
+
- Updated dependencies [26f9ffd]
|
|
649
|
+
- Updated dependencies [10eae9a]
|
|
650
|
+
- Updated dependencies [22c6c06]
|
|
651
|
+
- @ontrails/core@1.0.0-beta.16
|
|
652
|
+
|
|
653
|
+
## Unreleased
|
|
654
|
+
|
|
655
|
+
### Patch Changes
|
|
656
|
+
|
|
657
|
+
- Renamed package from `@ontrails/schema` to `@ontrails/topographer`. No API changes; mechanical rename only. See ADR-0042 for the durable graph substrate doctrine.
|
|
658
|
+
|
|
659
|
+
## 1.0.0-beta.15
|
|
660
|
+
|
|
661
|
+
### Patch Changes
|
|
662
|
+
|
|
663
|
+
- Updated dependencies [4ad6b25]
|
|
664
|
+
- @ontrails/core@1.0.0-beta.15
|
|
665
|
+
|
|
666
|
+
## 1.0.0-beta.14
|
|
667
|
+
|
|
668
|
+
### Minor Changes
|
|
669
|
+
|
|
670
|
+
- 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.
|
|
671
|
+
|
|
672
|
+
### Patch Changes
|
|
673
|
+
|
|
674
|
+
- Updated dependencies [69057e9]
|
|
675
|
+
- @ontrails/core@1.0.0-beta.14
|
|
676
|
+
|
|
677
|
+
## 1.0.0-beta.13
|
|
678
|
+
|
|
679
|
+
### Minor Changes
|
|
680
|
+
|
|
681
|
+
- Trail-native vocabulary cutover. Breaking API field renames across all packages:
|
|
682
|
+
|
|
683
|
+
- Trail spec: `run:` → `blaze:`, `follow:` → `crosses:`, `services:` → `provisions:`, `metadata:` → `meta:`, `emits:` → `signals:`
|
|
684
|
+
- Runtime: `ctx.follow()` → `ctx.cross()`, `ctx.emit()` → `ctx.signal()`, `ctx.signal` (abort) → `ctx.abortSignal`
|
|
685
|
+
- Entry points: `blaze(app)` → `trailhead(app)`
|
|
686
|
+
- Package rename: `@ontrails/crumbs` → `@ontrails/tracker`
|
|
687
|
+
- Wrapper types: `Layer` → `Gate`, `layers`/`middleware` → `gates`
|
|
688
|
+
- Transport: `surface` → `trailhead`, `adapter` → `connector`
|
|
689
|
+
|
|
690
|
+
### Patch Changes
|
|
691
|
+
|
|
692
|
+
- Updated dependencies [6944147]
|
|
693
|
+
- Updated dependencies
|
|
694
|
+
- @ontrails/core@1.0.0-beta.13
|
|
695
|
+
|
|
696
|
+
## 1.0.0-beta.12
|
|
697
|
+
|
|
698
|
+
### Patch Changes
|
|
699
|
+
|
|
700
|
+
- Updated dependencies
|
|
701
|
+
- @ontrails/core@1.0.0-beta.12
|
|
702
|
+
|
|
703
|
+
## 1.0.0-beta.11
|
|
704
|
+
|
|
705
|
+
### Patch Changes
|
|
706
|
+
|
|
707
|
+
- Add provisions as a first-class primitive.
|
|
708
|
+
|
|
709
|
+
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()`.
|
|
710
|
+
|
|
711
|
+
**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.
|
|
712
|
+
|
|
713
|
+
**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.
|
|
714
|
+
|
|
715
|
+
**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.
|
|
716
|
+
|
|
717
|
+
**Trailheads:** Provision overrides thread through `run` and `trailhead` on CLI, MCP, and HTTP.
|
|
718
|
+
|
|
719
|
+
**Introspection:** Survey and trailhead map outputs include provision graph. Topo exposes `.provisions`, `.getProvision()`, `.hasProvision()`, `.listProvisions()`, `.provisionIds()`, `.provisionCount`.
|
|
720
|
+
|
|
721
|
+
**Docs:** ADR-009 accepted. Unified services guide, updated vocabulary, getting-started, architecture, and package READMEs.
|
|
722
|
+
|
|
723
|
+
- Updated dependencies
|
|
724
|
+
- @ontrails/core@1.0.0-beta.11
|
|
725
|
+
|
|
726
|
+
## 1.0.0-beta.10
|
|
727
|
+
|
|
728
|
+
### Patch Changes
|
|
729
|
+
|
|
730
|
+
- Updated dependencies
|
|
731
|
+
- @ontrails/core@1.0.0-beta.10
|
|
732
|
+
|
|
733
|
+
## 1.0.0-beta.9
|
|
734
|
+
|
|
735
|
+
### Minor Changes
|
|
736
|
+
|
|
737
|
+
- Consolidated improvements across all trailhead packages.
|
|
738
|
+
|
|
739
|
+
**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.
|
|
740
|
+
|
|
741
|
+
**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.
|
|
742
|
+
|
|
743
|
+
**mcp**: Return `Result` from `buildMcpTools()` on collision instead of throwing.
|
|
744
|
+
|
|
745
|
+
**cli**: Verify exception catching via centralized `executeTrail`.
|
|
746
|
+
|
|
747
|
+
**testing**: Cross-context awareness improvements.
|
|
748
|
+
|
|
749
|
+
**warden**: Refactor rules as composable trails with examples.
|
|
750
|
+
|
|
751
|
+
**schema**: Error code and empty body fixes.
|
|
752
|
+
|
|
753
|
+
### Patch Changes
|
|
754
|
+
|
|
755
|
+
- Updated dependencies
|
|
756
|
+
- @ontrails/core@1.0.0-beta.9
|
|
757
|
+
|
|
758
|
+
## 1.0.0-beta.8
|
|
759
|
+
|
|
760
|
+
### Patch Changes
|
|
761
|
+
|
|
762
|
+
- Restructure HTTP package and fix Codex review findings.
|
|
763
|
+
|
|
764
|
+
**http**: BREAKING — `trailhead()` moved to `@ontrails/http/hono` subpath. Hono is now a peer dependency. `buildHttpRoutes()` is framework-agnostic. Fixed: malformed JSON → 400, execute() never throws, query parsing preserves raw strings and supports arrays.
|
|
765
|
+
|
|
766
|
+
**schema**: OpenAPI 200 response wraps in `{ data }` envelope matching wire format. Always includes 400 ValidationError with error schema. basePath trailing slash normalized.
|
|
767
|
+
|
|
768
|
+
- @ontrails/core@1.0.0-beta.8
|
|
769
|
+
|
|
770
|
+
## 1.0.0-beta.7
|
|
771
|
+
|
|
772
|
+
### Minor Changes
|
|
773
|
+
|
|
774
|
+
- HTTP trailhead and OpenAPI generation.
|
|
775
|
+
|
|
776
|
+
**http**: New `@ontrails/http` package — Hono-based HTTP connector. `trailhead()` derives routes from trail IDs, maps intent to HTTP verbs (read→GET, write→POST, destroy→DELETE), and maps error taxonomy to status codes. Returns the Hono instance.
|
|
777
|
+
|
|
778
|
+
**schema**: Add `generateOpenApiSpec(topo)` — generates a complete OpenAPI 3.1 spec from the topo. Each trail becomes an operation with path, method, schemas, and error responses derived from the contract.
|
|
779
|
+
|
|
780
|
+
**trails**: `trails survey --openapi` outputs the OpenAPI spec for any Trails app.
|
|
781
|
+
|
|
782
|
+
### Patch Changes
|
|
783
|
+
|
|
784
|
+
- @ontrails/core@1.0.0-beta.7
|
|
785
|
+
|
|
786
|
+
## 1.0.0-beta.6
|
|
787
|
+
|
|
788
|
+
### Patch Changes
|
|
789
|
+
|
|
790
|
+
- Updated dependencies
|
|
791
|
+
- @ontrails/core@1.0.0-beta.6
|
|
792
|
+
|
|
793
|
+
## 1.0.0-beta.5
|
|
794
|
+
|
|
795
|
+
### Patch Changes
|
|
796
|
+
|
|
797
|
+
- Updated dependencies
|
|
798
|
+
- @ontrails/core@1.0.0-beta.5
|
|
799
|
+
|
|
800
|
+
## 1.0.0-beta.4
|
|
801
|
+
|
|
802
|
+
### Major Changes
|
|
803
|
+
|
|
804
|
+
- API simplification: unified trail model, intent enum, run, metadata.
|
|
805
|
+
|
|
806
|
+
**BREAKING CHANGES:**
|
|
807
|
+
|
|
808
|
+
- `hike()` removed — use `trail()` with optional `crosses: [...]` field
|
|
809
|
+
- `follows` renamed to `crosses` (matching `ctx.cross()`)
|
|
810
|
+
- `topo.hikes` removed — single `topo.trails` map
|
|
811
|
+
- `kind: 'hike'` removed — everything is `kind: 'trail'`
|
|
812
|
+
- `readOnly`/`destructive` booleans replaced by `intent: 'read' | 'write' | 'destroy'`
|
|
813
|
+
- `implementation` field renamed to `run`
|
|
814
|
+
- `markers` field renamed to `metadata`
|
|
815
|
+
- `testHike` renamed to `testCrosses`, `HikeScenario` to `CrossScenario`
|
|
816
|
+
- `trailhead()` now returns the trailhead handle (`Command` for CLI, `Server` for MCP)
|
|
817
|
+
|
|
818
|
+
### Patch Changes
|
|
819
|
+
|
|
820
|
+
- Updated dependencies
|
|
821
|
+
- @ontrails/core@1.0.0-beta.4
|
|
822
|
+
|
|
823
|
+
## 1.0.0-beta.3
|
|
824
|
+
|
|
825
|
+
### Patch Changes
|
|
826
|
+
|
|
827
|
+
- Updated dependencies
|
|
828
|
+
- @ontrails/core@1.0.0-beta.3
|
|
829
|
+
|
|
830
|
+
## 1.0.0-beta.2
|
|
831
|
+
|
|
832
|
+
### Patch Changes
|
|
833
|
+
|
|
834
|
+
- Fix workspace dependency resolution in published packages. Now using bun publish
|
|
835
|
+
which correctly replaces workspace:^ with actual version numbers.
|
|
836
|
+
- Updated dependencies
|
|
837
|
+
- @ontrails/core@1.0.0-beta.2
|
|
838
|
+
|
|
839
|
+
## 1.0.0-beta.1
|
|
840
|
+
|
|
841
|
+
### Patch Changes
|
|
842
|
+
|
|
843
|
+
- Fix two blocking bugs from real-world migration:
|
|
844
|
+
- Published packages now resolve correctly (workspace:^ instead of workspace:\*)
|
|
845
|
+
- Error forwarding works across different success types (Err no longer carries phantom T)
|
|
846
|
+
- Updated dependencies
|
|
847
|
+
- @ontrails/core@1.0.0-beta.1
|
|
848
|
+
|
|
849
|
+
## 1.0.0-beta.0
|
|
850
|
+
|
|
851
|
+
### Minor Changes
|
|
852
|
+
|
|
853
|
+
- Initial v1 beta release of the Trails framework.
|
|
854
|
+
|
|
855
|
+
- **@ontrails/core** — Result type, error taxonomy, trail/hike/event/topo, validateTopo, validateInput/Output, deriveFields, patterns, redaction, branded types, resilience
|
|
856
|
+
- **@ontrails/cli** — CLI trailhead connector, Commander integration, flag derivation, gates
|
|
857
|
+
- **@ontrails/mcp** — MCP trailhead connector, tool generation, annotations, progress bridge
|
|
858
|
+
- **@ontrails/logging** — Structured logging, sinks, formatters, LogTape connector
|
|
859
|
+
- **@ontrails/testing** — testAll, testExamples, testTrail, testHike, testContracts, testDetours, trailhead harnesses
|
|
860
|
+
- **@ontrails/warden** — AST-based code convention rules via oxc-parser, drift detection, CI formatters
|
|
861
|
+
- **@ontrails/schema** — Trailhead map generation, hashing, semantic diffing
|
|
862
|
+
|
|
863
|
+
### Patch Changes
|
|
864
|
+
|
|
865
|
+
- Updated dependencies
|
|
866
|
+
- @ontrails/core@1.0.0-beta.0
|