Repository navigation
[PORT-002][RFC][P0] Define TableEvent v1 and prove table-kit → dmcheck compatibility with a golden session #8
Description
Decision requested
Define the minimum table.event/1.0 envelope needed to make table-kit’s documented dmcheck compatibility real, then prove it with an installed-artifact golden session.
Priority: P0 — blocks dependable cross-tool use.
Evidence confidence: 99%. The exact schema remains an RFC decision.
Problem / evidence
The promised direct ledger handoff is not currently compatible. table-kit writes operational rows using fields such as actor and text; dmcheck expects transcript rows using author and content plus a separate engine-ledger shape. Event identity, source sequence, correlation, visibility, version, and provenance are inconsistent or absent. A direct handoff can silently produce zero compatible messages and a false-clean result.
CharacterCheck and srdcheck do not currently claim to consume a live session ledger. Their outputs should be joinable by stable references without expanding their product boundaries.
Proposed v1 scope
Publish a discriminated table.event/1.0 envelope with:
- immutable event, campaign, and session IDs;
- source kind/instance/native ID/sequence and an honestly defined attestation state;
- occurred and recorded timestamps;
- stable principal, actor, controller, and role;
- event type and typed payload;
- correlation and causation IDs;
- audience, visibility, and sensitivity;
- provenance:
observed | derived | inferred | reported | decided; - optional integrity predecessor/hash whose trust meaning is defined by the authority RFC.
The minimum v1 families are session, observed message/delivery/gap, turn/action, roll, narration/obligation, and evaluation. The RFC must explicitly classify consent, feedback, correction, ruling, and state families as v1 or reserved roadmap namespaces rather than silently converting the current “example, not a framework” into a full runtime specification.
Acceptance criteria
- An ADR assigns responsibility boundaries between table-kit, dmcheck, adapters, and any future host.
- Versioned JSON Schema, examples, and generated types ship independently of a source checkout.
- Explicit adapters convert current table-kit rows and Discord records into dmcheck transcript and engine semantics.
- Zero-compatible input refuses loudly; no mapping may silently drop all evidence and return clean.
- One golden session contains a clean path, a conduct finding, a legal Reaction, a transport gap, an obligation/narration case, and explicit session closure.
- table-kit and dmcheck consume their relevant events and preserve joinable evidence references.
- A proposed host/adapter can join CharacterCheck and srdcheck results by stable session/entity/correlation references without requiring those packages to consume TableEvent directly.
- Unknown future event types yield
unsupportedor structured skip, never a crash or false clean. - Document a future N/N-1 compatibility policy plus a migration adapter from the current unversioned ledger.
- Platform-native IDs and sequence are treated as provenance; they are not described as cryptographic authentication by themselves.
Required tests
- End-to-end golden session using installed table-kit and dmcheck artifacts.
- Duplicate, out-of-order, missing-sequence, forward-schema, corrupted-event, and zero-compatible cases.
- Exact event identity and correlation preservation through adapters.
- Explicit proof that current field mappings cannot silently discard all evidence.
Dependencies
Can proceed in parallel with EvaluationResult. The authority/threat model must run alongside this RFC and gate the final attestation, visibility, and integrity semantics.
Suggested labels: P0, RFC, cross-repo, architecture, schema, interoperability, diligence, blocks-live-use.
Scope note: This is a cross-repository architecture proposal hosted temporarily in table-kit because this repository currently owns the session ledger and documents sibling-tool compatibility. It does not assert that table-kit already provides a suite host/control plane, or that dmcheck, charactercheck, and srdcheck currently consume a common event protocol. Repo-local containment work should proceed independently.
Activity
chaoz23 commentedon Aug 2, 2026
Foundation is implemented in draft PR #11: the packaged table.event/1.0 schema, contiguous session sequence, typed initial event families, golden D&D session, generated declarations, and duplicate/missing/out-of-order/mixed-session refusal. Keep this RFC open for explicit legacy table-kit and dmcheck adapters plus the installed-artifact end-to-end run.
chaoz23 commentedon Aug 2, 2026
Dependent consumer implementation is now available as chaoz23/dmcheck#8 at exact head d09d5b3d68ae9575e121670d877949766be0d2e0. It consumes table.event/1.0 JSON/JSONL, preserves event/correlation IDs, fails closed on transport gaps, future schema/types, zero-compatible input, and ambiguous roll obligations, and deliberately does not project action.declared as an authoritative engine act. The exact PR #11 golden stream returns typed incomplete for evt-007 with no findings. Local suite: 195 tests + 196 subtests; cold-wheel adapter gate passes; both hosted Python 3.10/3.14 push and PR matrices pass. dmcheck#8 remains draft and explicitly depends on table-kit#11; this RFC stays open for the legacy table-kit adapter, shared installed-wheel conformance, and result projection.
chaoz23 commentedon Aug 2, 2026
Second dependent implementation is now available as stacked draft PR #12 at exact head ebf1b6a (base: PR #11 branch). It adds deterministic legacy-ledger -> table.event/1.0 migration, separate output, machine-readable coverage/refusals, self-attested-only provenance, exact roll/obligation/narration causality, redacted inbound preservation, and malformed/zero-compatible refusal. Local: 340 Python tests + 73 subtests and 18 Node tests. Hosted Python 3.9/3.12 and Node checks pass, including sdist and cold-wheel migration. Cold-installed table-kit + dmcheck wheels prove redacted input becomes dmcheck incomplete/table_event.content_redacted with no findings. PRs #11, #12, and dmcheck#8 remain draft; PORT-002 stays open for table.evaluation projection and shared installed conformance.
chaoz23 commentedon Aug 2, 2026
The TableEvent compatibility chain now has a result-contract consumer:
chaoz23/dmcheck#9 consumes the strict adapter from dmcheck#8 and emits the
table.evaluation/1.0envelope from table-kit#11. The optional legacy producerremains table-kit#12.
Hosted CI is green on Python 3.10 and 3.14 at
17e3a42cbca9182727a168c795f72c4a7b64eac1. Transport gaps, redacted requiredcontent, unsupported variants, malformed input, and zero-compatible streams
cannot become clean results; exact TableEvent evidence IDs survive into public
findings. Cold-wheel coverage exercises the installed CLI outside the source
checkout. No release or merge is implied.
chaoz23 commentedon Aug 2, 2026
The installed table-kit → dmcheck compatibility gate is now hosted-green in
draft #13 at
cefc204ec018c3254a53899b56250ae5b2cf3b30.It pins dmcheck#9 by immutable commit, builds/cold-installs both candidate
wheels outside their checkouts, and exercises five cases: complete clean,
exact-evidence finding, canonical transport gap, byte-deterministic legacy
migration with native IDs retained only as provenance, and redacted content.
Both event and evaluation envelopes pass the packaged schema and semantic
validators. No release or merge is implied.
chaoz23 commentedon Aug 3, 2026
Status reconciliation (2026-08-03): keep open; the v1 event contract, migration, and first consumer chain are merged, the canonical platform is not complete.
PR #11 delivered table.event/1.0, the golden session, invariants, and compatibility ADR; #12 delivered deterministic legacy projection; dmcheck #8–#9 and table-kit #13 prove an installed fail-closed chain.
Remaining: reviewed production event families, host-owned ingest/cursors/descriptors, live gap/replay/redaction proof, and N/N-1 evidence once a second minor exists. Tracked by #17 and #18.