Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
4a39091
test(interactive): freeze C01-C12 scenario matrix and scripted/live/n…
rockyshi1993 Nov 11, 2026
554648f
test(interactive): C01-C04,C10,C11 scripted complex runs with real Pr…
rockyshi1993 Nov 11, 2026
3924e6a
test(interactive): C01/C03 live multi-Agent two-Condition workflow de…
rockyshi1993 Nov 11, 2026
2bedbfc
test(interactive): real ChatGPT multi-Agent 5-turn replay bridge with…
rockyshi1993 Nov 11, 2026
1d515fe
test(c01-live): actual ChatGPT requirements analysis bound to publish…
rockyshi1993 Nov 11, 2026
031eb43
test(c01-live): ChatGPT architecture response to real dependent Pendi…
rockyshi1993 Nov 11, 2026
f0fd570
test(c01-live): actual ChatGPT implementation plan from real Pending #3
rockyshi1993 Nov 11, 2026
7363bd1
test(c03-live): ChatGPT deliberately submits invalid reviewApproved t…
rockyshi1993 Nov 11, 2026
abe592e
test(c01-live): genuine ChatGPT corrected review after real attempt-2…
rockyshi1993 Nov 11, 2026
33c9418
docs(interactive): record C01-C12 detailed scripted and five-turn rea…
rockyshi1993 Nov 11, 2026
5be1abb
test(interactive): extend complex P0-A acceptance with C13-C20 interl…
rockyshi1993 Nov 11, 2026
c9a7e32
docs(interactive): extend risk-mapped C13-C24 acceptance and native-h…
rockyshi1993 Nov 11, 2026
ac49e3e
test(interactive): inspect durable Store state while Pending frame in…
rockyshi1993 Nov 11, 2026
09e14e8
test(interactive): verify C16 durable Checkpoint while Pending frame …
rockyshi1993 Nov 11, 2026
c6b42a3
docs(interactive): record independently checked 7/7 CI and C13-C24 la…
rockyshi1993 Nov 11, 2026
9bac8f8
test(interactive): rebase M6 Host integration on current main
rockyshi1993 Nov 11, 2026
ae5fc5a
docs(interactive): add Trusted Host V2 conditional security design
rockyshi1993 Nov 12, 2026
13d573c
docs(interactive): recover frozen baselines and establish evidence au…
rockyshi1993 Nov 12, 2026
c938608
docs(interactive): archive Phase 2 formal conformance R1/R2 audit
rockyshi1993 Nov 12, 2026
d5db312
docs(interactive): archive local R04 reproduction and verification ev…
rockyshi1993 Nov 12, 2026
606d055
fix(interactive): snapshot start inputs before first await (R04)
rockyshi1993 Nov 12, 2026
bede343
merge main into complex acceptance evidence PR and refresh current-ma…
rockyshi1993 Nov 12, 2026
4a88e4a
test(interactive): require complete recorded ChatGPT responses in nor…
rockyshi1993 Nov 12, 2026
b008d86
docs(interactive): clarify recorded model-response evidence tier
rockyshi1993 Nov 12, 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
6 changes: 6 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,14 @@ jobs:
- uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
with:
node-version: ${{ matrix.node }}
- name: Install locked dependencies for M6 Host integration
run: npm ci --ignore-scripts --no-audit --no-fund
- name: Prove cross-UID model worker cannot read Host key or SQLite DB
run: node tests/security/host-isolation.mjs
- name: Prove M6 Host and isolated worker integration
env:
FLOWKIT_M6_ISOLATION: '1'
run: node --test tests/integration/m6-e2e.test.mjs

