Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
1e58f68
feat(pipeline): add the fact-record pipeline core
Menci Aug 16, 2026
31d987f
fix(pipeline): keep what a run owns, and record what it did when it f…
Menci Aug 16, 2026
027889e
fix(pipeline): give a stage's answer its own slice
Menci Aug 16, 2026
367ff25
test(pipeline): settle what a handoff across a package boundary needs
Menci Aug 16, 2026
b0f48e3
fix(pipeline): claim ownership instead of detecting it
Menci Aug 16, 2026
6e3bb38
feat(pipeline): make what a run started a fact it waits for
Menci Aug 16, 2026
bcf07cf
fix(pipeline): assert the fields a log line carries, and stop citing …
Menci Aug 16, 2026
b382d56
fix(pipeline): stop asserting what the host says about disposing a ge…
Menci Aug 17, 2026
a28a359
refactor: spell every protocol name in full everywhere
Menci Aug 18, 2026
9a44e0c
refactor: spell the protocol out in the remaining context-decided names
Menci Aug 18, 2026
35ec2b5
style: reorder imports the renamed specifiers moved
Menci Aug 18, 2026
a8dc760
refactor: spell the protocol out in the stored endpoint capability map
Menci Aug 18, 2026
1b5c3a7
fix: restore the names the mechanical pass should not have touched
Menci Aug 18, 2026
2658eca
refactor(web): name the vendor in dashboard protocol copy
Menci Aug 18, 2026
5487f38
refactor(web): qualify the protocol in the WinUI gallery samples
Menci Aug 18, 2026
a52675d
refactor(tools): follow the endpoint capability map rename
Menci Aug 18, 2026
22ed786
test(control-plane): pin that a pre-rename backup is refused by name
Menci Aug 18, 2026
654352d
refactor: finish the prose sweep for Gemini and Chat
Menci Aug 18, 2026
191011f
refactor: close the last abbreviated protocol references in prose
Menci Aug 18, 2026
45fd224
Merge branch 'rename-protocols' into pr1-core
Menci Aug 18, 2026
e8eb714
feat(pipeline): give a recorded log line the shape a logger reads
Menci Aug 18, 2026
5d29e80
refactor: spell the five non-chat protocol names in full
Menci Aug 18, 2026
72c88d2
Merge branch 'rename-protocols' into pr1-core
Menci Aug 18, 2026
42bcff8
refactor: spell the protocol out in the four flag ids that abbreviate…
Menci Aug 19, 2026
93fd070
Merge branch 'rename-protocols' into pr1-core
Menci Aug 19, 2026
be3fa12
refactor: spell the protocol in the last two target_api fixtures
Menci Aug 19, 2026
fbb4dbb
Merge branch 'rename-protocols' into pr1-core
Menci Aug 19, 2026
e160505
refactor(pipeline): keep the encoder factory inside the module that u…
Menci Aug 19, 2026
4ee1ce2
refactor: point the Copilot audit skill at the directories that exist
Menci Aug 19, 2026
5b56488
Merge branch 'rename-protocols' into pr1-core
Menci Aug 19, 2026
4759f0b
refactor: rewrite both stored protocol-name surfaces in one migration
Menci Aug 19, 2026
84ca56a
Merge branch 'rename-protocols' into pr1-core
Menci Aug 19, 2026
21a5fba
refactor: put the protocol name first where a qualifier prefixed it
Menci Aug 19, 2026
6ea8a1f
Merge branch 'rename-protocols' into pr1-core
Menci Aug 19, 2026
f6fa0be
Merge branch 'main' into rename-protocols
Menci Aug 19, 2026
25935a9
Merge branch 'rename-protocols' into pr1-core
Menci Aug 19, 2026
26375b3
Merge branch 'main' into rename-protocols
Menci Aug 19, 2026
02027b7
Merge branch 'rename-protocols' into pr1-core
Menci Aug 19, 2026
18c2fc3
feat(platform): add the LogStream a live dump reader attaches to
Menci Aug 19, 2026
a72515f
test(tools): give the CLI test a timeout its three subprocesses fit in
Menci Aug 19, 2026
7b10608
Merge branch 'rename-protocols' into pr1-core
Menci Aug 19, 2026
9cfbd45
Merge remote-tracking branch 'origin/main' into pr1-core
Menci Aug 20, 2026
938fdd2
Merge main into feat/pipeline-core
Menci Sep 30, 2026
2ace765
Merge remote-tracking branch 'origin/main' into feat/pipeline-core
Menci Sep 30, 2026
7ce25bc
test: wait for the active reset-card confirmation
Menci Sep 30, 2026
c59cfbd
test: keep the first confirmation reference constant
Menci Sep 30, 2026
9090a64
test: model reset-card confirmation as pointer interaction
Menci Sep 30, 2026
884de5d
test: wait for reset-card confirmation to finish exiting
Menci Sep 30, 2026
93db97b
test: isolate redemption state from browser modal layout
Menci Sep 30, 2026
c2fb7d2
Merge remote-tracking branch 'origin/main' into feat/pipeline-core
Menci Sep 30, 2026
2c7bda2
fix(pipeline): enforce fact lifetimes and preserve diagnostic state
Menci Sep 30, 2026
bb4c401
refactor(pipeline): type narrowed handoff targets
Menci Sep 30, 2026
ed91797
refactor(pipeline): compose release actions on one resource
Menci Sep 30, 2026
d22c9e9
feat(pipeline): read complete shared diagnostic values
Menci Sep 30, 2026
6a7a51c
feat(platform): keep transient run streams alive through active work
Menci Sep 30, 2026
3eb9043
fix(pipeline): clean resources on invalid initial facts
Menci Sep 30, 2026
ec301d7
refactor(pipeline): retain encoded identities weakly
Menci Sep 30, 2026
ad97572
fix(platform): pull Cloudflare log bytes with consumer demand
Menci Sep 30, 2026
2efb5c6
refactor(pipeline): deliver events without retaining a second backlog
Menci Sep 30, 2026
803ce61
feat(platform): publish streamed files atomically
Menci Sep 30, 2026
0f18cb0
feat(pipeline): await recording backpressure at event producers
Menci Sep 30, 2026
7763c45
test(platform): scan streamed bytes without a giant assertion graph
Menci Sep 30, 2026
7610967
fix(pipeline): distinguish failed stages and isolate error contexts
Menci Sep 30, 2026
03170d8
fix(pipeline): associate drain failures with their owning run
Menci Sep 30, 2026
503c6bf
fix(platform-node): collect interrupted streamed uploads by key
Menci Sep 30, 2026
84c71d8
fix(pipeline): release completed encoder folding state
Menci Sep 30, 2026
8a8a00a
test(pipeline): pin nested execution and immutable logging contracts
Menci Sep 30, 2026
80be696
test(platform-node): observe peer closure after socket abort
Menci Sep 30, 2026
7c1585d
test(http): wait for ClientHello before handshake abort
Menci Sep 30, 2026
4ae5e53
fix(pipeline): retain context for primitive rejection reasons
Menci Oct 1, 2026
42ff5fa
fix(platform-node): reserve staging namespace across path spellings
Menci Oct 1, 2026
3c794a7
refactor(platform): retain completed-byte file storage
Menci Oct 1, 2026
e544796
refactor: extract portable run recording into a dump package
Menci Oct 1, 2026
41d0f20
fix: enforce dump package dependency direction
Menci Oct 1, 2026
61ab224
Merge remote-tracking branch 'origin/main' into feat/pipeline-core
Menci Nov 14, 2026
fe12088
chore: keep the pipeline core free of unrelated changes
Menci Nov 14, 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
4 changes: 2 additions & 2 deletions .agents/skills/deploy-to-cloudflare/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Run Wrangler through `pnpm wrangler` and preserve its live terminal output. Read
4. Run `pnpm jiti scripts/require-wrangler-config.ts`.
5. Run `pnpm wrangler deployments status --json`. Continue only when Wrangler explicitly reports that the configured Worker does not exist. Stop when it reports an existing deployment or any authentication, network, account, or ambiguous failure.
6. Run `pnpm run build:web`, because the shared Wrangler configuration includes `apps/web/dist/client` as its Static Assets directory.
7. Publish the bootstrap probe through a reviewed command file, retaining the final Worker name, bindings, Durable Object migration, assets, cron, and routes. This first version installs the configured `new_sqlite_classes` migration:
7. Publish the bootstrap probe through a reviewed command file, retaining the final Worker name, bindings, Durable Object migration, assets, cron, and routes. This first version installs the configured Durable Object class migrations:

