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
124 changes: 124 additions & 0 deletions fixtures/atlas/aggregate/adk-occ-saga.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
{
"_comment": "ADK-OCC saga (spec §6.3): ag-ui issue #1732 -> PR #1746 -> issue #1753 -> issue #1754, all about the agui-adk subsystem. These four pre-fusion CandidateFragments must aggregate into ONE higher-order fragment carrying all four sources as fused_from evidence, with the most-restrictive sensitivity (internal, because #1732 is public but the rest are internal). This is the pre-fusion form of worked row §12.1 (derived:agui-adk:occ-concurrency-handling).",
"fragments": [
{
"sourcetype": "github-issue",
"subsystem": "agui-adk",
"claimSlugHint": "occ-concurrency-handling",
"source_name": "github-issue",
"repo_url": "https://github.com/ag-ui-protocol/ag-ui",
"ref": "1732",
"title": "ADK agent-run state suffers lost-update bugs under concurrent writes",
"content": "Concurrent mutations of ADK agent-run state clobber each other, producing lost updates. The root cause is an unguarded read-modify-write on shared run state. This issue is the origin of the optimistic-concurrency-control decision for ADK run-state.",
"provenance": {
"source": "github-issue",
"url": "https://github.com/ag-ui-protocol/ag-ui/issues/1732",
"date": "2026-05-12",
"classification": {
"sensitivity": "public",
"knowledge_type": "root-cause",
"audience": "all-staff",
"validation_status": "unverified",
"confidence": "high",
"provenance_class": "primary",
"freshness": { "as_of": "2026-05-12", "re_verify_by": "2026-09-12" }
}
},
"evidence": [
{ "kind": "linked_issue", "url": "issues/1732" },
{ "kind": "thread", "body": "root-cause narrative in #1732" }
],
"needsReview": false,
"validationTargets": []
},
{
"sourcetype": "github-pr",
"subsystem": "agui-adk",
"claimSlugHint": "occ-concurrency-handling",
"source_name": "github-pr",
"repo_url": "https://github.com/ag-ui-protocol/ag-ui",
"ref": "1746",
"title": "Adopt optimistic concurrency control for ADK agent-run state writes",
"content": "ADK run-state writes are now version-checked: a concurrent mutation detects a version conflict and retries rather than holding a lock, trading a small retry cost for deadlock-freedom. Callers must tolerate a retried apply because writes are idempotent.",
"provenance": {
"source": "github-pr",
"url": "https://github.com/ag-ui-protocol/ag-ui/pull/1746",
"date": "2026-05-14",
"classification": {
"sensitivity": "internal",
"knowledge_type": "architecture",
"audience": "engineering",
"validation_status": "source-verified",
"confidence": "high",
"provenance_class": "primary",
"freshness": { "as_of": "2026-05-14", "re_verify_by": "2026-09-14" }
}
},
"evidence": [
{ "kind": "changed_file", "path": "integrations/google-adk/src/run-state.ts" },
{ "kind": "linked_issue", "url": "issues/1732" }
],
"needsReview": false,
"validationTargets": ["integrations/google-adk/src/run-state.ts"]
},
{
"sourcetype": "github-issue",
"subsystem": "agui-adk",
"claimSlugHint": "occ-concurrency-handling",
"source_name": "github-issue",
"repo_url": "https://github.com/ag-ui-protocol/ag-ui",
"ref": "1753",
"title": "Document that ADK run-state writes are version-checked and idempotent",
"content": "Follow-up to the OCC adoption: the public-facing behavior is that ADK run-state writes are version-checked and idempotent, so integrators should expect a retried apply under contention rather than an error.",
"provenance": {
"source": "github-issue",
"url": "https://github.com/ag-ui-protocol/ag-ui/issues/1753",
"date": "2026-05-18",
"classification": {
"sensitivity": "internal",
"knowledge_type": "architecture",
"audience": "all-staff",
"validation_status": "unverified",
"confidence": "medium",
"provenance_class": "derived",
"freshness": { "as_of": "2026-05-18", "re_verify_by": "2026-09-18" }
}
},
"evidence": [
{ "kind": "linked_issue", "url": "issues/1753" }
],
"needsReview": false,
"validationTargets": []
},
{
"sourcetype": "github-issue",
"subsystem": "agui-adk",
"claimSlugHint": "occ-concurrency-handling",
"source_name": "github-issue",
"repo_url": "https://github.com/ag-ui-protocol/ag-ui",
"ref": "1754",
"title": "Reuse the OCC retry shape for ADK tool-call state",
"content": "A second site (tool-call state) hits the same lost-update class; #1754 notes it is the 'same OCC shape' as run-state and should reuse the version-check-and-retry approach rather than inventing a new locking scheme.",
"provenance": {
"source": "github-issue",
"url": "https://github.com/ag-ui-protocol/ag-ui/issues/1754",
"date": "2026-05-20",
"classification": {
"sensitivity": "internal",
"knowledge_type": "architecture",
"audience": "engineering",
"validation_status": "unverified",
"confidence": "medium",
"provenance_class": "derived",
"freshness": { "as_of": "2026-05-20", "re_verify_by": "2026-09-20" }
}
},
"evidence": [
{ "kind": "linked_issue", "url": "issues/1754" },
{ "kind": "thread", "body": "#1754 notes 'same OCC shape'" }
],
"needsReview": false,
"validationTargets": []
}
]
}
151 changes: 151 additions & 0 deletions fixtures/atlas/aggregate/cross-source-subsystem.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
{
"_comment": "Cross-source fusion (spec §4.4): a PR fragment + an issue fragment + a memory fragment + a Notion ADR fragment ALL about the same subsystem (agui-protocol interrupt-resume keying) must fuse into ONE higher-order fragment carrying all four sources as fused_from evidence. Sensitivities span public/internal/proprietary so the reconciled sensitivity must be the most restrictive (proprietary). A trailing UNRELATED fragment (railway-deploy) must NOT be fused into this group.",
"fragments": [
{
"sourcetype": "notion-doc",
"subsystem": "agui-protocol",
"claimSlugHint": "interrupt-resume-keying",
"source_name": "notion-doc",
"repo_url": "https://github.com/ag-ui-protocol/ag-ui",
"ref": "interrupts-adr",
"title": "Interrupt resume links via interruptId, NOT parentRunId",
"content": "The Interrupts design decided a resume is linked to its interrupt via interruptId rather than parentRunId, because parentRunId is a branching primitive and reusing it would conflate resume with branch.",
"provenance": {
"source": "notion-doc",
"url": "https://www.notion.so/copilotkit/Interrupts-Proposal-Design-Decisions-Reasoning",
"date": "2026-04-18",
"classification": {
"sensitivity": "internal",
"knowledge_type": "design-rationale",
"audience": "engineering",
"validation_status": "source-verified",
"confidence": "high",
"provenance_class": "primary",
"freshness": { "as_of": "2026-04-18", "re_verify_by": "2026-09-18" }
}
},
"evidence": [
{ "kind": "thread", "body": "Interrupts Proposal — Design Decisions & Reasoning (decision: resume keying)" }
],
"needsReview": false,
"validationTargets": []
},
{
"sourcetype": "github-pr",
"subsystem": "agui-protocol",
"claimSlugHint": "interrupt-resume-keying",
"source_name": "github-pr",
"repo_url": "https://github.com/ag-ui-protocol/ag-ui",
"ref": "1801",
"title": "Wire interruptId as the resume handle in the verify state machine",
"content": "Implements the ADR: the verify state machine now keys a resume off interruptId. parentRunId is left to express run lineage only.",
"provenance": {
"source": "github-pr",
"url": "https://github.com/ag-ui-protocol/ag-ui/pull/1801",
"date": "2026-04-25",
"classification": {
"sensitivity": "public",
"knowledge_type": "architecture",
"audience": "all-staff",
"validation_status": "source-verified",
"confidence": "high",
"provenance_class": "primary",
"freshness": { "as_of": "2026-04-25", "re_verify_by": "2026-09-25" }
}
},
"evidence": [
{ "kind": "changed_file", "path": "client/verify/verify.ts" },
{ "kind": "linked_issue", "url": "issues/1799" }
],
"needsReview": false,
"validationTargets": ["client/verify/verify.ts"]
},
{
"sourcetype": "github-issue",
"subsystem": "agui-protocol",
"claimSlugHint": "interrupt-resume-keying",
"source_name": "github-issue",
"repo_url": "https://github.com/ag-ui-protocol/ag-ui",
"ref": "1799",
"title": "Resume incorrectly reuses parentRunId, conflating resume with branch",
"content": "Bug report: resuming an interrupted run reuses parentRunId, which the branching code also reads, so a resume is indistinguishable from a branch. This motivated the interruptId resume handle.",
"provenance": {
"source": "github-issue",
"url": "https://github.com/ag-ui-protocol/ag-ui/issues/1799",
"date": "2026-04-15",
"classification": {
"sensitivity": "internal",
"knowledge_type": "root-cause",
"audience": "engineering",
"validation_status": "unverified",
"confidence": "medium",
"provenance_class": "primary",
"freshness": { "as_of": "2026-04-15", "re_verify_by": "2026-09-15" }
}
},
"evidence": [
{ "kind": "linked_issue", "url": "issues/1799" }
],
"needsReview": false,
"validationTargets": []
},
{
"sourcetype": "memory",
"subsystem": "agui-protocol",
"claimSlugHint": "interrupt-resume-keying",
"source_name": "memory-store",
"repo_url": "https://github.com/ag-ui-protocol/ag-ui",
"ref": "feedback_interrupt_resume_keying",
"title": "Resume keys off interruptId; do not thread parentRunId for resume",
"content": "Durable note: when implementing resume in any integration, key off interruptId. parentRunId is for branching only. This is proprietary integration guidance derived from internal escalations.",
"provenance": {
"source": "memory-store",
"url": "file:///Users/jpr5/.local/share/copilotkit/memory/store/feedback_interrupt_resume_keying.md",
"date": "2026-05-02",
"classification": {
"sensitivity": "proprietary",
"knowledge_type": "design-rationale",
"audience": "engineering",
"validation_status": "unverified",
"confidence": "high",
"provenance_class": "primary",
"freshness": { "as_of": "2026-05-02", "re_verify_by": "2026-11-02" }
}
},
"evidence": [
{ "kind": "thread", "body": "feedback_interrupt_resume_keying" }
],
"needsReview": false,
"validationTargets": []
},
{
"sourcetype": "memory",
"subsystem": "railway-deploy",
"claimSlugHint": "image-entrypoint-shell-escape",
"source_name": "memory-store",
"repo_url": "https://github.com/CopilotKit/pathfinder",
"ref": "feedback_railway_image_shell_escape",
"title": "Railway image entrypoints must escape shell metacharacters",
"content": "An unescaped shell metacharacter in a Railway start command silently breaks the container boot. This is an UNRELATED subsystem and must not fuse into the interrupt-resume group.",
"provenance": {
"source": "memory-store",
"url": "file:///Users/jpr5/.local/share/copilotkit/memory/store/feedback_railway_image_shell_escape.md",
"date": "2026-05-15",
"classification": {
"sensitivity": "internal",
"knowledge_type": "operational",
"audience": "engineering",
"validation_status": "source-verified",
"confidence": "high",
"provenance_class": "primary",
"freshness": { "as_of": "2026-05-15", "re_verify_by": "2026-11-15" }
}
},
"evidence": [
{ "kind": "thread", "body": "feedback_railway_image_shell_escape" }
],
"needsReview": false,
"validationTargets": []
}
]
}
92 changes: 92 additions & 0 deletions fixtures/atlas/aggregate/dedup-and-unrelated.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
{
"_comment": "Dedup + no-spurious-fusion: two byte-identical fragments (same subsystem + same source + same content + same ref) must collapse so their identity is not double-counted in fused_from; and two fragments in DIFFERENT subsystems must remain two separate output fragments (no cross-subsystem fusion).",
"fragments": [
{
"sourcetype": "github-pr",
"subsystem": "cpk-runtime",
"claimSlugHint": "two-layer-shim",
"source_name": "github-pr",
"repo_url": "https://github.com/CopilotKit/CopilotKit",
"ref": "2001",
"title": "CopilotRuntime is a two-layer compat shim",
"content": "The public CopilotRuntime delegates to the v2 CopilotRuntime, which is itself a shim selecting CopilotSseRuntime / CopilotIntelligenceRuntime.",
"provenance": {
"source": "github-pr",
"url": "https://github.com/CopilotKit/CopilotKit/pull/2001",
"date": "2026-06-08",
"classification": {
"sensitivity": "internal",
"knowledge_type": "architecture",
"audience": "engineering",
"validation_status": "source-verified",
"confidence": "high",
"provenance_class": "primary",
"freshness": { "as_of": "2026-06-08", "re_verify_by": "2026-09-08" }
}
},
"evidence": [
{ "kind": "changed_file", "path": "packages/runtime/src/v2/runtime/core/runtime.ts:348" }
],
"needsReview": false,
"validationTargets": []
},
{
"sourcetype": "github-pr",
"subsystem": "cpk-runtime",
"claimSlugHint": "two-layer-shim",
"source_name": "github-pr",
"repo_url": "https://github.com/CopilotKit/CopilotKit",
"ref": "2001",
"title": "CopilotRuntime is a two-layer compat shim",
"content": "The public CopilotRuntime delegates to the v2 CopilotRuntime, which is itself a shim selecting CopilotSseRuntime / CopilotIntelligenceRuntime.",
"provenance": {
"source": "github-pr",
"url": "https://github.com/CopilotKit/CopilotKit/pull/2001",
"date": "2026-06-08",
"classification": {
"sensitivity": "internal",
"knowledge_type": "architecture",
"audience": "engineering",
"validation_status": "source-verified",
"confidence": "high",
"provenance_class": "primary",
"freshness": { "as_of": "2026-06-08", "re_verify_by": "2026-09-08" }
}
},
"evidence": [
{ "kind": "changed_file", "path": "packages/runtime/src/v2/runtime/core/runtime.ts:348" }
],
"needsReview": false,
"validationTargets": []
},
{
"sourcetype": "memory",
"subsystem": "testing-sse",
"claimSlugHint": "buffer-replay-timing-invariant",
"source_name": "memory-store",
"repo_url": "https://github.com/ag-ui-protocol/ag-ui",
"ref": "feedback_streaming_tests_assert_timing",
"title": "Assert wall-clock spread, not payload, to prove SSE streaming",
"content": "A buffered-then-dumped SSE stream is byte-identical to a truly streamed one; assert the wall-clock spread between chunk arrivals to prove streaming.",
"provenance": {
"source": "memory-store",
"url": "file:///Users/jpr5/.local/share/copilotkit/memory/store/feedback_streaming_tests_assert_timing.md",
"date": "2026-05-30",
"classification": {
"sensitivity": "internal",
"knowledge_type": "operational",
"audience": "engineering",
"validation_status": "source-verified",
"confidence": "high",
"provenance_class": "primary",
"freshness": { "as_of": "2026-05-30", "re_verify_by": "2026-11-30" }
}
},
"evidence": [
{ "kind": "thread", "body": "feedback_streaming_tests_assert_timing" }
],
"needsReview": false,
"validationTargets": []
}
]
}
21 changes: 21 additions & 0 deletions fixtures/atlas/checkout/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Fixture checkout (fake `origin/main` tree) — S14 validation gate

A deliberately tiny, hermetic stand-in for a read-only checkout of
`origin/main`, grepped by `src/atlas/validate.ts` (`promoteValidation`) to
source-verify a candidate's `validationTargets`.

What it asserts (see `src/__tests__/atlas-validate.test.ts`):

- `src/db/atlas.ts` contains the symbol `upsertAtlasSeedCandidate`.
- `src/runtime/shim.ts` contains the symbol `TwoLayerShim`.
- The §7 worked-proof negative symbol appears NOWHERE in this tree (a candidate
whose validationTarget is that absent symbol yields 0 grep hits, stays
`unverified`, and — being an architecture fact — is marked `approvable=false`).

IMPORTANT: because the gate does a REAL recursive text grep over this whole
tree, the negative-case symbol must not appear in ANY file here — not even in a
comment or this README. Do not write that token anywhere under
`fixtures/atlas/checkout/`, or the source-verify grep will spuriously match it.

This tree is intentionally outside the TypeScript build (`tsconfig.json`
excludes `fixtures/`); the `.ts` files here are grep targets, not compiled code.
Loading