Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ sqlx = { version = "0.9", features = ["runtime-tokio", "tls-rustls", "postgres",
thiserror = "2"
tokio = "1"
toml = "1.1"
nightfire = { git = "https://github.com/inflatable-cookie/nightfire.git", tag = "v0.2.0" }

# Image processing
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "gif", "webp"] }
Expand Down
6 changes: 6 additions & 0 deletions PAPERCUTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ they hit a solvable hurdle; they do not stop the current task to fix one.

## Open

### [ ] Nightfire TS pin contract uses a Bun-incompatible annotated Git tag — 2026-09-18
- Friction: Contract `023` requires `git+ssh://git@github.com/inflatable-cookie/nightfire.git#v0.2.0`, but Bun 1.3.14 reports no matching commit even though `git ls-remote --tags` shows the annotated tag and peeled commit; npm package `@inflatable-cookie/nightfire@0.2.0` is available.
- Impact: following the documented TypeScript pin blocks lock regeneration for the Underlay compatibility adoption.
- Possible fix: align Contract `023` with the released npm dependency form or document a Bun-compatible immutable Git syntax and prove it in package installation QA.
- Surface: Nightfire TypeScript distribution contract / Bun Git dependency resolution

### [ ] Docs QA invokes deprecated direct Effigy docs command — 2026-09-02
- Friction: `effigy qa:docs` and `effigy qa:northstar` pass but repeatedly warn
that direct command `docs` is deprecated in favor of `effigy repo docs`.
Expand Down
3 changes: 3 additions & 0 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

53 changes: 20 additions & 33 deletions docs/contracts/070-nightfire-and-migration-systems.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,11 @@ top of this shared protocol and are owned by consuming apps.
Primary:

- standalone repository `github.com/inflatable-cookie/nightfire`, root npm
package `@inflatable-cookie/nightfire`, and Rust crate `nightfire` after Card
278 extraction
- the current [`rust/crates/underlay-nightfire/`](../../rust/crates/underlay-nightfire/)
tree only until Card 278 is accepted and Card 274 replaces it with a
compatibility facade
- the current [`ts/src/nightfire/`](../../ts/src/nightfire/) tree only until
Card 274 replaces it with compatibility re-exports
package `@inflatable-cookie/nightfire`, and Rust crate `nightfire`
- [`rust/crates/underlay-nightfire/src/lib.rs`](../../rust/crates/underlay-nightfire/src/lib.rs)
for the historical Rust crate-name facade
- [`ts/src/nightfire/`](../../ts/src/nightfire/) for historical TypeScript
subpath facades and the Underlay-owned media-picker context/editor adapter
- [`rust/crates/underlay-migration-core/src/lib.rs`](../../rust/crates/underlay-migration-core/src/lib.rs)
- [`rust/crates/underlay-migration-core/src/pipeline.rs`](../../rust/crates/underlay-migration-core/src/pipeline.rs)
- [`rust/crates/underlay-migration-core/src/plugin.rs`](../../rust/crates/underlay-migration-core/src/plugin.rs)
Expand All @@ -44,9 +42,9 @@ Supporting:
- [`050-media-library-and-usage.md`](./050-media-library-and-usage.md)
- [`docs/architecture/010-package-map.md`](../architecture/010-package-map.md)

After Card 278, the standalone Nightfire repository owns both the Rust wire
model and TypeScript/Svelte implementation. Their shared conformance fixtures
must agree. Underlay compatibility facades never become another authority.
The standalone Nightfire repository owns both the Rust wire model and
TypeScript/Svelte implementation. Their shared conformance fixtures must agree.
Underlay compatibility facades never become another authority.

## Contract Goal

Expand All @@ -68,8 +66,7 @@ The goal is shared protocol and discipline, not a universal CMS.
### Nightfire durable value protocol

Standalone Rust crate `nightfire` owns the canonical structured-content value
model. Until Card 274, Underlay's implementation is the migration source; after
that card, `underlay-nightfire` is only a compatibility facade.
model. `underlay-nightfire` is only a compatibility facade.

Core pieces:

Expand Down Expand Up @@ -224,11 +221,8 @@ Rules:
### Extraction and compatibility rules

- move the implementation; do not maintain long-lived copies in both repos
- a bounded overlap is allowed only between the first standalone release and
the Underlay compatibility adoption, with no semantic changes during that
window
- Underlay then depends on the released Nightfire tag, deletes its internal
Rust and TS implementations, and re-exports the old crate name and subpaths
- Underlay depends on the released Nightfire tag, contains no generic Rust or
TS implementation copy, and re-exports the old crate name and subpaths
- new consumers import `nightfire` and `@inflatable-cookie/nightfire/*`
- Froyo must prove its installed and bundled dependency graph contains no
`@inflatable-cookie/underlay` edge before Bovine Desktop removes Underlay
Expand Down Expand Up @@ -427,16 +421,9 @@ but the migration discipline itself is defined here.

## Known Drift To Assess Later

- `ts/src/nightfire/types.ts` reduces the durable Nightfire protocol to a very
weak `{ schema; block?; blocks? }` shape and does not encode the stronger
Rust-side invariants
- the TS Nightfire surface mixes durable protocol, runtime shell, and
convenience registrations more loosely than the Rust side
- `validator-registry.ts` only offers block-level transformation hooks and does
not model the fuller strategy/cardinality validation contract from Rust
- some retained Nightfire helpers such as markdown/media registrations and
slash-command shell may still deserve a later ownership challenge during the
runtime and patterns contract passes
- Generic protocol and runtime drift is assessed in the standalone Nightfire
repository. Underlay assessment stays limited to its media traversal,
validation-to-HTTP adapter, picker context, and compatibility facades.

Resolved assessment:

