Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
10c6496
Make package.json the suggestion and the depot lock the authority.
Aug 13, 2026
2ae79fd
Make /start a terminal splash: ASCII DECK, Deckbook as the selected d…
Aug 13, 2026
1ae9c08
Finish the package.json/lock split: identity off pack maps, Timeline …
Aug 13, 2026
1c8da21
feat: add package-native branch and review workflow
Aug 20, 2026
1d42ebb
refactor: unify branch and fork affordances
Aug 20, 2026
4e1676a
feat: make fork reviews merge upstream
Aug 20, 2026
add753b
fix: replace prompt-based repository actions
Aug 20, 2026
ade89ec
feat: use a real fulfillment review fixture
Aug 20, 2026
dd0765f
fix: explain missing proposal merge bases
Aug 20, 2026
375e0b1
feat: checkpoint Deck collaboration and Boxel backport
Aug 21, 2026
d234c4a
feat: cut Deck collaboration over to RRI checkpoints
Aug 21, 2026
a4c0b90
feat: replay collaboration fixture through Deck
Aug 21, 2026
1d82395
feat: replay Version and autosave history
Aug 21, 2026
a4f93df
fix: avoid empty Track diffs
Aug 21, 2026
c206c23
feat: run libraries through their consumers
Aug 21, 2026
c265cdc
fix: run Deck Hub on one public port
Aug 22, 2026
bd48f33
fix: resolve store-only comparison targets
Aug 22, 2026
632e4b7
feat: make reviews an operational queue
Aug 22, 2026
6f335bb
test collaboration workflow end to end
Aug 22, 2026
45516b4
Add CI gates for Deck collaboration
Aug 22, 2026
df2056b
Reuse built deckd in collaboration CI
Aug 22, 2026
9ac31fc
Rewrite README for Repository collaboration
Aug 22, 2026
b5d4348
Stabilize collaboration replay batching
Aug 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
87 changes: 87 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: CI

on:
pull_request:
push:
branches:
- main

permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
CI: true

jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v6
with:
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm lint

package-tests:
name: Package tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v6
with:
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- name: Test workspace packages
env:
DECKD_URL: http://127.0.0.1:1
run: pnpm run --filter './packages/**' --if-present -r test

deckd-build:
name: Rust deckd build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Show Rust toolchain
run: rustc --version && cargo --version
- name: Build deckd
run: cargo build --locked --manifest-path packages/deckd/Cargo.toml
- name: Preserve deckd for collaboration replay
uses: actions/upload-artifact@v4
with:
name: deckd-linux
path: packages/deckd/target/debug/deckd
if-no-files-found: error
retention-days: 1

collaboration:
name: Collaboration replay
needs: deckd-build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v6
with:
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- uses: actions/download-artifact@v4
with:
name: deckd-linux
path: .ci/deckd
- name: Replay collaboration through the built deckd
env:
DECKD_BIN: .ci/deckd/deckd
run: |
chmod +x "$DECKD_BIN"
pnpm test:collaboration
7 changes: 4 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,16 @@
.pnpm-store/
.deck/
# A depot carries its own machinery inside itself, and none of it is source:
# `.deck/` is the store, `.jj/` is the seal log, and jj colocates a backing
# `.git` beside it — which git otherwise mistakes for an embedded repository
# and refuses to descend into.
# `.deck/` contains the store, Repository refs, indexes, and History. deckd's
# jj backend also colocates machine-generated `.jj/` and `.git/` directories,
# which the outer git repository must ignore.
.jj/
examples/*/depot/.git/
examples/*/depot/app/viewer/build.json
examples/*/depot/app/viewer/states.json
examples/*/depot/app/library/shelf.json
# `deck fork` WRITES these into the depot: they are demo output, not source.
examples/collaboration/depot/
examples/contribute-to-codelist/depot/ana/
examples/contribute-to-codelist/depot/kim/
examples/two-agents/depot/agent-a/
Expand Down
4 changes: 2 additions & 2 deletions CLI.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ That scaffolds a depot, serves it, and prints a URL. Open it, edit `app.js`,
reload. Then the loop that runs for the rest of the day:

