Certification map
Who. The AcmeTest engineer’s tech lead certifying the integration before client code is written.
Job. Verify that no consequential choice will be discovered during integration.
12 / 12standard API axes pinned
10 / 10bank-specific seams pinned
0AlphaTest-owned item bodies, scores, pools, or memberships
3independent capability gates
| Capability | Current release posture | Required terminal proof |
| Fixed mastery-gate forms | Open · owner-certified
SAME_BLUEPRINT_FIXED_FORMS-2026-07-21 | Authenticated create returns 202; live Incept generation produces N forms; QTI ingest/scoring and Content registration/read-back yield assignable native test IDs. Positive receipt: bop_5WX5F484ZYGMHC9K58VSEMD5PP. |
| Adaptive | Closed pending publication | Exact replay bop_3BZPK6BKJ91MS9RP4VXRAYR7KG must reach ready/assignable:true/zero gaps. QTI proves the six-member order; Content kc-tags proves exactly one matching primary KC per member. Stable alias stays unchanged until the receipt is published. |
| 17-form legacy alias proof | Closed pending publication | Load timeback-alphatest-legacy-forms-v1, preserve its sha256: identity, resolve all 17 owner aliases in order, return bankId:null / ownerMutationCount:0 / assignable:false, and terminate ready/zero gaps on the exact immutable deployment. |
| Required seam | Decision | Release proof |
| Incept skill-pack generation | SHIP · manifest v1 | Authenticated slot returns ok:true, outcome:artifact, run ID, artifact hash. |
| Per-slot standard / DOK / TEI verification | SHIP | Live CASE identity plus exact requested values. |
| Misconception-tagged distractor verification | SHIP | Every wrong selected-response choice retains one distinct named Incept misconception through QTI conversion and owner read-back; invalid mappings quarantine the item. |
| Incept JSON → QTI 3.0 | SHIP | Deterministic package hash and validator pass. |
| Platform3 QTI ingest and scoring | SHIP / SHIP | Native IDs, read-back hash, correct-response runtime outcome. |
| Content test_bank registration | SHIP | Create + replay + authoritative Content state/detail/member read-back; fixed mastery gates additionally require a same-tenant Administration create acceptance probe. |
| Adaptive-pool evidence projection | SHIP · publication gated | Root + ordered identities come from QTI; each member’s exactly-one primary KC comes from Content GET .../items/{contentId}/kc-tags; repeat reads preserve ETag/hash. |
| Unsupported type reporting | SHIP | Slot-level manifest gap and linked upstream issue; never substitution. |
| 17 legacy TimeBack forms | SHIP · publication gated | The governed collection—not a caller list—is loaded; its sha256: identity and 17 ordered QTI version→artifact→Content aliases agree; the proof returns aliases[17] without creating a bank, membership, or any owner mutation. |
| Weak-item regeneration and rotation | SHIP | A Reports revision order triggers live Incept replacement; complete re-verification precedes append-only Content membership rotation with old/new provenance. |
Wire flow and release boundary
- Bind the immutable envelope. Use caller tenant
reviewer-bank (33979ed1-36ac-4973-8b2e-181f311c0d5f) plus the exact server-configured QTI_PLATFORM_TENANT_ID on one immutable hostname; never demo fixtures. - Authorize by owner. Require distinct server-held Content, QTI, and CASE credentials (plus Incept for generation); no shared
PLATFORM3_JWT fallback. - Resolve and generate. Read the Content test_spec and CASE identities, then invoke live Incept manifest v1 and generation.
- Convert and score. Deterministically turn returned artifacts into QTI 3.0, ingest, read native identity, and score the expected answer through Platform3 QTI.
- Reconcile adaptive ownership. Preserve QTI root/member order, join every native member to Content, and require exactly one primary Content KC matching its blueprint slot.
- Replay legacy ownership without mutation. Load
timeback-alphatest-legacy-forms-v1, validate its canonical hash, resolve all 17 ordered aliases, and assert bankId:null, ownerMutationCount:0, and assignable:false. - Assert, don’t merely poll. Fixed, adaptive, and legacy must each terminate
ready with zero gaps and sanitized traces; any other terminal fails conformance. - Prove isolation. The owning tenant reads
200; the same resource under another tenant and an unknown ID share one non-enumerating 404 shape. - Publish per mode. Fixed is published now. Adaptive and legacy public admission stay
424 until their own receipts are explicitly recorded; one lane cannot open another.
Public API boundary
| Method and path | Decision | Success boundary |
POST /v1/bank-generations | One fixed-form or adaptive operation; Idempotency-Key required. | 202 when the requested mode is certified and its preflight passes. Fixed certification is independent of adaptive. |
POST /v1/legacy-bank-imports | The governed all-17 collection; never regeneration, caller-supplied membership, or owner mutation. | 202 only after legacy certification and tenant-scoped identity preflight; ready returns aliases[17], bankId:null, ownerMutationCount:0, assignable:false. |
GET /v1/bank-operations | Tenant list with bounded filters, sort, cursor, modifiedSince. | 200 page. |
GET /v1/bank-operations/{operationId} | Phase, counts, terminal refs, ETag. | 200 tenant-scoped snapshot. |
GET /v1/bank-operations/{operationId}/manifest | Immutable audit evidence, exact upstream gaps, and for terminal adaptive operations the adaptivePool receipt. | 200 only for the owning tenant; repeat reads preserve ETag and canonical hash. |
Request/response field schemas belong to the next data-dictionary deliverable. This architecture pins the behavior, ownership, protocol boundaries, and rejection rules implementation must inherit.
Pinned decisions
BANK-ITD-001ACTIVE · SHIP
One owner for every fact
Chosen. AlphaTest owns generation workflow state, deterministic Incept-JSON→QTI conversion code, slot-verification policy, and audit composition only. Incept owns generated source items; CASE owns standards; Content/QTI own specs, forms, banks, packages, keys, and scoring.
Alternatives rejected.- Copy item bodies or answer keys into AlphaTest
- Make AcmeTest coordinate four upstreams
Rationale. One orchestrator removes manual glue without creating a shadow source of truth.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-ITD-002ACTIVE · SHIP
One observable asynchronous operation
Chosen. After the requested capability's dependency preflight passes, generation or legacy alias-proof import returns 202 with one stable operation URI and runtime terminal states ready, ready_with_gaps, failed, or cancelled. For generated fixed/adaptive banks, only ready with that capability's complete owner receipt may be assignable; for legacy alias proof, ready means all 17 owner aliases were proven with bankId:null, ownerMutationCount:0, and assignable:false. The immutable release-conformance suite is stricter than ordinary runtime observation: fixed, adaptive, and all-17-legacy replay are three required assertions, and each MUST terminate ready with zero gaps before the suite can record certification—merely reaching failed or another terminal is a failed assertion, never a pass.
Alternatives rejected.- Long synchronous HTTP across generation and scoring
- Return a bank ID before owner-authorized proof
- Count failed as an acceptable conformance terminal
- Use ready with assignable:false for an incomplete adaptive result
- Treat a complete legacy alias proof as an assignable bank
Rationale. Separating runtime state from the conformance pass predicate preserves observable failures without allowing a test harness to certify them.
Owning sources. source contract
Status: active · Outcome: SHIP · Date: 2026-07-17 · Author: alphatest-triage+2026-07-17-005 · supersedes: none · superseded_by: none
BANK-ITD-003ACTIVE · SHIP
Real upstream calls are a readiness invariant
Chosen. Production operations and immutable conformance call the configured Incept, Content, QTI, and CASE origins at runtime and retain sanitized host, method, operation, status, native identity or hash, request/trace ID, and timestamp. Conformance binds the verified reviewer-bank caller tenant to the exact server-configured QTI platform tenant UUID; demo fixtures, copied owner data, and local mocks can never produce ready or a certification receipt.
Alternatives rejected.- Local mock fallback
- Copied CASE or local scoring logic
- Hardcode the demo caller tenant or demo QTI tenant UUID
Rationale. Behavior without tenant-exact upstream wire evidence is not integration.
Status: active · Outcome: SHIP · Date: 2026-07-17 · Author: alphatest-triage+2026-07-17-005 · supersedes: none · superseded_by: none
BANK-ITD-004ACTIVE · SHIP
Platform-native identifiers cross the boundary
Chosen. Generation requests accept Content specId; generated-bank success returns Content bankId/formId, QTI packageId/artifactId/artifactVersionId, and CASE identifiers verbatim. Legacy alias-proof success instead returns exactly 17 ordered owner aliases with bankId:null, ownerMutationCount:0, and assignable:false. AlphaTest adds only operationId and proof metadata; known legacy UUIDs remain untrusted until tenant-aligned owner reads reconcile them.
Alternatives rejected.- AlphaTest ID translation table
- Titles, source strings, or a recovered UUID list as identity proof
Rationale. AcmeTest can assign and deliver without translation glue, while owner authority—not local possession of an identifier—establishes identity.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-ITD-005ACTIVE · SHIP
Every blueprint slot must pass independently
Chosen. Admit an item only when primary CASE identity, DOK, requested interaction, QTI validation, Platform3 correct-response score, and provenance all pass. Quarantine failures by upstream reference; partial forms never join a bank.
Alternatives rejected.- Sample or aggregate-only verification
- Silent DOK/type relaxation
Rationale. One invalid item breaks the gate claim.
Owning sources. source contract
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-ITD-006ACTIVE · SHIP
Deterministic Incept JSON to QTI 3.0 conversion
Chosen. The converter maps Incept artifact semantics to canonical QTI 3.0 XML, response declarations/processing, accessibility metadata, media resources, and CASE tags. Equal normalized input plus converter version yields the same package hash; conversion may reject but never rewrite content.
Alternatives rejected.- LLM-authored XML after generation
- QTI 2.x intermediate or semantic improvement
Rationale. Replayable conversion with no second author.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-ITD-007ACTIVE · SHIP
Platform3 QTI is the scoring oracle
Chosen. For every converted item, submit the Incept expected response through a pseudonymous QTI delivery session and attempt; require the documented correct score and applied processing trace, then bind source hash, QTI version ID, input hash, outcome, and trace ID.
Alternatives rejected.- Inspect responseProcessing locally
- Sampled score checks or a real learner identity
Rationale. Proves the production scorer, not AlphaTest's interpretation.
Owning sources. source contract
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-ITD-008ACTIVE · SHIP
Unsupported capability becomes an upstream issue
Chosen. If Incept cannot generate, the converter cannot represent, or QTI cannot score a requested type, record the exact slot and boundary, open/link an upstream Issue with a reproducer and proof metric, and return only a non-assignable audit result when blueprint policy permits.
Alternatives rejected.- Downgrade TEI to multiple choice
- Generic failure with no slot evidence
Rationale. Protects rigor and creates a falsifiable reopen event.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-ITD-009ACTIVE · SHIP
Fixed-form and adaptive membership stay distinct
Chosen. same_blueprint_fixed_forms creates ordered bank_member references with positive form_index; qti_adaptive_selection creates the Content bank but keeps selection/pool structure inside QTI and creates no fabricated fixed member list.
Alternatives rejected.- One generic member-array interpretation
- AlphaTest-owned bank membership
Rationale. Preserves distinct fixed/adaptive semantics and Content ownership.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-ITD-028ACTIVE · SHIP
Prove all 17 legacy aliases without owner mutation
Chosen. Immutable conformance MUST load the owner-published timeback-alphatest-legacy-forms-v1 collection for the configured reviewer-bank/QTI tenant binding, validate its canonical sha256:<64 lowercase hex> manifest identity without rewriting it, read all 17 ordered artifactVersionIds from QTI, reconcile each owning artifactId and Content alias, and verify CASE/scoring/provenance. It returns aliases[17] in governed order with bankId:null, ownerMutationCount:0, and assignable:false: legacy import is an alias-proof operation and MUST NOT create a Content test_bank, bank_member rows, QTI artifacts, or any other owner mutation. The conformance assertion passes only when that exact immutable-deployment operation terminates ready with zero gaps and sanitized QTI/Content receipts. Public legacy admission remains fail-closed until its mode-specific positive receipt is explicitly published. Never regenerate, register, mutate, reduce the set, substitute local IDs, or treat a known ID list alone as authority.
Alternatives rejected.- Regeneration
- Use a caller-supplied or recovered 17-UUID list instead of loading the governed collection
- Strip the sha256: identity prefix
- Treat failed as an acceptable conformance terminal
- Register the 17 forms into a new Content bank or membership collection
- Treat aliases as assignable or return a non-null bankId
Rationale. An alias proof makes all 17 existing owner records import-visible with provenance while preserving the accepted zero-mutation boundary and preventing AlphaTest from inventing a second legacy bank.
Owning sources. source contract · source contract
Status: active · Outcome: SHIP · Date: 2026-07-24 · Author: alphatest-triage+2026-07-24-007 · supersedes: BANK-ITD-010 · superseded_by: none
BANK-ITD-011ACTIVE · SHIP
Bind generation to Incept manifest schema v1
Chosen. Fetch GET https://incept-skill-pack.vercel.app/api/skill-pack before a run and require schemaVersion===1, generation endpoint equality, bearer auth, available question skill, and declared request/response schemas. POST one slot with skillId:"question", canonical subject/grade, parameters.mode:"brainlift", CASE URI/identifier in parameters.target, the exact manifest-enumerated parameters.dok and parameters.interactionType, and intent.purpose:"assessment". Accept only HTTP 2xx with ok:true, outcome:"artifact", nonempty generationRunId, and artifact; preserve run ID and response hash. A requested interaction outside the live enum or a blocked outcome is a slot gap, never locally reconstructed.
Alternatives rejected.- Infer a private schema from validation errors
- Batch slots under undocumented correlation/idempotency semantics
Rationale. The owner-published versioned envelope is executable; one-slot calls give AlphaTest stable correlation without inventing Incept fields.
Owning sources. source contract
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: BANK-ITD-019 · superseded_by: none
BANK-ITD-012ACTIVE · SHIP
Ingest QTI once through Content write-through
Chosen. Submit deterministic QTI 3.0 ZIP once to Content’s QTI-package import with server auth and child idempotency key; require 202, trusted import, and created native IDs, then read each QTI delivery JSON by returned version ID and verify identity plus canonical hash. Never double-ingest through QTI.
Alternatives rejected.- Direct QTI ingest plus Content copy
- Trust Content 202 without QTI evidence
Rationale. One mutation owner plus D5 read-back.
Owning sources. source contract · source contract
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-ITD-013ACTIVE · SHIP
Register and read back Content-owned banks
Chosen. For generated fixed/adaptive capabilities, create content_kind:"test_bank" through Content’s authenticated, idempotent item-create endpoint only after owner identities are reconciled. Fixed mode writes ordered bank_member references with exact Content/QTI aliases; adaptive mode writes no fabricated fixed member rows because selection remains QTI-owned. Require item detail and the mode-appropriate authoritative read-back before assignable ready. Legacy alias proof is excluded from this mutation contract: it returns bankId:null, ownerMutationCount:0, assignable:false and creates no Content test_bank or bank_member rows.
Alternatives rejected.- Write Content tables directly
- Create a parallel AlphaTest membership record
- Register known legacy UUIDs before tenant-aligned QTI owner reads
- Create Content membership for a legacy alias-proof operation
Rationale. Content remains authoritative for generated banks, while the explicit legacy exclusion prevents an alias-proof read from being laundered into an unauthorized owner mutation.
Owning sources. source contract · source contract · source contract
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: BANK-ITD-022 · superseded_by: none
BANK-ITD-014ACTIVE · SHIP
Checkpoint only orchestration state
Chosen. All operations begin admitted only after capability preflight. Generation advances through spec_resolved → standards_resolved → generated → converted → qti_ingested → scoring_proved → content_registered → membership_read_back → terminal. Legacy alias proof advances through owner_collection_read → all_versions_read → aliases_reconciled → scoring_proved → zero_mutation_asserted → terminal; content_registered and membership_read_back are invalid legacy phases. Restart generation by re-reading upstream identity/hash before replaying an idempotent child write; restart legacy only with owner reads and an assertion that ownerMutationCount remains zero.
Alternatives rejected.- One opaque processing flag
- Skip owner reads because the 17 UUIDs are known
- Upstream bodies in checkpoints or destructive rollback
- Reuse generation's Content registration phases for legacy alias proof
Rationale. Artifact-class-specific checkpoints make recovery safe and make the legacy zero-mutation invariant mechanically visible instead of silently passing through registration phases.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-ITD-015ACTIVE · SHIP
API-fronted, tenant-claim-scoped storage
Chosen. Supabase/Postgres is server-only; service credentials never reach clients. Every operation, idempotency, checkpoint, and evidence query includes the verified JWT tenant claim; cross-tenant identifiers return indistinguishable 404.
Alternatives rejected.- Direct browser database access
- Global lookup then application filtering
Rationale. No anonymous or cross-tenant data path.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-ITD-016ACTIVE · SHIP
Independent capability receipts open release
Chosen. Certification and public admission are capability-specific, never global. Owner release certification SAME_BLUEPRINT_FIXED_FORMS-2026-07-21 is published with release_state=ready on the previously wire-verified basis: authenticated Incept artifacts since 2026-07-16, Content test_spec create/read/idempotent-replay conflict (platform3#787), QTI ingest/scoring, governed source catalog ITD-033 release_state=ready, conforming per-tenant three-slot credentials 7/7, and positive operation bop_5WX5F484ZYGMHC9K58VSEMD5PP. Public same_blueprint_fixed_forms creates are therefore admitted and return 202 after preflight. This certification cannot open qti_adaptive_selection or legacy import: each remains typed-424 fail-closed until its own current immutable-deployment ready/zero-gap receipt is explicitly published. The immutable conformance envelope itself MUST bind caller tenant reviewer-bank (33979ed1-36ac-4973-8b2e-181f311c0d5f) to the exact configured QTI_PLATFORM_TENANT_ID, use distinct server-held Content/QTI/CASE credentials with no PLATFORM3_JWT fallback, replay fixed, adaptive, and timeback-alphatest-legacy-forms-v1 all-17 operations on that same immutable hostname, require ready as the only passing terminal for all three, retain sanitized owner traces, and prove an owning-tenant 200 versus same-shape cross-tenant 404. Stable production-alias admission changes only after the relevant mode-specific certification receipt is recorded.
Alternatives rejected.- One all-or-nothing public gate across fixed, adaptive, and legacy
- Keep fixed forms closed after the spec owner published its positive certification
- Let a green fixed receipt certify adaptive or legacy
- Run conformance against demo or accept a shared-token fallback
- Count failed as a passing terminal
- Implementation-only 202/ready simulation
Rationale. An explicit owner release artifact breaks the fixed-form adoption deadlock while tenant-exact, per-mode receipts keep unproved capabilities and cross-tenant paths fail-closed under DoD D2 and D5.
Owning sources. source contract
Status: active · Outcome: SHIP · Date: 2026-07-21 · Author: alphatest-triage+2026-07-21-002 · supersedes: BANK-ITD-025 · superseded_by: none
BANK-AXIS-001ACTIVE · SHIP
One operation per public write
Chosen. POST creates one generation or legacy-import operation after preflight; no public item-authoring or multi-bank atomic endpoint.
Alternatives rejected.- Per-item authoring
- Bulk banks
Rationale. Clearest retry and ownership boundary.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-AXIS-002ACTIVE · SHIP
List, detail, and immutable manifest
Chosen. Expose operation list/detail and manifest subresource; bank/form bodies remain direct Platform3 reads through returned IDs.
Alternatives rejected.- List-only diagnostics
- Proxying a shadow content catalog
Rationale. Diagnose workflows without duplicating Content/QTI.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-AXIS-003ACTIVE · SHIP
Bounded filters and opaque cursor paging
Chosen. Filter operations by status, kind, specId, bankId, and RFC3339 modifiedSince; sort createdAt/updatedAt; page by opaque cursor with bounded limit.
Alternatives rejected.- Free-form search
- Arbitrary query expressions
Rationale. Reconciliation without leaking storage grammar.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-AXIS-004ACTIVE · SHIP
Immutable requests and native upstream ETags
Chosen. No public PATCH/PUT; snapshots return ETags for cache validation. Each upstream mutation requiring If-Match uses the ETag read from that same tenant resource.
Alternatives rejected.- Mutable generation inputs
- Guessed or cached upstream ETags
Rationale. Reproducible execution plus native optimistic concurrency.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-AXIS-005ACTIVE · SHIP
Tenant-scoped idempotency on every POST
Chosen. Every public POST requires Idempotency-Key. Same tenant/key and canonical request returns the same operation; changed method/path/body returns typed 409. Deterministic child keys isolate upstream writes.
Alternatives rejected.- Client operation IDs alone
- One reused key for all children
Rationale. Lost-response safety without duplicate mutation.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-AXIS-006ACTIVE · SHIP
Verified JWT plus explicit bank scopes
Chosen. Require a signed unexpired caller Bearer JWT with sub,role,tenantId,iat,exp; reads require bank:read and writes bank:write. Upstream calls use distinct server-held least-privilege CONTENT_SERVICE_TOKEN, QTI_SERVICE_TOKEN, and CASE_SERVICE_TOKEN credentials (plus the separate Incept credential where generation runs). No slot may fall back to PLATFORM3_JWT, another service's token, the caller token, or a demo mint; missing, mismatched, expired, or under-scoped credentials fail closed before certification.
Alternatives rejected.- Role-only auth
- Client-held Incept/Platform3 tokens
- Shared PLATFORM3_JWT fallback
- Reuse one service token across Content, QTI, and CASE
Rationale. Per-service credentials make least privilege observable and remove the shared-token cross-service blast radius.
Status: active · Outcome: SHIP · Date: 2026-07-17 · Author: alphatest-triage+2026-07-17-005 · supersedes: none · superseded_by: none
BANK-AXIS-007ACTIVE · DEFERRED
Polling ships; webhooks have a concrete trigger
Chosen. v1 ships polling, Retry-After, ETag, and modifiedSince. Webhooks reopen when a registered external consumer proves polling misses a documented assignment-latency SLO and supplies a signed-callback receiver.
Alternatives rejected.- Webhook infrastructure before a consumer/SLO
- Silent background completion with no reconciliation
Rationale. Current job is met with one reliable primitive; trigger is concrete and falsifiable.
Status: active · Outcome: DEFERRED · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-AXIS-008ACTIVE · SHIP
Typed RFC 7807 errors
Chosen. Every non-2xx is application/problem+json with stable type/title/status/detail/code/requestId/traceId and optional safe field/upstream arrays; never expose tokens, item bodies, or answer keys.
Alternatives rejected.- Raw upstream errors
- Ad hoc per-route JSON
Rationale. One branchable client contract and no leakage.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-AXIS-009ACTIVE · SHIP
Verified JWT claim controls tenant routing
Chosen. Public paths have no tenant parameter. Derive the AlphaTest tenant only from the verified JWT; compatibility X-Timeback-Tenant must equal the claim or returns 403, and scope every local/upstream operation to it. Immutable conformance additionally requires server configuration that maps reviewer-bank to its exact QTI platform tenant UUID and signs that UUID into the deployment-host-bound envelope; the request cannot choose or override the mapping. Reads for a valid identifier owned by another tenant return the same RFC 7807 resource_not_found 404 shape as an unknown identifier.
Alternatives rejected.- URL-authoritative tenant
- Header-authoritative tenant
- Caller-selected QTI tenant UUID
- Different cross-tenant and absent-resource errors
Rationale. Caller-controlled routing cannot cross tenants or enumerate another tenant's resources.
Status: active · Outcome: SHIP · Date: 2026-07-17 · Author: alphatest-triage+2026-07-17-005 · supersedes: none · superseded_by: none
BANK-AXIS-010ACTIVE · SHIP
Contract and integration proof travel together
Chosen. One immutable-host conformance run covers fixed, adaptive, and the governed all-17 legacy alias-proof operation under the configured reviewer-bank/QTI tenant binding, while producing three independent mode receipts. Every assertion requires status=ready and zero gaps; failed, cancelled, ready_with_gaps, timeout, or missing evidence fails the suite. Receipts retain sanitized Content/QTI/CASE/Incept host, method, status, native IDs/hashes, request/trace IDs, and timestamps; prove distinct credential slots, public-alias fail-closed behavior for uncertified modes, anonymous rejection, same-shape 404 cross-tenant isolation, idempotency conflict, QTI scoring, generated-bank Content registration/read-back, adaptive QTI-order plus Content-KC reconciliation, and exact all-17 alias replay with bankId:null, ownerMutationCount:0, assignable:false. A green fixed receipt cannot certify adaptive or legacy, and a later failed sibling replay cannot revoke the already published fixed certification.
Alternatives rejected.- Unit tests alone
- One aggregate pass/fail bit with no mode receipts
- Treat any terminal state as conformance success
- Manifests without independently observed calls
Rationale. Strict per-mode assertions inside one tenant-exact envelope produce auditable adoption evidence without coupling public release decisions.
Status: active · Outcome: SHIP · Date: 2026-07-17 · Author: alphatest-triage+2026-07-17-005 · supersedes: none · superseded_by: none
BANK-AXIS-011ACTIVE · SHIP
Keep audit metadata, never learning content
Chosen. Persist tenant-scoped operation metadata, upstream IDs, hashes, states, and audit evidence—never item bodies, keys, learner data, attempts, or mastery. Privileged deletion never cascades to Platform3.
Alternatives rejected.- Copied request/artifact bodies
- Cascading upstream delete
Rationale. Auditability within AlphaTest's ownership boundary.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-AXIS-012ACTIVE · SHIP
One operation collection; no shadow catalog
Chosen. /bank-operations lists generation and legacy-import operations with a kind discriminator. Bank/item discovery stays in Content/QTI.
Alternatives rejected.- Collection per status or job kind
- AlphaTest item/bank browsing catalog
Rationale. One list primitive without duplicating upstream discovery.
Status: active · Outcome: SHIP · Date: 2026-07-16 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-ITD-017ACTIVE · SHIP
Project the verified adaptive pool into immutable evidence
Chosen. QTI owns the adaptive pool root and authoritative ordered member identities; Content owns each imported item's KC relationships. For each ordered QTI member, Bank reconciles its native immutable QTI identity to the Content contentId, then reads GET .../items/{contentId}/kc-tags and requires exactly one primary relationship whose knowledgeComponentGuid equals the generated blueprint slot (with owner-published weight/confidence retained). Bank MUST NOT require caseStandardGuids or knowledgeComponentGuids on QTI item refs, infer KC from titles, or add KC metadata to QTI. Missing, duplicate-primary, mismatched, or unreconciled Content KC proof fails closed. Exact immutable operation bop_3BZPK6BKJ91MS9RP4VXRAYR7KG is the regression shape: conformance must preserve root 66338a93-fe08-4f1a-80f5-39c51032b2dc and its six-member QTI order, obtain KC proof from Content, and reach ready, assignable:true, non-null stable adaptivePool, zero gaps, and sanitized QTI/Content/KC-owner receipts. Public qti_adaptive_selection admission and the stable alias remain unchanged until that positive mode receipt is explicitly published; repeat reads must preserve the canonical manifest hash and strong ETag.
Alternatives rejected.- Require KC GUIDs on QTI refs
- Infer KC from titles or slot position
- Copy Content KC tags into QTI metadata
- Accept missing, duplicate, or mismatched primary KC proof
- Publish adaptive admission before its receipt
Rationale. The reconciliation joins two real owners without moving either boundary: QTI proves selection order, and Content proves the diagnostic KC relationship.
Owning sources. source contract · source contract · source contract
Status: active · Outcome: SHIP · Date: 2026-07-20 · Author: alphatest-triage+2026-07-20-006 · supersedes: none · superseded_by: none
BANK-ITD-026ACTIVE · SHIP
Reject diagnostically empty distractors
Chosen. For every selected-response item, slot verification requires every incorrect response choice to carry a non-empty Incept-authored named misconception tag, requires each tag to be distinct from the correct response and traceable to the generated source artifact, and preserves the choice-to-misconception mapping through deterministic QTI conversion and Content/QTI read-back evidence. An untagged, dead, duplicated, or answer-key-conflicting distractor fails the slot and quarantines the item; Bank never invents or repairs misconception labels locally. Non-selected-response interactions record distractor verification as not_applicable with their interaction type rather than fabricating distractors.
Alternatives rejected.- Check only standard, DOK, interaction type, and answer-key correctness
- Allow generic wrong_answer labels or locally generated misconception tags
- Require distractors for interaction types that do not contain response choices
Rationale. The module promises diagnostic information from every wrong selected response; making the mapping a per-slot admission predicate prevents structurally valid but diagnostically empty items from entering a bank.
Status: active · Outcome: SHIP · Date: 2026-07-24 · Author: alphatest-loop · supersedes: none · superseded_by: none
BANK-ITD-027ACTIVE · SHIP
Regenerate and rotate weak items without rewriting history
Chosen. A reports-owned revision order naming a weak item and reason (non-discriminating, dead or untagged distractor, or miskeyed) starts a new idempotent Bank regeneration operation that requests a replacement from Incept for the same blueprint slot, runs the complete slot, misconception, QTI-conversion, scoring, and owner-read verification chain, and only then rotates the new immutable QTI artifactVersionId into Content-owned bank membership with provenance linking revisionOrderId, replacedArtifactVersionId, replacementArtifactVersionId, Incept generationRunId, and effectiveAt. The prior artifact remains owner-retained for audit and in-flight administrations; failed replacement verification leaves membership unchanged. Bank never edits the old item, authors a replacement locally, or recomputes Reports analytics.
Alternatives rejected.- Patch the weak QTI item in place
- Generate a local replacement without Incept
- Rotate membership before the replacement passes full verification
- Delete the prior artifact or re-score historical attempts
Rationale. An append-only verified rotation closes the Reports-to-Bank improvement loop without violating upstream ownership, auditability, or active-test stability.
Owning sources. source contract
Status: active · Outcome: SHIP · Date: 2026-07-24 · Author: alphatest-loop · supersedes: none · superseded_by: none
Superseded decision lineage
These stable tombstones preserve every ID cited by an active decision. The current repository no longer contains the full superseded prose, so the registry records only recoverable lineage rather than fabricating historical text.
BANK-ITD-019SUPERSEDED · AUDIT TOMBSTONE
Retained decision lineage
Prior Incept binding retained as an audit tombstone; the active decision replaced its inferred request contract with owner-published manifest schema v1.
Status: superseded · Date: retained 2026-07-24 · Author: alphatest-loop · supersedes: none · superseded_by: BANK-ITD-011
BANK-ITD-022SUPERSEDED · AUDIT TOMBSTONE
Retained decision lineage
Prior Content registration decision retained as an audit tombstone; the active decision adds owner-authorized identity reconciliation and the authoritative assignability handshake.
Status: superseded · Date: retained 2026-07-24 · Author: alphatest-loop · supersedes: none · superseded_by: BANK-ITD-013
BANK-ITD-023SUPERSEDED · AUDIT TOMBSTONE
Retained decision lineage
Initial legacy-import decision retained as an audit tombstone; BANK-ITD-010 added governed all-17 owner reads but still authorized Content registration.
Status: superseded · Date: retained 2026-07-24 · Author: alphatest-loop · supersedes: none · superseded_by: BANK-ITD-010
BANK-ITD-010SUPERSEDED · AUDIT TOMBSTONE
Retained decision lineage
Prior legacy-import decision retained as an audit tombstone; it required registering and reading Content membership, which triage decision 2026-07-24-007 replaced with alias proof, bankId:null, ownerMutationCount:0, and assignable:false.
Status: superseded · Date: retained 2026-07-24 · Author: alphatest-loop · supersedes: BANK-ITD-023 · superseded_by: BANK-ITD-028
BANK-ITD-025SUPERSEDED · AUDIT TOMBSTONE
Retained decision lineage
Prior release-gate decision retained as an audit tombstone; the active decision uses capability-specific current-deployment receipts and the shared Bank→Administration assignability predicate.
Status: superseded · Date: retained 2026-07-24 · Author: alphatest-loop · supersedes: none · superseded_by: BANK-ITD-016
Source contracts and accepted owner evidence
Recorded through 2026-07-24 in source-probes.json. The ledger distinguishes fetched contract reachability from accepted triage evidence and owner certification. Contract reachability alone never opens a mode.
- Google AIP registry and AIP-121 — benchmark for numbered, status-bearing, deep-linkable decisions.
- Incept skill-pack manifest — schemaVersion 1, Bearer auth, generation route, request/response schema, question/DOK/interaction enums.
- Content implementation descriptor — authenticated item/reference/QTI-import/bank-member endpoints and allowed values.
- Content data dictionary — test_bank, membership, form_index, uniform Content/QTI identity aliases, and ownership.
- Platform3 QTI contract — native QTI version delivery and scoring runtime.
- Platform3 CASE contract — canonical standard identities.
- Reports architecture — approved upstream contract for analytics-owned weak-item revision orders.