Implement a deterministic trusted-intake boundary which binds every captured
human message to a verified stable participant, a persistent governance role
(manager, user or dev) and one ticket. The assignment is stored in a
repository-level participant registry, so it remains stable across tickets.
Filename prefixes are projections of verified identity and role; they are never
accepted as identity evidence by themselves.
The boundary will expose one domain contract through a Python shell CLI, the existing TypeScript CLI, MCP tools and an A2A skill. All transports call the same command/query handlers and return the same stable diagnostic codes. The required decision path is deterministic and does not call an LLM.
The implementation uses CQRS and event sourcing:
manager-*, user-* and dev-* Markdown views;The canonical transport envelope is Protobuf. Strict JSON Schemas validate the JSON representation and command payloads. TypeScript and dependency-free Python codecs support the limited wire types used by the envelope and are checked against shared golden vectors.
This interfaces ticket owns only src/communication/**, src/interfaces/**,
src/cli.ts and matching interface tests. It will not change package,
top-level schema, Docker, SDK or documentation paths. If such a shared path is
proved necessary, work stops and a separate integration ticket is planned and
approved instead of widening this scope.
kind and governanceRole are separate fields. Humans have a stable
participant-id and one primary governance role; agents retain an agent:*
identity and cannot acquire a human role. Roles grant explicit capabilities,
not implicit inheritance:
manager: assign participants/tickets, approve plans and accept outcomes;user: submit requirements and accept business behaviour;dev: make/review technical decisions and operate an AI from an IDE;Role changes are versioned commands authorized by the configured manager or a trusted intake policy. Historical role files are migration evidence only and cannot silently change the registry.
Commands include RegisterParticipant, BindExternalIdentity, AssignRole,
CaptureMessage, RebuildProjection and VerifyEventStream. Queries include
ResolveParticipant, GetRole, GetTicketConversation, GetCommandStatus
and ValidateProjection.
Events include ParticipantRegistered, ExternalIdentityBound,
GovernanceRoleAssigned, MessageCaptured and ProjectionRebuilt. Rejected
commands produce a sanitized audit result, not a successful domain event.
The response envelope contains at least: schema version, message ID, correlation/causation IDs, authenticated principal, aggregate ID, expected and actual stream versions, idempotency key, timestamp, payload hash, diagnostic code, remediation and retryability.
human|agent kind, stable identity, manager|user|dev governance role,
verified external principals and explicit capability grants.manager-*, user-* or dev-* file per ticket and detects projection
drift without overwriting untrusted content..proto contract defines the canonical envelope and
command/query/event variants; TypeScript and Python round trips match
byte-level golden vectors and preserve unknown-field compatibility.T2C-INTAKE-* diagnostics cover unknown/unverified actor,
role mismatch, unauthorized command, filename mismatch, version conflict,
duplicate request, broken chain, invalid schema/wire data, secret input,
unsafe path, projection drift and storage failure, each with remediation.user-* remains readable; migration to role-bound v2 is
explicit, dry-runnable and conflict-producing when history is ambiguous.The user explicitly instructed the agent to implement (“wdrażaj”) in chat on
2026-08-01 after the agent restated that ticket-020 and AC-01..AC-19 required
explicit approval. This authorizes the interactive EDIT phase only; it is
not trusted merge evidence.
package.json, Docker files,
top-level schemas/** or documentation requires a separate integration
ticket, dependency/license review and fresh approval.T2C-INTAKE-* diagnostic catalog and Draft 2020-12 schemas.governed-intake.proto.npm run verify: PASS, 335 tests, 334 passed, 1 explicit missing-JDK skip,
0 failed.make e2e-core: PASS in network-isolated Docker; 335 tests, 328 passed,
7 explicit optional-toolchain skips, both gold datasets, CLI, MCP, A2A and
available SDK examples passed.governance) and 020 (interfaces); its remaining four
findings belonged to the then-active ticket-019. Policy 0.10.0 now treats
ticket-019 as backlog and the repository gate passes.06a2faa is an ancestor of the protected
main@68b4514; no implementation replay or history merge is required.npm run verify passes: 335 tests, 334 passed, 0 failed and one
explicit missing-JDK skip; hosted CI separately passes the required JDK 17
adapter.base64.b64decode(..., validate=True) and maps to
T2C-INTAKE-INVALID-WIRE; the stale PR #21 refactor that weakened this path
was closed without merge.main@68b4514 passed hosted governance, full verify, Docker smoke and
the required Java adapter. Local policy 0.10.0 governance also passes with
0 errors and 0 warnings.