website:
runs-on: ubuntu-24.04
Expand Down
302 changes: 302 additions & 0 deletions docs/FlowKit-PR16-PR17-Local-Verification-Final-20261112.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
Reconfirm at 2026-11-12 13:15:03 +08:00
Working directory: D:\Worker\flowkit
Commands: git status --porcelain=v1; git rev-parse --abbrev-ref HEAD; git rev-parse HEAD;
gh pr view 16,17,18,19 --json number,state,isDraft,mergedAt,mergeable,headRefOid,baseRefOid,url,title
gh pr checks 16,17,18,19
gh run view 43156062422,43155961638,43159273722,43159631042 --json databaseId,status,conclusion,createdAt,updatedAt,event,headSha,url,displayTitle

--- git ---
porcelain: empty
branch: main
HEAD: 13d573c5ddc4a0ed3502401589c581799c96c5d2

--- gh pr view ---
16 OPEN draft MERGEABLE mergedAt=null head=90cc0de7e4f0d5971207a85221c32e9f79d9c9b5 base=13d573c5ddc4a0ed3502401589c581799c96c5d2
https://github.com/devcodex-labs/flowkit/pull/16
17 OPEN draft MERGEABLE mergedAt=null head=ada01c933553206948ffcf2f944dfc5604e44da2 base=13d573c5ddc4a0ed3502401589c581799c96c5d2
https://github.com/devcodex-labs/flowkit/pull/17
18 OPEN draft MERGEABLE mergedAt=null head=452ac387b1f3da97d38bfb27b8582953ab1b818e base=13d573c5ddc4a0ed3502401589c581799c96c5d2
https://github.com/devcodex-labs/flowkit/pull/18
19 OPEN draft MERGEABLE mergedAt=null head=3175a0794a8fb1305ffa0f06d1ae426c0c2b4ae9 base=13d573c5ddc4a0ed3502401589c581799c96c5d2
https://github.com/devcodex-labs/flowkit/pull/19

--- gh pr checks ---
Each of PR 16, 17, 18, 19 printed seven jobs, all "pending" with duration 0.
gh pr checks exit code: 8 for each PR.
Exit 8 here is the CLI code for checks that have not finished. It is not a recorded test failure and not a success.

PR 16 run https://github.com/devcodex-labs/flowkit/actions/runs/43156062422
PR 17 run https://github.com/devcodex-labs/flowkit/actions/runs/43155961638
PR 18 run https://github.com/devcodex-labs/flowkit/actions/runs/43159273722
PR 19 run https://github.com/devcodex-labs/flowkit/actions/runs/43159631042

Job names on every run:
Host OS-user isolation / Node 22.13.0
Host OS-user isolation / Node 24.22.1
ubuntu-24.04 / Node 22.13.0
ubuntu-24.04 / Node 24.22.1
website
windows-2025 / Node 22.13.0
windows-2025 / Node 24.22.1

--- gh run view ---
43156062422 status=queued conclusion= createdAt=2026-11-12T04:37:52Z updatedAt=2026-11-12T04:37:54Z event=pull_request headSha=90cc0de7e4f0d5971207a85221c32e9f79d9c9b5
43155961638 status=queued conclusion= createdAt=2026-11-12T04:36:58Z updatedAt=2026-11-12T04:36:59Z event=pull_request headSha=ada01c933553206948ffcf2f944dfc5604e44da2
43159273722 status=queued conclusion= createdAt=2026-11-12T05:07:42Z updatedAt=2026-11-12T05:07:42Z event=pull_request headSha=452ac387b1f3da97d38bfb27b8582953ab1b818e
43159631042 status=queued conclusion= createdAt=2026-11-12T05:10:51Z updatedAt=2026-11-12T05:10:51Z event=pull_request headSha=3175a0794a8fb1305ffa0f06d1ae426c0c2b4ae9