Expand All @@ -446,16 +433,16 @@ Resolved assessment:

## Assessment Questions

- does the TS Nightfire type and runtime surface actually preserve the durable
protocol goals from Rust, or has it drifted into a weak compatibility shell
- is the current split between Nightfire core, media-linked content handling,
and retained workflow helpers still the right ownership boundary
- do Underlay's TypeScript facades remain re-exports of the released Nightfire
package, apart from the explicit media-picker context/editor adapter
- is the current split between Nightfire core and Underlay media-linked content
handling still the right ownership boundary
- does migration-core still need every retained subsystem it exports, or has
some of that surface become too broad for a shared foundation crate
- do the decision-memory, audit, and replay artifacts actually fulfil the goal
of deterministic, reviewable migration runs in practice

## Next Task

The `g04` contract-authorship lane is complete; evidence:
[../roadmaps/archive/g04.md](../roadmaps/archive/g04.md).
Release the Underlay compatibility adoption before Acowtancy removes its
remaining `underlay-media` and `underlay-validation` bridges.
29 changes: 2 additions & 27 deletions docs/contracts/typescript-quality-profile.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@
"ts/tests/fixtures/env-authority/fixture-only-reader/tests/fixtures/sample.ts",
"ts/tests/fixtures/env-authority/process-env-reader/apps/admin/src/hooks.server.ts",
"ts/tests/fixtures/env-authority/test-only-reader/apps/admin/src/hooks.server.test.ts",
"ts/tests/nightfire/summary-transform/fixtures.ts",
"ts/tests/patterns/forms/fixtures.ts",
"ts/tests/setup/sveltekit-environment.mock.ts",
"ts/tests/setup/sveltekit-navigation.mock.ts",
Expand Down Expand Up @@ -120,32 +119,16 @@
"ts/src/nightfire/block-ids.ts",
"ts/src/nightfire/block-registration.ts",
"ts/src/nightfire/block-versions.ts",
"ts/src/nightfire/editor-registrations.ts",
"ts/src/nightfire/editor-registry.ts",
"ts/src/nightfire/editor.ts",
"ts/src/nightfire/editor/block-list.ts",
"ts/src/nightfire/editor/field-lifecycle.ts",
"ts/src/nightfire/editor/grouped-options.ts",
"ts/src/nightfire/editor/poodle-block-editor.ts",
"ts/src/nightfire/editor/schema-resolution.ts",
"ts/src/nightfire/editor/strategy-normalisation.ts",
"ts/src/nightfire/editor/summary-transform.ts",
"ts/src/nightfire/editor/value-updates.ts",
"ts/src/nightfire/index.ts",
"ts/src/nightfire/markdown.ts",
"ts/src/nightfire/markup/editor.ts",
"ts/src/nightfire/markup/markdown-editor-context.ts",
"ts/src/nightfire/markup/markdown-preview.ts",
"ts/src/nightfire/markup/render.ts",
"ts/src/nightfire/media-locator.ts",
"ts/src/nightfire/media/context.ts",
"ts/src/nightfire/media/editor.ts",
"ts/src/nightfire/render-registrations.ts",
"ts/src/nightfire/render-registry.ts",
"ts/src/nightfire/renderer.ts",
"ts/src/nightfire/slash-commands.ts",
"ts/src/nightfire/strategies.ts",
"ts/src/nightfire/types.ts",
"ts/src/nightfire/utils.ts",
"ts/src/nightfire/validation.ts",
"ts/src/nightfire/validator-registry.ts",
Expand Down Expand Up @@ -356,33 +339,25 @@
"ts/tests/components/markdown-editor-preview-sanitization.component.test.ts",
"ts/tests/components/nightfire-editor-defaults.component.test.ts",
"ts/tests/components/nightfire-editor-slash-commands.component.test.ts",
"ts/tests/components/nightfire-facades.component.test.ts",
"ts/tests/components/nightfire-slash-command-palette.component.test.ts",
"ts/tests/components/package-runtime-compatibility.component.test.ts",
"ts/tests/components/package-templates-compatibility.component.test.ts",
"ts/tests/nightfire/block-registration.test.ts",
"ts/tests/nightfire/editor-registry.test.ts",
"ts/tests/nightfire/field-lifecycle.test.ts",
"ts/tests/nightfire/grouped-options.test.ts",
"ts/tests/nightfire/facades.test.ts",
"ts/tests/nightfire/markdown-preview.test.ts",
"ts/tests/nightfire/media-context.test.ts",
"ts/tests/nightfire/media-locator.test.ts",
"ts/tests/nightfire/render-registry.test.ts",
"ts/tests/nightfire/schema-resolution.test.ts",
"ts/tests/nightfire/slash-commands.test.ts",
"ts/tests/nightfire/strategies-ssr-guard.test.ts",
"ts/tests/nightfire/strategies.test.ts",
"ts/tests/nightfire/strategy-normalisation.test.ts",
"ts/tests/nightfire/summary-transform/fixtures.ts",
"ts/tests/nightfire/summary-transform/malformed.test.ts",
"ts/tests/nightfire/summary-transform/pages.test.ts",
"ts/tests/nightfire/summary-transform/slider.test.ts",
"ts/tests/nightfire/utils/block.test.ts",
"ts/tests/nightfire/utils/empty.test.ts",
"ts/tests/nightfire/utils/form-data.test.ts",
"ts/tests/nightfire/utils/value.test.ts",
"ts/tests/nightfire/validation.test.ts",
"ts/tests/nightfire/validator-registry.test.ts",
"ts/tests/nightfire/value-updates.test.ts",
"ts/tests/package-compatibility.test.ts",
"ts/tests/patterns/account-types.test.ts",
"ts/tests/patterns/ai-routing-ops.test.ts",
Expand Down
Loading
Loading