Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
fca4f80
🚧 Classify one entry's Push and pull-request history together (#181, …
taras Oct 17, 2026
f3ee2f0
🚧 Open one entry's pull request from the head it published (#181, 5/6)
taras Oct 17, 2026
dfb32b6
🚧 Retain one entry's evidence reads behind the current ceiling (#181,…
taras Oct 17, 2026
e844901
🚧 Hold a saved read to its owner, and an orphan to its own name (#181…
taras Oct 17, 2026
3e6e1fc
🚧 Prove the entry's pull request opens once, from what it published (…
taras Oct 17, 2026
de06f7d
🚧 Cut the entry mid-upsert and hold the outcome to the request (#181,…
taras Oct 17, 2026
4ee587d
🚧 Give each evidence read its own bridge, behind the live ceiling (#1…
taras Oct 17, 2026
07d69b0
🚧 Declare four identities per entry, and reads without a checkout (#1…
taras Oct 17, 2026
ad91d20
🚧 Drive the whole journey on a real terminal, from source (#181, 5/6)
taras Oct 17, 2026
3057429
📝 Describe retained pull requests and the ceiling their reads stay un…
taras Oct 17, 2026
268bbb4
✨ Retain one REPL entry's pull requests and the evidence it read (#18…
taras Oct 17, 2026
a741be9
🚧 Join a read's attempt before acknowledging it, and name the checkou…
taras Oct 18, 2026
1c1e68b
✅ Keep a read's type where its records are, so both portable runtimes…
taras Oct 18, 2026
c943553
✅ Report a read's outcome instead of raising it past its own cleanup …
taras Oct 18, 2026
79a9e6a
♻️ Share pull request bodies across execution hosts (#181)
taras Oct 19, 2026
2f975b0
🐛 Hold each saved pull-request place to its own Repository identity (…
taras Oct 19, 2026
1aae56a
♻️ Retain a pull-request read once, for every host that retains one (…
taras Oct 19, 2026
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
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,9 @@ jobs:
- name: A REPL entry's publications across the compiled binary
run: deno test --allow-all --frozen scripts/tests/repl-push-compiled.test.ts

- name: A REPL entry's pull requests across the compiled binary
run: deno test --allow-all --frozen scripts/tests/repl-pull-request-compiled.test.ts

# Each package's `components.md` is a packaged asset on the same footing,
# and the long-form documentation is the only thing that reports whether
# one shipped — a binary missing them still lists every component and
Expand Down
217 changes: 193 additions & 24 deletions architecture.md

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions packages/cli/tests/repl-issues.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1502,6 +1502,10 @@ describe("how a REPL entry gets its issues", () => {
expect([...(built.components ?? [])].map((component) => component.name).sort()).toEqual([
"Git.Push",
"Issue",
"PullRequest",
"PullRequest.Checks",
"PullRequest.Comments",
"PullRequest.Reviews",
]);
});

Expand Down
49 changes: 49 additions & 0 deletions packages/cli/tests/repl-pull-request-pty.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* The whole public behavior of a pull request and its evidence, on a real
* terminal, from source (#181 V1, V9).
*
* Every other row of this feature's evidence installs its own host, which is
* what makes those rows portable and deterministic. None of them can show the
* thing a person actually does: type an entry that publishes a branch and opens
* its pull request, walk away at a question, let the reviews change, and reopen
* the printed location.
*
* ## One suite, two behaviors, by runtime
*
* Deno is where the entry capability exists, so the Deno branch runs the
* journey. Node and Bun assemble none — the Deno adapter's module graph reaches
* `node:sqlite`, which Bun has not — so their branch runs the other behavior
* that matters, which is that `<PullRequest>` and its reads there refuse before
* contacting anything. Neither branch silently skips its own behavior.
*
* The journey itself is `support/repl-pull-request-journey.ts`, shared with the
* compiled row so the two cannot drift.
*/

import { describe, it } from "@executablemd/test-support/bdd";
import { cliRuntime, cliShellCommand } from "@executablemd/test-support/launch";
import type { Operation } from "effection";
import {
replPullRequestJourney,
replUnsupportedPullRequest,
} from "./support/repl-pull-request-journey.ts";

const JOURNEY = cliRuntime() === "deno";

/** How this suite invokes `xmd`: the production entrypoint for this runtime. */
function sourceCommand(args: readonly string[]): string {
return cliShellCommand([...args]);
}

describe("a REPL entry's pull request, across leaving and coming back", () => {
it(
JOURNEY
? "V1: opens once, restores its identity and saved evidence, and reads again on answering"
: "V9: this runtime refuses <PullRequest> and its reads before contacting anything",
function* (): Operation<void> {
yield* JOURNEY
? replPullRequestJourney(sourceCommand)
: replUnsupportedPullRequest(sourceCommand);
},
);
});
Loading
Loading