No run has a success or failure conclusion. Queued is not recorded as an outage and not recorded as a green matrix.
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
鉁?M4 pure Terminal passes without Agent bindings, then resume is stable (60.8125ms)
鉁?M4 generated Program routes Condition before Agent, publishes immutable Pending, then commits verified State (69.443ms)
鉁?M4 false Condition never emits an Agent Pending and returns failed Terminal (38.7358ms)
鉁?M4 Standard-compatible missing when input is a durable errored FK_R002 (never a fake waiting) (34.377ms)
鉁?M4 duplicate equal receipt returns durable acceptedRevision after multiple later CAS stages (54.7375ms)
鉁?M4 wrong node, attempt, requestId, different digest and untrusted event kind all reject without State mutation (55.6257ms)
鉁?M4 retries invalid Agent outputs at most retries+1, preserving State and FK_R004 on exhaustion (59.6097ms)
鉁?M4 synchronous validator that throws or returns undefined becomes terminal contract error without retry (128.5878ms)
鉁?M4 host-reported Agent call failure retries once and eventually stops without executing a model internally (52.1236ms)
鉁?M4 run start fingerprint rejects drift but same startKey+same intent returns original run (44.78ms)
鉁?M4 restart with no workflow source uses retained compiler artifact and immutable policy (65.3015ms)
鉁?M4 stage budget=1 checkpoints every step, never returns an empty fake waiting, resumes to the same result (80.6356ms)
鉁?M4 changing client-owned input object while waiting does not mutate persisted State (73.5977ms)
鉁?M4 rejects unsupported checkStep and missing runtime bindings before start writes (27.6211ms)
鉁?M4 concurrent complete from two independent Store connections accepts one receipt but returns same Ack (64.7732ms)
鉁?M4 rejects other tenant runId without exposing checkpoint, even with same compiled workflow (56.7495ms)
鉁?M4 forbids invalid JSON and preserve __proto__ as State data after verified merge (54.1332ms)
鉁?M4 malformed Host failure message is rejected before receipt CAS and leaves waiting replayable (64.418ms)
鉁?M4 an overly permissive validator cannot strand a primitive candidate at commit (60.8871ms)
鉁?M4 a sparse validator reasons array fails closed without committing invalid State (42.0403ms)
鉁?M4 a successful receipt CAS followed by a lost response is recovered by durable duplicate Ack (61.1731ms)
鉁?R04 regression: start snapshots caller-owned State before first await (38.0448ms)
鉁?R04 regression: start snapshots caller-owned startIntent before first await (45.259ms)
鈩?tests 23
鈩?suites 0
鈩?pass 23
鈩?fail 0
鈩?cancelled 0
鈩?skipped 0
鈩?todo 0
鈩?duration_ms 1454.8789
196 changes: 196 additions & 0 deletions docs/evidence/20261112-pr16-pr17/pr17-coordinator-node22.22.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
TAP version 13
# (node:34416) ExperimentalWarning: SQLite is an experimental feature and might change at any time
# (Use `node --trace-warnings ...` to show where the warning was created)
# Subtest: M4 pure Terminal passes without Agent bindings, then resume is stable
ok 1 - M4 pure Terminal passes without Agent bindings, then resume is stable
---
duration_ms: 152.39
type: 'test'
...
# Subtest: M4 generated Program routes Condition before Agent, publishes immutable Pending, then commits verified State
ok 2 - M4 generated Program routes Condition before Agent, publishes immutable Pending, then commits verified State
---
duration_ms: 96.897
type: 'test'
...
# Subtest: M4 false Condition never emits an Agent Pending and returns failed Terminal
ok 3 - M4 false Condition never emits an Agent Pending and returns failed Terminal
---
duration_ms: 101.0779
type: 'test'
...
# Subtest: M4 Standard-compatible missing when input is a durable errored FK_R002 (never a fake waiting)
ok 4 - M4 Standard-compatible missing when input is a durable errored FK_R002 (never a fake waiting)
---
duration_ms: 67.8472
type: 'test'
...
# Subtest: M4 duplicate equal receipt returns durable acceptedRevision after multiple later CAS stages
ok 5 - M4 duplicate equal receipt returns durable acceptedRevision after multiple later CAS stages
---
duration_ms: 87.8788
type: 'test'
...
# Subtest: M4 wrong node, attempt, requestId, different digest and untrusted event kind all reject without State mutation
ok 6 - M4 wrong node, attempt, requestId, different digest and untrusted event kind all reject without State mutation
---
duration_ms: 222.6651
type: 'test'
...
# Subtest: M4 retries invalid Agent outputs at most retries+1, preserving State and FK_R004 on exhaustion
ok 7 - M4 retries invalid Agent outputs at most retries+1, preserving State and FK_R004 on exhaustion
---
duration_ms: 271.6269
type: 'test'
...
# Subtest: M4 synchronous validator that throws or returns undefined becomes terminal contract error without retry
ok 8 - M4 synchronous validator that throws or returns undefined becomes terminal contract error without retry
---
duration_ms: 411.5546
type: 'test'
...
# Subtest: M4 host-reported Agent call failure retries once and eventually stops without executing a model internally
ok 9 - M4 host-reported Agent call failure retries once and eventually stops without executing a model internally
---
duration_ms: 88.0933
type: 'test'
...
# Subtest: M4 run start fingerprint rejects drift but same startKey+same intent returns original run
ok 10 - M4 run start fingerprint rejects drift but same startKey+same intent returns original run
---
duration_ms: 68.5111
type: 'test'
...
# Subtest: M4 restart with no workflow source uses retained compiler artifact and immutable policy
ok 11 - M4 restart with no workflow source uses retained compiler artifact and immutable policy
---
duration_ms: 110.8433
type: 'test'
...
# Subtest: M4 stage budget=1 checkpoints every step, never returns an empty fake waiting, resumes to the same result
ok 12 - M4 stage budget=1 checkpoints every step, never returns an empty fake waiting, resumes to the same result
---
duration_ms: 146.1063
type: 'test'
...
# Subtest: M4 changing client-owned input object while waiting does not mutate persisted State
ok 13 - M4 changing client-owned input object while waiting does not mutate persisted State
---
duration_ms: 176.2838
type: 'test'
...
# Subtest: M4 rejects unsupported checkStep and missing runtime bindings before start writes
ok 14 - M4 rejects unsupported checkStep and missing runtime bindings before start writes
---
duration_ms: 168.1791
type: 'test'
...
# Subtest: M4 concurrent complete from two independent Store connections accepts one receipt but returns same Ack
ok 15 - M4 concurrent complete from two independent Store connections accepts one receipt but returns same Ack
---
duration_ms: 130.0283
type: 'test'
...
# Subtest: M4 rejects other tenant runId without exposing checkpoint, even with same compiled workflow
ok 16 - M4 rejects other tenant runId without exposing checkpoint, even with same compiled workflow
---
duration_ms: 99.6333
type: 'test'
...
# Subtest: M4 forbids invalid JSON and preserve __proto__ as State data after verified merge
ok 17 - M4 forbids invalid JSON and preserve __proto__ as State data after verified merge
---
duration_ms: 142.4165
type: 'test'
...
# Subtest: M4 malformed Host failure message is rejected before receipt CAS and leaves waiting replayable
ok 18 - M4 malformed Host failure message is rejected before receipt CAS and leaves waiting replayable
---
duration_ms: 118.2922
type: 'test'
...
# Subtest: M4 an overly permissive validator cannot strand a primitive candidate at commit
ok 19 - M4 an overly permissive validator cannot strand a primitive candidate at commit
---
duration_ms: 124.1347
type: 'test'
...
# Subtest: M4 a sparse validator reasons array fails closed without committing invalid State
ok 20 - M4 a sparse validator reasons array fails closed without committing invalid State
---
duration_ms: 93.9348
type: 'test'
...
# Subtest: M4 a successful receipt CAS followed by a lost response is recovered by durable duplicate Ack
ok 21 - M4 a successful receipt CAS followed by a lost response is recovered by durable duplicate Ack
---
duration_ms: 105.876
type: 'test'
...
# Subtest: R04 regression: start snapshots caller-owned State before first await
not ok 22 - R04 regression: start snapshots caller-owned State before first await
---
duration_ms: 111.4347
type: 'test'
location: 'D:\\Worker\\flowkit-pr17-verify\\tests\\interactive\\coordinator.test.mjs:407:1'
failureType: 'testCodeFailure'
error: |-
persisted State must be a deep entry-time snapshot
+ actual - expected