```bash
pnpm wrangler deploy .agents/skills/deploy-to-cloudflare/assets/binding-probe.js \
Expand All @@ -52,7 +52,7 @@ Run Wrangler through `pnpm wrangler` and preserve its live terminal output. Read
<DEPLOYED_ORIGIN>/api/deployment-probe
```

10. Require HTTP 200, the exact body `Hello World`, and `x-floway-binding-probe: DB,FILES,IMAGES,KV,EXECUTION_DO`. The probe performs a D1 query, an R2 read, a KV read, an Images inspection, and a Durable Object request. Stop before migrations when any check fails.
10. Require HTTP 200, the exact body `Hello World`, and `x-floway-binding-probe: DB,FILES,IMAGES,KV,EXECUTION_DO,LOG_STREAM_DO`. The probe performs a D1 query, an R2 read, a KV read, an Images inspection, an execution-cell request, and a SQLite-backed log-stream request. Stop before migrations when any check fails.
11. Set `ADMIN_KEY` with `pnpm wrangler secret put ADMIN_KEY`; accept the value only through Wrangler's secret prompt or redirected secure input. Confirm its name in `pnpm wrangler secret list`.
12. Continue with the deployment-state collection below. Treat the probe deployment as the current code version and omit the historical Floway `CHANGELOG.md` diff because no previous Floway deployment exists at this Worker name.