```bash
deck serve --root ./work --history auto
deck serve --root ./work --history deckd
```

`--root` is a directory *of* depots: every child directory becomes one,
Expand All @@ -66,7 +66,7 @@ every save:
seal, no noise. Touching a file is not a change.
3. **Auto-publish** `<base>-dev.N`, tagged `dev`. Immutable from that
instant.
4. **Seal it as a Step** (when `jj`, historyd, or **deckd** is attached) —
4. **Seal it as a Step** (when **deckd** is attached) —
including the saves that did *not* publish, so the states between versions
exist too. With `DECKD_URL`, deckd’s FS watch owns seals; Hub still
publishes + HMR.
Expand Down
16 changes: 8 additions & 8 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ from this repository instead.
| --- | --- | --- |
| **Node** | ≥ 22 | required — the CLI is TypeScript with no build step, and relies on Node's native type stripping |
| **pnpm** | 11 | required to install the workspace's dev dependencies (`packageManager` pins the exact version) |
| **jj** | any recent | optional — Timeline via the jj CLI when no daemon is running |
| **Rust / cargo** | stable | optional — only to build `packages/deckd`, the in-tree Timeline daemon |
| **jj** | any recent | optional — History via the jj CLI when no daemon is running |
| **Rust / cargo** | stable | optional — only to build `packages/deckd`, the in-tree History daemon |

Verified on Node v24.17.0, pnpm 11.0.9, jj 0.43.0.

Expand Down Expand Up @@ -98,24 +98,24 @@ pnpm test && pnpm lint
Expect 189 core, 22 history, 79 server, 4 conformance, 13 CLI — all
passing — and no lint or type errors.

## Check whether you got a Timeline
## Check whether every-save History is active

```bash
deck hello ./playground
```

The banner it prints includes a line naming the history backend it attached
to, or the reason it could not. `jj` present means a Timeline and a Step per
save; anything else means Versions only, which is still every settled save as an
immutable version.
to, or the reason it could not. An attached deckd means every-save History and
a Step per save; anything else means Versions only, which still keeps every
settled save as an immutable version.

## Environment

| Variable | Default | What it does |
| --- | --- | --- |
| `DECK_KEYRING` | `~/.deck/keys` | where `deck keygen` writes private keys. They never leave the machine |
| `JJ_BIN` | `jj` | which `jj` binary to seal with when no daemon URL is set |
| `DECKD_URL` | — | point the Timeline at in-tree **deckd** (`packages/deckd`, default listen `http://127.0.0.1:8787`). Preferred over `DECK_HISTORYD_URL` when both are set |
| `DECKD_URL` | — | point the History at in-tree **deckd** (`packages/deckd`, default listen `http://127.0.0.1:8787`). Preferred over `DECK_HISTORYD_URL` when both are set |
| `DECK_HISTORYD_URL` | — | legacy alias for an external historyd; same HTTP contract as deckd |

To run Hub with deckd from this clone:
Expand All @@ -136,7 +136,7 @@ and [`docs/deck-daemon.md`](docs/deck-daemon.md).
| `Cannot find package '@cardstack/deck'` | `pnpm install` has not run, or you are running a copy of `packages/cli` from outside the workspace |
| `EADDRINUSE` from `deck serve` | the port is taken. `deck hello` walks forward up to ten ports on its own; `serve` does not, because a server you asked to be on 8788 should not quietly be somewhere else |
| `deck: --realm is now --depot` | an old flag. It still works and will keep working; the message is a note, not a failure |
| history reports Versions only | `jj` is not on PATH, and `DECKD_URL` / `DECK_HISTORYD_URL` point at nothing. The live loop is unaffected |
| history reports Versions only | deckd is not running (`DECKD_URL` / `DECK_HISTORYD_URL` point at nothing). The live loop is unaffected |

## Uninstall

Expand Down
Loading
Loading