{
context: {
+ request: 'modified-after-start'
- request: 'before-await'
},
+ existing: 'modified-after-start',
- existing: 'hello',
ready: true
}

code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
ready: true
existing: 'hello'
context:
request: 'before-await'
actual:
context:
request: 'modified-after-start'
existing: 'modified-after-start'
ready: true
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///D:/Worker/flowkit-pr17-verify/tests/interactive/coordinator.test.mjs:417:10)
async Test.run (node:internal/test_runner/test:1054:7)
async Test.processPendingSubtests (node:internal/test_runner/test:744:7)
...
# Subtest: R04 regression: start snapshots caller-owned startIntent before first await
not ok 23 - R04 regression: start snapshots caller-owned startIntent before first await
---
duration_ms: 104.4814
type: 'test'
location: 'D:\\Worker\\flowkit-pr17-verify\\tests\\interactive\\coordinator.test.mjs:421:1'
failureType: 'testCodeFailure'
error: 'FK_I_START_CONFLICT: startKey belongs to different intent'
code: 'FK_I_START_CONFLICT'
stack: |-
failure (file:///D:/Worker/flowkit-pr17-verify/src/interactive/sqlite-store.mjs:24:24)
file:///D:/Worker/flowkit-pr17-verify/src/interactive/sqlite-store.mjs:313:19
transaction (file:///D:/Worker/flowkit-pr17-verify/src/interactive/sqlite-store.mjs:142:22)
Object.createRun (file:///D:/Worker/flowkit-pr17-verify/src/interactive/sqlite-store.mjs:308:14)
Object.start (file:///D:/Worker/flowkit-pr17-verify/src/interactive/coordinator.mjs:551:24)
async TestContext.<anonymous> (file:///D:/Worker/flowkit-pr17-verify/tests/interactive/coordinator.test.mjs:430:24)
async Test.run (node:internal/test_runner/test:1054:7)
async Test.processPendingSubtests (node:internal/test_runner/test:744:7)
...
1..23
# tests 23
# suites 0
# pass 21
# fail 2
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3495.5286
73 changes: 73 additions & 0 deletions docs/evidence/20261112-pr16-pr17/pr17-coordinator-node24.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
鉁?M4 pure Terminal passes without Agent bindings, then resume is stable (75.0133ms)
鉁?M4 generated Program routes Condition before Agent, publishes immutable Pending, then commits verified State (69.0836ms)
鉁?M4 false Condition never emits an Agent Pending and returns failed Terminal (38.6616ms)
鉁?M4 Standard-compatible missing when input is a durable errored FK_R002 (never a fake waiting) (38.3901ms)
鉁?M4 duplicate equal receipt returns durable acceptedRevision after multiple later CAS stages (52.8343ms)
鉁?M4 wrong node, attempt, requestId, different digest and untrusted event kind all reject without State mutation (55.4604ms)
鉁?M4 retries invalid Agent outputs at most retries+1, preserving State and FK_R004 on exhaustion (64.6791ms)
鉁?M4 synchronous validator that throws or returns undefined becomes terminal contract error without retry (128.5816ms)
鉁?M4 host-reported Agent call failure retries once and eventually stops without executing a model internally (51.927ms)
鉁?M4 run start fingerprint rejects drift but same startKey+same intent returns original run (43.0537ms)
鉁?M4 restart with no workflow source uses retained compiler artifact and immutable policy (65.0977ms)
鉁?M4 stage budget=1 checkpoints every step, never returns an empty fake waiting, resumes to the same result (77.9976ms)
鉁?M4 changing client-owned input object while waiting does not mutate persisted State (72.4723ms)
鉁?M4 rejects unsupported checkStep and missing runtime bindings before start writes (33.6865ms)
鉁?M4 concurrent complete from two independent Store connections accepts one receipt but returns same Ack (64.7803ms)
鉁?M4 rejects other tenant runId without exposing checkpoint, even with same compiled workflow (50.4427ms)
鉁?M4 forbids invalid JSON and preserve __proto__ as State data after verified merge (49.1118ms)
鉁?M4 malformed Host failure message is rejected before receipt CAS and leaves waiting replayable (48.8353ms)
鉁?M4 an overly permissive validator cannot strand a primitive candidate at commit (62.5123ms)
鉁?M4 a sparse validator reasons array fails closed without committing invalid State (39.514ms)
鉁?M4 a successful receipt CAS followed by a lost response is recovered by durable duplicate Ack (53.1683ms)
鉁?R04 regression: start snapshots caller-owned State before first await (46.7853ms)
鉁?R04 regression: start snapshots caller-owned startIntent before first await (54.4232ms)
鈩?tests 23
鈩?suites 0
鈩?pass 21
鈩?fail 2
鈩?cancelled 0
鈩?skipped 0
鈩?todo 0
鈩?duration_ms 1478.7332

鉁?failing tests:

test at tests\interactive\coordinator.test.mjs:407:1
鉁?R04 regression: start snapshots caller-owned State before first await (46.7853ms)
AssertionError [ERR_ASSERTION]: persisted State must be a deep entry-time snapshot
+ actual - expected

{
context: {
+ request: 'modified-after-start'
- request: 'before-await'
},
+ existing: 'modified-after-start',
- existing: 'hello',
ready: true
}

at TestContext.<anonymous> (file:///D:/Worker/flowkit-pr17-verify/tests/interactive/coordinator.test.mjs:417:10)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: { context: { request: 'modified-after-start' }, existing: 'modified-after-start', ready: true },
expected: { ready: true, existing: 'hello', context: { request: 'before-await' } },
operator: 'deepStrictEqual',
diff: 'simple'
}

test at tests\interactive\coordinator.test.mjs:421:1
鉁?R04 regression: start snapshots caller-owned startIntent before first await (54.4232ms)
Error: FK_I_START_CONFLICT: startKey belongs to different intent
at failure (file:///D:/Worker/flowkit-pr17-verify/src/interactive/sqlite-store.mjs:24:24)
at file:///D:/Worker/flowkit-pr17-verify/src/interactive/sqlite-store.mjs:313:19
at transaction (file:///D:/Worker/flowkit-pr17-verify/src/interactive/sqlite-store.mjs:142:22)
at Object.createRun (file:///D:/Worker/flowkit-pr17-verify/src/interactive/sqlite-store.mjs:308:14)
at Object.start (file:///D:/Worker/flowkit-pr17-verify/src/interactive/coordinator.mjs:551:24)
at async TestContext.<anonymous> (file:///D:/Worker/flowkit-pr17-verify/tests/interactive/coordinator.test.mjs:430:24)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
code: 'FK_I_START_CONFLICT'
}
8 changes: 8 additions & 0 deletions docs/evidence/20261112-pr16-pr17/probe-cf08-node24.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"controlBytes": 7632,
"racedBytes": 0,
"racedDiagnostics": [
"FK_I_UNSUPPORTED_GRAPH:This build implements only P0-A; caller cannot enable P0-B"
],
"node": "v24.22.2"
}
13 changes: 13 additions & 0 deletions docs/evidence/20261112-pr16-pr17/probe-r04-host-node24.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"runId": "host-r04",
"savedState": {
"existing": "before",
"nested": {
"request": "before"
}
},
"taskInput": {
"existing": "before"
},
"node": "v24.22.2"
}
Loading