Expand Down
10 changes: 10 additions & 0 deletions .agents/skills/deploy-to-cloudflare/assets/binding-probe.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export class ExecutionDO {
constructor(context: DurableObjectState, env: unknown);
fetch(): Response;
}
export class LogStreamDO {
constructor(context: DurableObjectState, env: unknown);
fetch(): Response;
}
declare const probe: { fetch(request: Request, env: Record<string, unknown>): Promise<Response> };
export default probe;
17 changes: 16 additions & 1 deletion .agents/skills/deploy-to-cloudflare/assets/binding-probe.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ const checks = {
throw new Error(`Durable Object probe returned HTTP ${response.status}`);
}
},
LOG_STREAM_DO: async (env) => {
const id = env.LOG_STREAM_DO.idFromName(PROBE_KEY);
const response = await env.LOG_STREAM_DO.get(id).fetch(new Request('https://deployment-probe.internal/'));
if (!response.ok || await response.text() !== 'Hello World') {
throw new Error(`LogStream probe returned HTTP ${response.status}`);
}
},
};

const probe = async env => Promise.all(Object.values(checks).map(check => check(env)));
Expand All @@ -47,14 +54,22 @@ export class ExecutionDO extends DurableObject {
}
}

export class LogStreamDO extends DurableObject {
fetch() {
const row = this.ctx.storage.sql.exec('SELECT 1 AS value').one();
if (row.value !== 1) throw new Error('LogStream SQLite probe failed');
return new Response('Hello World');
}
}

export default {
async fetch(request, env) {
if (new URL(request.url).pathname !== '/api/deployment-probe') return new Response('Not Found', { status: 404 });

try {
await probe(env);
return new Response('Hello World', {
headers: { 'x-floway-binding-probe': 'DB,FILES,IMAGES,KV,EXECUTION_DO' },
headers: { 'x-floway-binding-probe': Object.keys(checks).join(',') },
});
} catch (error) {
const detail = error instanceof Error
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/verify.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ jobs:
- name: lint (gateway)
targets: packages/gateway
- name: lint (other packages)
targets: eslint.config.ts vitest.config.ts packages/agent-setup packages/http packages/interceptor packages/platform packages/protocols packages/provider packages/provider-azure packages/provider-claude-code packages/provider-codex packages/provider-copilot packages/provider-custom packages/provider-ollama packages/proxy packages/test-utils packages/translate scripts tools
targets: eslint.config.ts vitest.config.ts packages/agent-setup packages/dump packages/http packages/interceptor packages/pipeline packages/platform packages/protocols packages/provider packages/provider-azure packages/provider-claude-code packages/provider-codex packages/provider-copilot packages/provider-custom packages/provider-ollama packages/proxy packages/test-utils packages/translate scripts tools
name: ${{ matrix.name }}
steps:
- name: Checkout
Expand Down
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,11 @@
| Package | `apps/platform-node` | Hosts Floway on Node. |
| Package | `apps/web` | Provides the operator dashboard. |
| Package | `packages/agent-setup` | Configures supported coding agents. |
| Package | `packages/dump` | Records pipeline runs and publishes diagnostics. |
| Package | `packages/gateway` | Composes gateway services. |
| Package | `packages/http` | Provides HTTP transport primitives. |
| Package | `packages/interceptor` | Intercepts gateway traffic. |
| Package | `packages/pipeline` | Runs stages over a fact record. |
| Package | `packages/platform` | Defines portable runtime contracts. |
| Package | `packages/protocols` | Defines protocol contracts. |
| Package | `packages/provider` | Defines provider contracts. |
Expand Down
32 changes: 32 additions & 0 deletions apps/platform-cloudflare/__tests__/binding-probe_test.ts

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

10 changes: 10 additions & 0 deletions apps/platform-cloudflare/__tests__/execution-do_test.ts

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

123 changes: 123 additions & 0 deletions apps/platform-cloudflare/__tests__/log-stream-do_test.ts

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

84 changes: 84 additions & 0 deletions apps/platform-cloudflare/__tests__/test-utils/log-stream.ts

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

1 change: 1 addition & 0 deletions apps/platform-cloudflare/entry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
// Re-exported here because the current binding and the rename migration's
// target resolve the class by its Worker-module export name.
export { ExecutionDO } from './src/execution-do.ts';
export { LogStreamDO } from './src/log-stream-do.ts';

export class ExecutionOperationEntrypoint extends WorkerEntrypoint<CloudflareEnv> {
async fetch(request: Request): Promise<Response> {
Expand Down
1 change: 1 addition & 0 deletions apps/platform-cloudflare/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@floway-dev/dump": "workspace:*",
"@floway-dev/gateway": "workspace:*",
"@floway-dev/http": "workspace:*",
"@floway-dev/platform": "workspace:*",
Expand Down
Loading
Loading