Agentic AI Atlasby a5c.ai
OverviewWikiGraphFor AgentsEdgesSearchWorkspace
/
GitHubDocsDiscord
iiRecord
Agentic AI Atlas · Research dossier R1 — Fabric current state + audit refresh
page:docs-specs-platform-gaps-research-fabric-current-statea5c.ai
Search record views/
Record · tabs

Available views

II.Record viewspp. 1 - 1
overviewarticlejsongraph
II.
Page JSON

page:docs-specs-platform-gaps-research-fabric-current-state

Structured · live

Research dossier R1 — Fabric current state + audit refresh json

Inspect the normalized record payload exactly as the atlas UI reads it.

File · wiki/docs/specs/platform-gaps/research/fabric-current-state.mdCluster · wiki
Record JSON
{
  "id": "page:docs-specs-platform-gaps-research-fabric-current-state",
  "_kind": "Page",
  "_file": "wiki/docs/specs/platform-gaps/research/fabric-current-state.md",
  "_cluster": "wiki",
  "attributes": {
    "nodeKind": "Page",
    "sourcePath": "docs/specs/platform-gaps/research/fabric-current-state.md",
    "sourceKind": "repo-docs",
    "title": "Research dossier R1 — Fabric current state + audit refresh",
    "displayName": "Research dossier R1 — Fabric current state + audit refresh",
    "slug": "docs/specs/platform-gaps/research/fabric-current-state",
    "articlePath": "wiki/docs/specs/platform-gaps/research/fabric-current-state.md",
    "article": "\n# Research dossier R1 — Fabric current state + audit refresh\n\nDate: 2026-09-27 · Verified against fabric HEAD `5e46b998e5826af3b11fbba0dc7ad4e9d9023e6c` (\"fix(kradle): repository reconcile loop must only adopt its own environment's CRs\") · Author: platform-gaps spec research run\n\nMethod: every claim below was re-derived from source at HEAD. Evidence is `path:line` relative to `C:/work/fabric` unless prefixed `company/` (= `C:/work/company`). CONFIRMED = read directly in code. INFERRED = deduced from adjacent confirmed evidence and marked as such. The prior findings register re-verified here is Appendix A of `company/products/platform/PLATFORM-REMEDIATION-AND-RENAME-ROADMAP.md` (2026-09-14 5-agent audit).\n\n---\n\n## 1. Repo shape at HEAD\n\n- npm-workspaces monorepo (`package.json` `workspaces`): 40+ workspaces across `packages/{adapters/*, genty/*, kradle/*, atlas, babysitter, babysitter-sdk, kip-sdk, trust-core, observer-dashboard}` and `apps/commander`; plus non-workspace trees `library/` (process library), `plugins/`, `blueprints/`, `e2e-tests/`, `docs-site/`.\n- Scale (non-test source files): babysitter-sdk 334 TS files; adapters family ~640 (hooks 137, core 69, tasks 66, gateway 52, codecs 46, extensions 42, cli 37, transport 18, channels 18, policy 14, triggers 13, tools 9, config 9, observability 7, launch 6, plus a Python `adapters/proxy`); kradle/core 69 controller modules; kip-sdk with a single 7,005-line `packages/kip-sdk/src/kip-repo.ts`.\n- Recent churn is the GKE migration (HEAD and 7 prior commits are all kradle/atlas/CI deploy fixes), which is why the D8 refresh below matters: some 2026-09-14 anchors moved files but almost none of the findings were actually fixed.\n- The repo grades its own test reality in `MATURITY-MATRIX.md` (last updated 2026-08-13, i.e., pre-GKE-churn but structurally still accurate — spot-checked below in §4).\n\n---\n\n## 2. Prior findings register — re-verification (D8)\n\nVerdict codes: **STILL-VALID** (reproduced at HEAD), **CHANGED** (partially addressed or moved; residual gap stated), **FIXED** (no longer reproducible). Score: **24 STILL-VALID · 10 CHANGED (all with residual gaps) · 0 fully FIXED** of the 34 distinct register rows.\n\n### Critical\n\n| ID | Verdict | Fresh evidence at HEAD |\n|---|---|---|\n| C1 — journal checksum written, never verified on load | **STILL-VALID** | Checksum computed at write: `packages/babysitter-sdk/src/storage/journal.ts:77-79`. Load path `loadJournal` → `parseJournalFile` (`storage/journal.ts:111-141,151-161`) only `JSON.parse`s; the stored `checksum` field is copied into the event (`journal.ts:132`) and never recomputed or compared anywhere. `loadJournalSafe` (`runtime/replay/effectIndex.ts:374-380`) normalizes parse errors only. |\n| C2 — journal events unsigned | **STILL-VALID** | `appendEvent` payload is `{type, recordedAt, data} + sha256 checksum` only (`storage/journal.ts:72-82`). No SignedEnvelope, no principal. (Signing exists in the platform — trust-core is consumed by adapters/policy/tools/transport and genty-core per their `package.json` deps — but journal events do not pass through it.) |\n| C3 — tool/MCP attestation off by default (opt-in anchor) | **STILL-VALID** (posture unchanged, semantics hardened) | Enforcement activates only when `POLICY_CONFIG_ROOT_FP` is set: `packages/genty/platform/src/harness/internal/createRun/orchestration/policy-enforcement-wiring.ts:123-124` (anchor check) and `:132-137` (fast path: no anchor ⇒ no gate constructed, \"back-compat posture\"). When pinned it is now genuinely fail-closed (deny-all on adapter failure, `policy-enforcement-wiring.ts:139-150`), but there is still no loud journaled \"attestation disabled\" marker for the default run. |\n\n### High\n\n| ID | Verdict | Fresh evidence at HEAD |\n|---|---|---|\n| H1 — no hash chain between events; tail truncation undetectable | **STILL-VALID** | No `prevHash` anywhere in `storage/journal.ts` (write path `:72-82`). `EffectIndex.validateSequence` (`runtime/replay/effectIndex.ts:144-185`) detects seq gaps/regressions *between loaded files*, but deleting the tail N files just shortens the sequence and passes; no head-checksum persisted for comparison. |\n| H2 — invocation key hashes arg *shape*, not value | **STILL-VALID** | `hashArgsShape` (`runtime/intrinsics/task.ts:255-258`) hashes `stableNormalizeShape`, which reduces every primitive to `typeof value` (`task.ts:264-276`, leaf at `:275`). No value digest stored on `EFFECT_REQUESTED`, so a changed arg value replays the stale result silently. |\n| H3 — positional occurrence index shifts on inserted step | **STILL-VALID** | `deriveStableTaskKey` appends a per-shape counter `idx` (`runtime/intrinsics/task.ts:245-253`, counter at `:249-252`). No warning when `idx > 0` is relied upon. |\n| H4 — replay key mismatch fails open (silent re-exec) | **STILL-VALID** | `EffectIndex.getByInvocation` returns `undefined` on miss (`runtime/replay/effectIndex.ts:124-126`); caller then requests a brand-new effect (`runtime/intrinsics/task.ts:94` → `requestNewEffect`). No orphan detection (resolved-but-never-consulted keys are never diffed). |\n| H5 — cancellation is journal-only; live processes leak | **STILL-VALID** | `commitEffectCancellation` (`runtime/commitEffectResult.ts:136-183`) writes `EFFECT_CANCELLED` + result file + registry update; nothing signals or kills a live process. Repo-wide, the only `.kill(` sites in the SDK are hook-subprocess helpers (`harness/unified/subprocess.ts:131`, `hooks/dispatcher.ts:138,262`) — none reachable from cancellation. No run-scoped AbortSignal/PID registry exists. |\n| H6 — effect timeouts configured but never enforced | **STILL-VALID** | `DEFAULTS.timeout: 120000` and `nodeTaskTimeout: 15min` (`config/defaults.ts:64,68`); surfaced in config UX (`cli/commands/configure.ts:147,170`; `config/configValidation.ts:74-76`). No `deadline` field on `EffectAction` (zero grep hits for \"deadline\" in `runtime/` + `tasks/`), no enforcement at dispatch. Only *hook* timeouts are enforced (`hooks/dispatcher.ts:136-139`). |\n| H7 — stop-hook re-implements session precedence | **CHANGED — residual** | `resolveSessionIdFromInput` now prefers hook-input fields and uses `AGENT_SESSION_ID` as fallback (`harness/hooks/stopHookHandler.ts:209-225`, env at `:218-220`; stale-retry against env again at `:294-296`). But the file still never imports `resolveSessionIdWithMarker`/`resolveAmbientSessionId` (zero grep hits), so PID-marker precedence is still bypassed and a leaked `AGENT_SESSION_ID` still shadows the marker whenever the harness omits the input field. |\n| H8 — run:create session bind has no cross-run lock | **CHANGED — residual** | In-process guard added: `addRunToSession` now throws `RUN_ALREADY_ASSOCIATED` unless `retirePrevious: true` (`session/write.ts:130-159`, guard at `:139-146`). But the read-modify-write in `updateSessionState` (`session/write.ts:87-116`) is still lockless (temp-file rename only, `write.ts:48-81`); two concurrent *processes* still last-writer-wins. |\n| H9 — no verifier requires human-principal root | **CHANGED — residual** | `trust-core/src/chain.ts` still has no `requiredRootKind` (zero grep hits for rootKind/human in the file). Human-root checks now exist one layer up: `packages/adapters/policy/src/proven-bridge.ts:92-119` (breakpoint answers must chain to a non-revoked, unexpired `kind === 'human'` trust root) and `verify-envelope-trusted.ts:253-257` (root kind must match required kind). Residual: the trust-core chain verifier itself remains kind-agnostic, so any consumer not going through adapters/policy gets no human-root guarantee. |\n| H10 — attestation producers unwired / off by default | **CHANGED — residual** | Producers are now *wired but opt-in*. Proxy model-attestation seam: `packages/adapters/transport/src/server.ts:1596-1607` (sidecar store + key), enabled only by `config.attestationEnabled === true` (`server.ts:1603`) from `AGENT_MUX_PROXY_ATTESTATION_ENABLED` (`transport/src/config.ts:47`; default `undefined`, `config.ts:21`); streaming sink fails closed to \"no attestation\" (`server.ts:1303-1365`). In-process model-decision signing is wired into the genty turn loop: `packages/genty/core/src/session.ts:1452-1508` (`signInProcessModelDecision` at `:1463`, attach per tool call at `:1508`) but only when `modelAttestationKey` is configured (`session.ts:1460-1461`). Residual: both default OFF; combined with C3's opt-in anchor, the unconfigured platform still runs fully unattested. |\n\n### Medium\n\n| ID | Verdict | Fresh evidence at HEAD |\n|---|---|---|\n| M1 — cancel-vs-complete race → nondeterministic outcome | **STILL-VALID** | Losing committer gets a thrown `RunFailedError` (\"already resolved\", `runtime/commitEffectResult.ts:35-38`; cancellation side `:147-149`) — not an idempotent typed no-op; no cancel-wins/result-wins precedence defined. The run lock (`:25,:139`) serializes the two commits but does not make the loser benign. |\n| M2 — bounded parallel drops `undefined` results / misaligns | **STILL-VALID** | Result collection filters `slot.value !== undefined` (`runtime/intrinsics/parallel.ts:132-137`), so a branch legitimately resolving `undefined` vanishes and positions shift; first non-pending error throws away sibling pendings (`parallel.ts:128-129`). |\n| M3 — parallel strategies discard sibling errors | **STILL-VALID** | `allOrNothing` throws only `errors[0]` (`runtime/parallelStrategies.ts:28-30`); `firstSuccess` treats `undefined` result as failure (`:64`) and throws only the first error (`:75-78`). |\n| M4 — background commit has no incarnation guard | **STILL-VALID** | `createBackgroundEffectRecord` (`runtime/asyncEffects.ts:78-94`) carries no run-incarnation token; nothing rebuilds group state from the journal. |\n| M5 — hook timeout SIGTERM-only, waits on close | **STILL-VALID** | Timeout fires SIGTERM (`hooks/dispatcher.ts:136-139`) then the promise still resolves only on `close` (`:146-153`) — a child that ignores SIGTERM with open pipes hangs the commit. Same pattern at `:262`. No SIGKILL escalation, no detached process-group kill. |\n| M6 — crash cleanup uses 24h staleness, not liveness | **CHANGED — residual** | PID-liveness added for *markers*: `session/cleanup.ts:4` imports `isProcessAlive`, applied at `:78`, dead markers unlinked (`:127-141`); sessions with a terminal run deactivate promptly (`:174-181` via `isRunTerminal`, `:85-109`). Residual: a non-terminal run whose owning process died still waits the full `STATE_STALE_MS = 24h` (`cleanup.ts:7`, used `:179`); `runState.processId` liveness is still not cross-referenced. |\n| M7 — PID-marker session id shared across descendants | **STILL-VALID** | Marker path is `current-session-<harness>-pid-<ancestorPid>` (`utils/sessionMarker.ts:49-52`) — keyed only by harness ancestor PID; no per-session discriminator. (File moved from `session/` to `utils/`.) |\n| M8 — policy gate seams fail open for uncovered actions | **STILL-VALID** | `verifyDispatchAuthorization`: uncovered dispatch → `{ allowed: true }` (`genty/platform/src/harness/internal/createRun/orchestration/policy-dispatch-gate.ts:67-71`); error path also returns allowed at `:96` region. Covered-set is opt-in, not default-covered. |\n\n### Suspected (S)\n\n| ID | Verdict | Fresh evidence at HEAD |\n|---|---|---|\n| S1 — global unhandledRejection capture can cross runs | **STILL-VALID** | `process.on(\"unhandledRejection\", strayEffectHandler)` (`runtime/orchestrateIteration.ts:86-87`, removed `:215`) — process-global, captures a single stray (`capturedStrayEffect`), not scoped by `AsyncLocalStorage` (ALS exists only for process context, `runtime/processContext.ts:47`). |\n| S2 — `resolveAmbientSessionId(undefined)` env-first | **STILL-VALID** | `session/discovery.ts:36-39`: with no harness argument it returns `process.env.AGENT_SESSION_ID` directly, bypassing marker resolution. |\n| S3 — no guard for un-keyed same-shape conditional skipping | **STILL-VALID** (INFERRED from H2/H3 unchanged; no new runtime assertion found in `intrinsics/task.ts`). |\n| S4 — ambiguous stop-hook recovery exit path | **STILL-VALID** (INFERRED: the stale-session retry against raw `AGENT_SESSION_ID` persists, `stopHookHandler.ts:294-296`). |\n| S5 — spawning lives in harness/subprocess layer, uncoordinated with SDK cancel | **STILL-VALID** | Spawn/kill sites are `harness/unified/subprocess.ts:110-140` and `hooks/dispatcher.ts:124-153`; nothing threads them to effect cancellation (see H5). |\n| S6 — brittle checksum canonicalization | **STILL-VALID** | Checksum is over `JSON.stringify(eventPayload, null, 2)` (`storage/journal.ts:77-78`) — insertion-order + formatting dependent; no canonical-JSON helper exists. |\n\n### Capability gaps (CAP), KIP, tests, hygiene\n\n| ID | Verdict | Fresh evidence at HEAD |\n|---|---|---|\n| CAP1 — KIP orphaned from genty sessions | **STILL-VALID** | Zero `kip-sdk`/`@a5c-ai/kip` imports anywhere under `packages/genty` (repo-wide grep). Three disconnected memory systems persist: kip-sdk graph repo; genty `long-term-memory.json` (`genty/platform/src/session/memoryExtraction.ts:45-47`, mirrored in `genty/runtime/src/session/memoryExtraction.ts`, consumed only inside the session modules); kradle git AgentMemory (`kradle/core/src/agent-memory-{controller,import,query,repository-source-controller}.js`). |\n| CAP2 — budgets enforced after dispatch, not before | **STILL-VALID** | The budget check lives in `applyPostEffectOrchestrationOverlays` (`genty/platform/src/harness/internal/createRun/orchestration/effects.ts:661`); `checkBudget` runs at `:681` on cost *already incurred*; over-budget only sets paused-after-the-fact (`:687-695`). No `estimateEffectCost`-style pre-dispatch guard exists. |\n| CAP3 — campaigns / scheduler-preemption absent | **STILL-VALID** | Zero `campaign`/`Campaign` hits in `kradle/core/src`, `kradle/web`, `genty/platform/src` (case-insensitive grep). No scheduler/preemption entity. |\n| CAP4 — improvement outer loop absent | **STILL-VALID** | `kip-sdk/src/learn/` exists (`compile.ts` 242 + `index.ts` 749 lines) but has no incumbent-comparison/promotion logic (zero hits for promote/incumbent) and no consumer orchestrating history→eval→compare→promote. |\n| CAP5 — inference scale-to-zero absent; virtual-model not on infer route | **CHANGED — residual** | Virtual-model matching IS now on the infer route: `packages/kradle/web/app/api/orgs/[org]/inference/services/[name]/infer/route.js:36-45` (`bridge.matchVirtualModel` at `:45`; 93-line route). Residual: scale-to-zero still absent — zero hits for `minScale|knative|scaleToZero` anywhere in `packages/kradle`. |\n| CAP6 — session pause/resume/fork/rewind unwired | **CHANGED — residual** | `genty/runtime/src/session/rewind.ts` and `tree.ts` exist; their only consumer outside the session module is a CLI export command (`genty/cli/src/cli/commands/session/export.ts`). The agent loop has a `'paused'` *status string* (`genty/core/src/loop/types.ts:97`) but zero pause handling in `genty/core/src/loop/agent-loop.ts` (no `pause` hits). Snapshot-at-step-boundaries / mid-loop pause+persist / resume-context restoration remain unimplemented. |\n| KIP-TODO — KeyAuthorization chain / manifest CID / durability | **STILL-VALID** | `kip-sdk/src/kip-repo.ts:4063-4075`: `TODO(M9/T9.6)` genesis-manifest CID re-verification \"not implemented\" (reported `true` unconditionally), `TODO(M9/T9.1-T9.6)` authority checking (`authorityViolations: []` hardcoded), `TODO(M6/M9)` durability tiers (empty arrays). |\n| TEST1 — kip/kradle/atlas tests not in CI | **CHANGED — residual** | Improved: trust-core tests now gated in `ci.yml:177`; kradle-core suite gated in `publish.yml:565-568` (\"Test kradle core\") plus kradle e2e+smoke `publish.yml:423-424`. Residual: root scripts `test:kip`, `test:kradle`, `test:atlas-catalog-contracts`, `test:library`, `test:shared` exist (`package.json`) but are referenced by **no** workflow (repo-wide grep of `.github/workflows/*.yml` = zero hits); kip-sdk's 114 test files are gated only by the single-file `kip-inv12-golden-digest.yml` (runs exactly `src/__tests__/inv12-golden-digest.test.ts`, workflow line 71); atlas is built + graph-verified but its 31 test files are not run by name. |\n| TEST2 — no adversarial ledger tests | **STILL-VALID** | \"tamper\" tests exist only for signed breakpoints (`babysitter-sdk/src/breakpoints/__tests__/enforce-signed-breakpoint.test.ts`); no journal-tamper/truncation/value-drift tests (consistent with C1/H1/H2 being unfixed — the behavior under test does not exist). |\n| HYG1 — no secret redaction in logs/artifacts | **CHANGED — residual** | Partial mitigations landed: task env-var redaction (`babysitter-sdk/src/tasks/kinds/index.ts:257-268`, applied `:64-65`), CLI payload redaction behind `BABYSITTER_ALLOW_SECRET_LOGS` (`cli/main/taskCommands.ts:365`), transport passthrough header redaction (`adapters/transport/src/server.ts:525-550`), and live-stack asserts a `provider-trace-redacted` artifact (`live-stack.yml` install-mode spec). Residual: the general logging layer `packages/adapters/observability/src/logger.ts` / `logger-simple.ts` still has **zero** redact/scrub/mask logic (grep). |\n| HYG2 — version-pin drift; krate-sdk vs kradle-sdk | **CHANGED — residual** | `krate-sdk` naming is gone (zero repo hits) — that half is FIXED. Residual: wildcard workspace deps persist — `\"@a5c-ai/atlas\": \"*\"` (`packages/atlas/webui/package.json:16`), `\"@a5c-ai/genty-ui\": \"*\"` (`genty/desktop-app/package.json:16`, `genty/web-app/package.json:15`), `\"@a5c-ai/kradle-sdk\": \"*\"` (`kradle/web/package.json:21`). observer-dashboard is at 6.0.3 depending on sdk `^6.0.0` (`observer-dashboard/package.json:3,72`). |\n| HYG3 — DuplicateTaskIdError global-registry footgun | **STILL-VALID** | `tasks/registry.ts:39-44` (error class), throw on re-register `:50-52`. No build-time duplicate-id scan in CI. |\n| HYG4 — company-repo Windows-invalid colon paths | **STILL-VALID** | `git -C C:/work/company ls-files` still tracks `docs/LinkedinConnections/Beni/Beni - Connections 1:2.csv` and `…2:2.csv`; on the Windows working tree only `Beni Connections.csv` exists — the colon-named blobs cannot be checked out on Windows. |\n\n---\n\n## 3. Functionality wiring per subsystem (what is end-to-end vs orphaned/stubbed)\n\n### 3.1 adapters (harness gateway family)\n- **Wired end-to-end:** hooks family (core+cli+12 per-agent adapters: claude, codex, gemini, copilot, cursor, pi, oh-my-pi, opencode, openclaw, antigravity, hermes, genty — `packages/adapters/hooks/*`), core, cli (hosts the live-stack e2e harness under `adapters/cli/tests/live-stack/`), codecs, transport (model proxy w/ attestation seam), gateway (SQLite control-plane gateway, Node-engine-floor gated in CI), tasks, extensions, triggers, channels, policy, observability. All are built and (except tools/config/launch) test-gated in `ci.yml`/`publish.yml` (§4).\n- **Protocol reality (D6 input):** there is **no ACP anywhere** — zero hits for `agentclientprotocol`/`agent-client-protocol`/`ACP` under `packages/adapters`. The harness-driving layer speaks fabric's own event/hook model; ACP-canonical re-platforming is greenfield, not a refactor of an existing ACP surface.\n- **No Grok Build support:** the 12 hook adapters (`packages/adapters/hooks/`) and the live-stack agent map (`live-stack.yml`, agents map — claude, codex, pi, gemini, copilot, cursor, hermes, opencode, openclaw, omp, droid, amp, genty, antigravity) contain no grok entry (zero case-insensitive hits repo-wide in adapters + workflows).\n- **Stub/empty:** `adapters/harness-mock/src/multi-execution.ts` is **0 lines** (still, per WS-9); `adapters/proxy` is a separate Python package (own pyproject/Docker), outside the TS test lattice.\n\n### 3.2 kradle (control plane)\n- **Wired:** 69 controller modules in `kradle/core/src` (dispatch, approval, memory, persona, workspace, writeback, secrets, transport-binding, triggers, subagents, gitops, gitea backend, event bus, control/data plane split). `kradle/web` (Next.js API routes) fronts them, e.g. the inference infer route calling the virtual-model bridge (`kradle/web/app/api/orgs/[org]/inference/services/[name]/infer/route.js:36-45`). Helm charts (`kradle/charts`), installer workspace, and jitsi-agent-sidecar exist; publish.yml deploys to GKE (`publish.yml:792 deploy_kradle`) and runs a live e2e+smoke (`publish.yml:423-424`) — the GKE cutover completed per the company-repo migration commits.\n- **Gaps:** campaigns/scheduler-preemption entities absent (CAP3); inference scale-to-zero absent (CAP5 residual); `kradle/sdk` and `kradle/cli` have zero tests (MATURITY-MATRIX.md, kradle-sdk/cli row); `kradle/web`'s 30 spec files are not run by any workflow (kradle-web row + workflow grep). Realtime media plane is control-plane-real/media-stub (see `docs/research/realtime-agent-gaps.md` — §5).\n\n### 3.3 genty (agent runtime + shells)\n- **Wired:** core (session/turn loop with in-process attestation seam, `core/src/session.ts:1452-1508`), platform (135-test harness package; policy wiring §2 C3/M8), runtime, cli, tui (90 source files), ui (149), web-app (thin shell over ui, Playwright-e2e-gated in `ci.yml`).\n- **Orphaned/stubbed:** the 7 device shells — desktop-app (10 source files), mobile-android (23), mobile-ios (22), tv-androidtv (18), tv-appletv (16), watch-watchos (25), watch-wearos (22) — remain L0 scaffolds with ~0 tests and no CI gating (MATURITY-MATRIX.md \"genty app shells\" row). WS-11 disposition is still undecided. Session rewind/tree modules orphaned from the loop (CAP6). Memory extraction writes `long-term-memory.json` used nowhere outside the session module (CAP1/WS-7).\n- **Relevant to D2(c):** these shells are exactly what the t3code apps would retire; only web-app has real e2e protection today.\n\n### 3.4 babysitter-sdk (+ `packages/babysitter` metapackage, `library/`)\n- **Wired:** the whole run lifecycle — journal, replay engine, effect index, intrinsics (task/parallel/breakpoint/hook/subprocess/sleep), session management, harness hooks, CLI, breakpoint trust enforcement (`breakpoints/enforce-signed-breakpoint.ts`), 173 test files, `test:sdk` + architecture gate in `ci.yml:114-132`.\n- **Core correctness debt:** the entire §2 C1/H1–H6/M1–M5/S1–S6 cluster lives here and is essentially untouched since 2026-09-14.\n- `library/` (processes/methodologies/skills) ships in-repo; `test:library`/`test:shared` scripts are not CI-wired (workflow grep).\n\n### 3.5 kip-sdk\n- Substantial, isolated: 7,005-line `kip-repo.ts`, learn/, miner/, rdf/, mcp/, 114 test files. **Zero consumers in genty/kradle/adapters** (CAP1). Security TODOs open (KIP-TODO, `kip-repo.ts:4063-4075`). CI gate = one golden-digest test file (`kip-inv12-golden-digest.yml:71`).\n\n### 3.6 atlas\n- Graph catalog consumed by effectively the whole adapters family (`\"@a5c-ai/atlas\"` in adapters channels/codecs/core/extensions + every hooks adapter `package.json`); built early in every CI lane; webui deployed (`publish.yml:646 deploy_atlas_webui`). Its 31 in-package tests and `test:atlas-catalog-contracts` are not invoked by any workflow. The hardcoded-literals backlog (~201 harness literals that should derive from the graph) is still the standing atlas-adoption gap (`docs/hard-coded-and-should-be-in-graph-gaps-backlog.md`).\n\n### 3.7 trust-core\n- Wired as a dependency of adapters/{core,policy,tools,transport} and genty/core (package.json deps), tests gated (`ci.yml:177`). Only 8 test files. Chain verifier still kind-agnostic (H9 residual).\n\n### 3.8 observer(-dashboard)\n- Next.js dashboard + CLI at v6.0.3; 105 test files; own CI job (`ci.yml:459 observer-dashboard`, `test:observer` at `ci.yml` step ~line 498) + `publish.yml validate_observer_and_compiler:578`. Playwright e2e config exists in-package (`observer-dashboard/playwright.config.ts`, `e2e/`) — not seen invoked in ci.yml's observer job (INFERRED ungated).\n\n### 3.9 commander (apps/commander)\n- Rich operator board (51 test files, Playwright e2e in-package) that **runs entirely on a mocked, seeded backend by design**: \"v5 runs entirely on a mocked, seeded, deterministic backend — but every frame mirrors the real gateway/kradle/babysitter contracts\" (`apps/commander/README.md`, intro paragraph; `SPEC-LIVE-BACKEND.md` exists as the unbuilt plan). **No workflow references commander at all** (grep of `.github/workflows/` = zero hits). It is the largest fully-orphaned functional surface in the repo: real UI, no live wiring, no CI.\n\n### 3.10 Remote access (D12 pre-check)\n- **CONFIRMED absent:** zero hits for `tailscale`, `cloud relay`, `cloudrelay` in `packages/` (ts/js, excluding node_modules/dist). No ssh-tunnel/hosted-relay story exists anywhere in fabric. The D12 guaranteed gap is real, not just decreed.\n\n---\n\n## 4. Test/CI reality\n\n### 4.1 What actually gates PRs (`ci.yml`, jobs at :15, :54, :319, :372, :459)\n- `docs-quality` — docs QA gates.\n- `test` (Lint, Tests, Package): SDK lint (`:82-85`), metadata verify, release-tooling tests, binary-rename guardrail, metapackage shim tests, architecture boundary gate (`:114-117`), `test:sdk` (`:129-132`), tasks-adapter tests + packaged-surface parity (`:139-154`), hooks-adapter tests, **trust-core + policy-adapter + tools-adapter tests** (`:171-183`), triggers unit/e2e/coverage, genty-tui + comm-adapter `verify:release`, realtime-flow tests, **genty-web-app Playwright browser e2e** (step \"adapters webui browser e2e\"), extensions tests, **genty-core + genty-platform tests**, plugin-bundle generation.\n- `gateway-node-engine` — adapters-gateway tests on a Node version matrix + engine-floor test (`:319-`).\n- `workspace-coverage` — transport-adapter build/lint/typecheck/test + migration scorecard, cloud workspace `test:cloud`/`verify:cloud-release` (`:372-457`).\n- `observer-dashboard` — build + `test:observer` (`:459-505`).\n\n### 4.2 What gates releases (`publish.yml` jobs: lint:39, build_all:68, validate_core:203, validate_mux:276, validate_cloud:457, validate_kradle:517, validate_observer_and_compiler:578, deploy_atlas_webui:646, deploy_kradle:792, deploy_staging_cloud:1285)\n- Adds: kradle-core node:test suite (`:565-568`), kradle live e2e + smoke against the deployed stack (`:423-424`), cloud release verification, GKE deploys.\n\n### 4.3 Live per-harness e2e (the strongest thing fabric has)\n- `live-stack.yml` (push + dispatch): builds everything, then a matrix over an **agent map of 14 harnesses** — claude(-code), codex, pi, gemini(-cli), copilot(-cli), cursor(-cli), hermes, opencode, openclaw, omp, droid, amp, genty, antigravity (agents map inside the Compute Matrix job) — × models (gpt-5.5, gemini-3.1-pro/3.5-flash, claude-sonnet-4-6) × install modes (vanilla / babysitter-plugin) × interaction modes, asserting per-lane artifacts (`adapters-events`, `transport-adapter-trace`, `provider-trace-redacted`, trace ids). Push defaults exercise claude-code, codex, pi, antigravity + the genty runtime-cli lane.\n- `live-stack-published.yml` re-validates the *published* plugin (documented marketplace install lanes), plus `failure-triage-live-stack.yml`, `live-stack-gardening.yml`, `qa-daily.yml`.\n- **Status vs D7's six required harnesses** (per `MATURITY-MATRIX.md` per-agent rows, 2026-08-13, cross-checked against the workflow map): Claude Code GREEN, Codex GREEN, Cursor failing (#562), OpenCode skipped/failing, Antigravity failing (#945; active churn — HEAD~7 `18e5a7de8` fixes antigravity hook mappings), **Grok Build entirely unsupported (no adapter, no lane)**.\n\n### 4.4 Per-package suites and the gating holes\nTest-file counts at HEAD (find `*.test.*|*.spec.*`, excluding node_modules/dist): babysitter-sdk 173 · adapters 353 · genty 251 · kradle 130 · kip-sdk 114 · observer-dashboard 105 · commander 51 · atlas 31 · trust-core 8.\n\nUngated at HEAD (script exists / files exist, no workflow invokes them — all CONFIRMED by workflow grep unless noted):\n1. `test:kip` (kip-sdk full 114-file suite; only INV-12 golden digest gated).\n2. `test:kradle` root script (kradle gated only via publish.yml, not PR CI).\n3. `test:atlas-catalog-contracts` + atlas's 31 tests.\n4. `test:library`, `test:shared` (process library).\n5. genty-runtime (19 tests), genty-cli (10), genty-ui (18) — built only (MATURITY-MATRIX rows; matrix cross-checked accurate on method).\n6. kradle-web 30 spec files — image built, tests never run.\n7. adapters-tools 6 tests — not in any test enumeration.\n8. apps/commander — 51 test files + Playwright, zero workflow references.\n9. genty device shells — nothing to run (L0).\n- adapters-config / adapters-launch / kradle-sdk / kradle-cli: zero test files at all.\n\n### 4.5 Whole-platform e2e (D7(b) input)\nWhat exists: live-stack \"documented install\" lanes (published plugin install → run → hook load, 3 OS), kradle deployed-stack e2e + smoke (`publish.yml:423-424`), `g0-rt-jitsi-e2e.yml` (meeting-agent dispatch), `e2e-tests/` fixture projects driven by `test:e2e:live-stack:*`. What does **not** exist: a single flow asserting *packaged install → create run → dispatch → agent session → journal → UI assertions* — the UI ends (observer, kradle-web, commander) are never asserted inside any live lane (observer/kradle-web/commander gating status above; live-stack asserts artifacts and traces, not UI state).\n\n---\n\n## 5. Pre-existing gap docs absorbed (reference these; do not re-derive)\n\n| Doc | What it is / standing value |\n|---|---|\n| `MATURITY-MATRIX.md` | Per-component test-gating grades L0–L4 with workflow-line evidence (2026-08-13). Use as the baseline for 30-testing.md; §4 above refreshes its deltas (trust-core now ci-gated; live-stack agent map now 14). |\n| `docs/agent-layer-gaps.md` | 386-line inventory: 47 agent-core gaps (no streaming, no multi-turn history, token usage discarded, browser tool fragile, …) + runtime/platform/adapter gaps. Feeds 20-functionality-coverage genty/agent-layer work packages. |\n| `docs/atlas-library-gaps.md` | Graph↔library coverage report (2026-05-07): 456/456 skill-areas connected; 29 roles intentionally skipped. Mostly CLOSED — cite as done, don't respec. |\n| `docs/hard-coded-and-should-be-in-graph-gaps-backlog.md` | ~201 hardcoded harness literals that should derive from the atlas graph (per-category counts + severities). Open architectural debt relevant to both t3code migration seams and coverage spec. |\n| `docs/research/realtime-agent-gaps.md` | Voice/video harness register (2026-06-23): control plane real, media plane stub; G0 socket client DONE, live meeting dispatch proven, current blocker cluster capacity. Coverage-spec input for the realtime lane. |\n| `docs/harness-features-backlog/gaps/` | 149 gap files across 22 categories (delegation, breakpoints, observability, remote-integration, session-management, …). The canonical fine-grained backlog; the coverage spec should absorb by category reference, not duplicate. |\n| `docs/genty-features-backlog-updated/gap-status-matrix.md` | 165 rows, **all marked CLOSED** — the genty features backlog claims full closure. Treat CLOSED claims as *claims*: spot-verified only via the phase2/3 correction files next to it. |\n| `docs/adapters/terminology-and-structure-gaps/` | Rename mechanics (packages, binaries, env vars, dirs). OUT of scope per D14 — cite only to *exclude*. |\n| `docs/v6-spec-and-roadmap/` (incl. `current-state.md`) | Prior architecture/roadmap docs; superseded in authority by this spec effort but useful for package-spec history. |\n| `company/products/platform/PLATFORM-REMEDIATION-AND-RENAME-ROADMAP.md` | The prior program roadmap (WS-1…WS-11 remediation + RN rename track) whose Appendix A register §2 refreshes. WS-1–WS-6 (ledger/replay/attestation/exec-control/session/parallel) map ~1:1 onto surviving findings. |\n\n---\n\n## 6. CONFIRMED vs INFERRED summary\n\n- CONFIRMED: every table row in §2 except S3/S4 (marked INFERRED inline); all §3 wiring claims (each backed by a grep/read cited above); all §4 gating claims (workflow files read; script-to-workflow greps run at HEAD).\n- INFERRED (flagged): S3, S4 still-valid (from unchanged surrounding code); observer-dashboard Playwright e2e ungated (config exists, no invoking step found); MATURITY-MATRIX per-agent GREEN/FAIL statuses are the repo's own 2026-08-13 evidence, not re-run live for this dossier.\n\n---\n\n## Spec inputs\n\nConcrete facts the spec authors MUST build on:\n\n1. **Audit refresh outcome (D8):** 24 of 34 register findings STILL-VALID, 10 CHANGED-with-residual, 0 fully FIXED. The survivor set to absorb into `20-functionality-coverage.md` as work packages: C1, C2, C3, H1–H6, M1–M5, M7, M8, S1–S6, CAP1–CAP4, KIP-TODO, TEST2, HYG3, HYG4 (still-valid) **plus** the residuals of H7, H8, H9, H10, M6, CAP5, CAP6, TEST1, HYG1, HYG2 (each residual is stated verbatim in §2 and is the work-package objective).\n2. **Ledger cluster is untouched:** no checksum verification on load (`storage/journal.ts:151-161`), no signing (`:72-82`), no hash chain, canonicalization = `JSON.stringify(…, null, 2)` (`:77`). Any provenance claim in specs must treat WS-1 as open.\n3. **ACP is greenfield (D6):** zero ACP code exists in `packages/adapters`. The migration spec re-platforms fabric's bespoke event/hook model onto ACP; there is no partial ACP surface to extend.\n4. **Harness surface today:** 12 hook adapters (claude, codex, gemini, copilot, cursor, pi, oh-my-pi, opencode, openclaw, antigravity, hermes, genty); live-stack matrix maps 14 agent ids. **Grok Build requires a brand-new adapter + lane** (D7(a)). Cursor/OpenCode/Antigravity lanes exist but are red/skipped (#562, —, #945).\n5. **Whole-platform e2e gap (D7(b)):** no lane asserts packaged-install → run → dispatch → session → journal → **UI**; observer-dashboard e2e, kradle-web specs (30 files), and commander (51 files) are all CI-orphans.\n6. **Unit-floor gaps (D7(c)):** ungated suites enumerated in §4.4 (kip 114 files, atlas 31, genty-runtime/cli/ui 47, kradle-web 30, adapters-tools 6, commander 51, `test:library`/`test:shared`); zero-test packages: adapters-config, adapters-launch, kradle-sdk, kradle-cli; empty file `adapters/harness-mock/src/multi-execution.ts` (0 lines).\n7. **genty shell retirement (D2c):** device shells are 10–25 source files each, L0, ungated — retirement in favor of t3code apps destroys almost no tested functionality; only `genty/web-app` (Playwright-gated) and `genty/ui`/`tui` carry real surface to preserve or map.\n8. **Remote access (D12):** zero ssh-tunnel/tailscale/relay code in fabric — the hosted-remote-access work package starts from nothing.\n9. **Commander is contracts-complete but mock-only** (`apps/commander/README.md`; `SPEC-LIVE-BACKEND.md` unbuilt) — a candidate work package: wire to the live gateway/kradle or descope.\n10. **Memory story is still three-way split (WS-7 decision pending):** kip-sdk (no consumers), genty `long-term-memory.json` (session-module-local), kradle AgentMemory controllers (live). The coverage spec must force the ADR.\n11. **Attestation posture:** producers exist but everything is opt-in (POLICY_CONFIG_ROOT_FP, AGENT_MUX_PROXY_ATTESTATION_ENABLED, modelAttestationKey); uncovered dispatches allowed by design (`policy-dispatch-gate.ts:67-71`). Default-covered/fail-closed flip (WS-3) is unshipped.\n12. **Budget enforcement is post-hoc** (`orchestration/effects.ts:661,681`); campaigns/scheduler/preemption and inference scale-to-zero absent; virtual-model routing on the infer route landed (`infer/route.js:36-45`).\n13. **CI job map to modify for 30-testing.md:** `ci.yml` jobs {docs-quality:15, test:54, gateway-node-engine:319, workspace-coverage:372, observer-dashboard:459}; `publish.yml` validate jobs {core:203, mux:276, cloud:457, kradle:517, observer_and_compiler:578}; live workflows {live-stack.yml, live-stack-published.yml, g0-rt-jitsi-e2e.yml, kip-inv12-golden-digest.yml, qa-daily.yml}.\n14. **Version hygiene residue for packaging spec:** wildcard `\"*\"` workspace deps at `atlas/webui/package.json:16`, `genty/desktop-app/package.json:16`, `genty/web-app/package.json:15`, `kradle/web/package.json:21`.\n15. **Pre-existing gap corpora to reference (not duplicate):** the nine docs in §5, especially `docs/harness-features-backlog/gaps/` (149 files) and `docs/agent-layer-gaps.md` for the coverage spec, and `MATURITY-MATRIX.md` for the testing spec baseline.\n",
    "documents": []
  },
  "outgoingEdges": [],
  "incomingEdges": [
    {
      "from": "page:docs",
      "to": "page:docs-specs-platform-gaps-research-fabric-current-state",
      "kind": "contains_page"
    }
  ]
}

Shortcuts

Back to overview
Open graph tab