{
  "surface": "alpha",
  "deliverable": "surface_qc",
  "generatedAt": "2026-05-21T00:15:41.892Z",
  "surfaceVerdict": {
    "status": "pass",
    "statement": "The QTI Alpha surface passes QC. No architecture, data dictionary, customer website, or implementation rollback is recommended.",
    "rollbackRecommendation": "No product rollback. P-001 is process cleanup only; C-001 is optional customer-website polish."
  },
  "customerEvalTarget": {
    "persona": "Discerning Alpha platform owner and app-builder LLM operator who has read the approved Alpha architecture, data dictionary, customer website, and implementation.",
    "jobToBeDone": "Decide in one sitting whether the Alpha QTI surface is mutually consistent, honestly tested, safe for teachers/students/parents/app-builder LLMs, and ready to be treated as the completed Alpha surface.",
    "benchmark": "CNCF Certified Kubernetes Software Conformance program. It sets a strong release-gate reference because it uses a binary certification decision, reproducible conformance tooling, submitted evidence, and reviewer approval.",
    "benchmarkUrl": "https://www.cncf.io/training/certification/software-conformance/"
  },
  "upstream": [
    {
      "id": "architecture",
      "title": "Alpha Architecture",
      "status": "approved",
      "attempt": 1,
      "canonicalUrl": "https://platform3-1vrj6jl06-andymontgomery-9773s-projects.vercel.app",
      "localPath": "/Users/andymontgomery/projects/platform3/loop/qti/artifacts/alpha/architecture",
      "approvedAt": "2026-05-20T23:03:46Z"
    },
    {
      "id": "data_dictionary",
      "title": "Alpha Data Dictionary",
      "status": "approved",
      "attempt": 1,
      "canonicalUrl": "https://platform3-jbpj9pddg-andymontgomery-9773s-projects.vercel.app",
      "localPath": "/Users/andymontgomery/projects/platform3/loop/qti/artifacts/alpha/data_dictionary",
      "approvedAt": "2026-05-20T23:18:54Z"
    },
    {
      "id": "customer_website",
      "title": "Alpha Customer Website",
      "status": "approved",
      "attempt": 1,
      "canonicalUrl": "https://platform3-c21wx9sw2-andymontgomery-9773s-projects.vercel.app",
      "localPath": "/Users/andymontgomery/projects/platform3/loop/qti/artifacts/alpha/customer_website",
      "approvedAt": "2026-05-20T23:38:05Z"
    },
    {
      "id": "implementation",
      "title": "Alpha Implementation",
      "status": "approved",
      "attempt": 2,
      "canonicalUrl": null,
      "localPath": "/Users/andymontgomery/projects/platform3/loop/qti/artifacts/alpha/implementation/impl",
      "approvedAt": "2026-05-21T00:08:57Z"
    }
  ],
  "metrics": [
    [
      "Surface verdict",
      "Pass",
      "No product rollback. Alpha QTI can be accepted as the completed QTI Alpha surface."
    ],
    [
      "Alpha decisions",
      "14 ITDs",
      "Every Alpha cut, restriction, rename, and extension has a stable architecture anchor."
    ],
    [
      "Public model",
      "9 objects / 84 fields",
      "The data dictionary and customer website public object field sets match exactly."
    ],
    [
      "Shared persistence",
      "13 tables / 127 fields",
      "Alpha adds no tables, columns, or indexes beyond the approved 1EdTech qti.* schema."
    ],
    [
      "Customer operations",
      "11",
      "All approved Alpha operations appear in the customer website, OpenAPI, provenance, HTTP handler, and tests."
    ],
    [
      "Implementation tests",
      "17/17",
      "The local Node suite passed during this QC run."
    ],
    [
      "Public conformance posture",
      "Read-only",
      "Alpha exposes trust status and blocks public conformance mutation."
    ],
    [
      "Anchor misses",
      "0",
      "Alpha architecture, data dictionary, and customer website local hash links resolve."
    ]
  ],
  "deliverables": [
    {
      "id": "architecture",
      "title": "Architecture",
      "verdict": "Pass",
      "status": "pass",
      "rollback": "none",
      "evidence": [
        "Approved attempt 1 defines 14 Alpha ITDs over the approved 1EdTech surface: 2 cuts, 4 restrictions, 4 renames, and 4 extensions.",
        "alpha-itd-001 requires shared qti.* persistence and forbids Alpha persistence forks.",
        "alpha-itd-011 cuts public conformance mutation; alpha-itd-012 adds read-only trust status backed by 1EdTech surface QC evidence.",
        "alpha-architecture-traceability.json carries machine-readable ITD, operation, cut, rename, and data-dictionary provenance for downstream artifacts."
      ]
    },
    {
      "id": "data-dictionary",
      "title": "Data Dictionary",
      "verdict": "Pass",
      "status": "pass",
      "rollback": "none",
      "evidence": [
        "Approved attempt 1 maps 9 public Alpha objects and 84 public fields to the same 13 qti.* tables and 127 fields approved for 1EdTech.",
        "All Alpha labels are explicit: pass-through, rename, restriction, extension, or cut. Every label links to an Alpha ITD.",
        "studentRef, activityState, answers, templateState, results, gradingExplanation, and trust-status fields document privacy and invalid-value rules.",
        "A local object/field-set comparison found no drift between alpha-data-dictionary.json and alpha-customer-website-source.json."
      ]
    },
    {
      "id": "customer-website",
      "title": "Customer Website",
      "verdict": "Pass",
      "status": "pass",
      "rollback": "none",
      "evidence": [
        "Approved attempt 1 documents 11 Alpha operations, 6 workflows, 9 behavior contracts, top-level Authentication, top-level Errors, and a 252-entry search index.",
        "Every endpoint has inline request and response schema rows, examples, related objects, related fields, and Alpha ITD provenance.",
        "The Field index covers all 84 public Alpha fields and shows the qti.* source path or approved Alpha derivation.",
        "The public cuts table clearly states that public Alpha callers cannot run conformance and cannot browse raw package bytes, object graphs, component rows, variable-declaration rows, processing-rule rows, or granular conformance assertions."
      ]
    },
    {
      "id": "implementation",
      "title": "Implementation",
      "verdict": "Pass",
      "status": "pass",
      "rollback": "none",
      "evidence": [
        "Approved attempt 2 fixed the attempt-1 response-shape drift: Activity now returns workspaceId and updatedAt, and AnswerSubmission/ActivityResult now return answerSchema, templateState, startedAt, and suspendedAt.",
        "npm test passed 17/17 tests in this QC run, including Alpha HTTP, OpenAPI schema, 1EdTech inherited contracts, conformance evidence, privacy, schema, and reference-resolution tests.",
        "alphaSchemaContract.test.mjs locks all 11 operation IDs, the public conformance-run cut, and the required Activity and AnswerSubmission OpenAPI field sets.",
        "alphaHttpApi.test.mjs exercises the full customer path from package import through activity, answer submission, result, test-data deletion, and trust status.",
        "migrations/001_qti_core.sql is byte-identical to the approved 1EdTech migration, proving Alpha did not fork persistence."
      ]
    }
  ],
  "checks": [
    {
      "id": "state-chain",
      "title": "Approved Artifact Chain",
      "status": "pass",
      "result": "state.json, transcript.md, eval results, and approved summaries agree that the four Alpha upstream deliverables are approved before this QC attempt.",
      "evidence": [
        "state.json current deliverable is alpha/surface_qc attempt 1.",
        "Alpha architecture, data_dictionary, customer_website, and implementation are approved in state.json with the exact canonical URLs surfaced in this report.",
        "Transcript records architecture approved at 2026-05-20T23:03:46Z, data dictionary at 2026-05-20T23:18:54Z, customer website at 2026-05-20T23:38:05Z, and implementation attempt 2 at 2026-05-21T00:08:57Z."
      ]
    },
    {
      "id": "divergence-chain",
      "title": "Alpha Divergence Trace",
      "status": "pass",
      "result": "Every Alpha divergence is a documented cut, restriction, rename, or extension with downstream implementation evidence.",
      "evidence": [
        "Architecture traceability lists 14 Alpha ITDs and labels each change type.",
        "Implementation provenance lists the same 14 Alpha ITDs and a concrete implementation note for each.",
        "Customer website and data dictionary expose the same public cuts and school-language names, including workspaceId, studentRef, activity, answer submission, result, and trust status."
      ]
    },
    {
      "id": "public-model-chain",
      "title": "Public Object And Field Coverage",
      "status": "pass",
      "result": "The Alpha data dictionary and customer website agree on every public object and field.",
      "evidence": [
        "Local field-set check: 9 data-dictionary objects, 9 customer-website objects, objectIdsMatch=true, fieldDiff=[].",
        "Counts agree: 84 public fields, 10 allowed-value sets, 13 shared tables, and 127 shared fields.",
        "The implementation regression tests lock the highest-risk response shapes: Activity, AnswerSubmission, and ActivityResult."
      ]
    },
    {
      "id": "api-chain",
      "title": "API Contract Coverage",
      "status": "pass",
      "result": "The 11 Alpha operation IDs align across the approved customer website, OpenAPI, provenance, HTTP server, facade, README runbook, and tests.",
      "evidence": [
        "Operation IDs: importAssessmentPackage, listContent, getContent, getStudentView, saveContentDraft, downloadQtiXml, startActivity, submitAnswers, getActivityResult, deleteStudentTestData, getQtiTrustStatus.",
        "alpha-qti.openapi.yaml also includes blockedPublicConformanceRun for POST /qti/conformance-runs, which is the approved cut from public Alpha.",
        "The customer website endpoint count, implementation provenance contract list, and test assertions all report 11 implemented Alpha contracts with no missing or extra implemented operation."
      ]
    },
    {
      "id": "implementation-rollback-closure",
      "title": "Implementation Rollback Closure",
      "status": "pass",
      "result": "The attempt-1 implementation drift is closed and does not require rollback to the customer website or data dictionary.",
      "evidence": [
        "Prior finding: answer-submission omitted answerSchema, templateState, startedAt, and suspendedAt.",
        "Current alphaQtiFacade.mjs answerSubmissionFromAttempt returns those fields and activityResultFromAttempt spreads the corrected submission shape.",
        "Prior finding: activity omitted workspaceId and updatedAt. Current startActivity returns both, and alphaHttpApi.test.mjs asserts both.",
        "Current OpenAPI Activity and AnswerSubmission schemas include the required field lists that the reviewer cited."
      ]
    },
    {
      "id": "shared-persistence-chain",
      "title": "Shared Persistence",
      "status": "pass",
      "result": "Alpha remains a facade over the approved 1EdTech qti.* persistence model.",
      "evidence": [
        "cmp -s between the 1EdTech and Alpha migrations returned exit code 0, meaning the SQL files are byte-identical.",
        "Implementation provenance sharedDataDictionaryTables lists the same 13 qti.* tables approved by 1EdTech.",
        "No Alpha-specific migration, table, column, or index is introduced in the implementation artifact."
      ]
    },
    {
      "id": "privacy-chain",
      "title": "Learner Data Privacy",
      "status": "pass",
      "result": "Alpha preserves the 1EdTech privacy rules and makes the public vocabulary safer for teachers, parents, students, and app-builder LLMs.",
      "evidence": [
        "studentRef is the Alpha name for pseudonymous candidate reference and must be a UUID, not learner or parent PII.",
        "alphaHttpApi.test.mjs proves an email-shaped studentRef is rejected and redacted from Problem output.",
        "privacyAndTrace.test.mjs is inherited and still passes, covering learner-runtime PII rejection, trace redaction, Problem.detail redaction, and authorization for runtime-data deletion."
      ]
    },
    {
      "id": "trust-status-chain",
      "title": "Trust Status And Conformance",
      "status": "pass",
      "result": "Alpha exposes release trust as read-only customer information while leaving conformance execution in release tooling.",
      "evidence": [
        "POST /qti/conformance-runs returns 403 for Alpha callers.",
        "GET /qti/trust-status summarizes qti.conformance_run and qti.conformance_assertion evidence and includes the approved 1EdTech surface QC URL.",
        "The inherited 1EdTech conformance tests passed in the Alpha implementation suite, including real bundle hash checks and per-assertion evidence persistence."
      ]
    },
    {
      "id": "hosted-docs-chain",
      "title": "Hosted Documentation And Deep Links",
      "status": "pass",
      "result": "The approved Alpha documentation deliverables have deployment-specific canonical URLs and stable local anchors.",
      "evidence": [
        "Architecture URL: https://platform3-1vrj6jl06-andymontgomery-9773s-projects.vercel.app.",
        "Data dictionary URL: https://platform3-jbpj9pddg-andymontgomery-9773s-projects.vercel.app.",
        "Customer website URL: https://platform3-c21wx9sw2-andymontgomery-9773s-projects.vercel.app.",
        "Local hash-link check: architecture ids=24 links=56 missing=0; data dictionary ids=251 links=91 missing=0; customer website ids=269 links=362 missing=0."
      ]
    }
  ],
  "findings": [
    {
      "id": "P-001",
      "severity": "process",
      "status": "warning",
      "title": "Issue ledger still carries superseded open rows",
      "affects": "loop/qti/issues.jsonl",
      "quote": "Earlier issues.jsonl rows retain open status even though transcript.md records later reviewer approvals.",
      "evidence": [
        "This is the same process hygiene issue identified by the approved 1EdTech surface QC.",
        "It does not create an Alpha product rollback because state.json, transcript.md, summary.json files, and eval results identify the approved current attempts."
      ],
      "recommendation": "Append closure or supersession rows after approval, or update the driver to write closure records when a later attempt addresses a recorded issue.",
      "rollback": "none"
    },
    {
      "id": "C-001",
      "severity": "optional",
      "status": "note",
      "title": "Customer website could add language tabs later",
      "affects": "alpha/customer_website",
      "quote": "The approved reviewer noted bash/curl only examples as non-blocking.",
      "evidence": [
        "The Alpha customer website passed its customer eval and rubric as-is.",
        "App-builder LLMs can translate curl examples, so this is not a release blocker for the named Alpha audience."
      ],
      "recommendation": "Future customer-website polish can add JavaScript/TypeScript and Python tabs without changing the approved implementation contract.",
      "rollback": "none"
    }
  ],
  "verification": [
    {
      "command": "npm test",
      "cwd": "loop/qti/artifacts/alpha/implementation/impl",
      "result": "pass",
      "outcome": "17 tests passed, 0 failed. Covered Alpha HTTP, Alpha OpenAPI schema, inherited 1EdTech HTTP/conformance/privacy/schema contracts, and OpenAPI/schema reference resolution."
    },
    {
      "command": "JSON parse checks",
      "cwd": "repo root",
      "result": "pass",
      "outcome": "Parsed Alpha architecture traceability, Alpha data dictionary, Alpha customer website source, customer search index, implementation provenance, implementation summary, and loop state."
    },
    {
      "command": "Static hash-link check",
      "cwd": "repo root",
      "result": "pass",
      "outcome": "Architecture, data dictionary, and customer website local hash links all resolve with 0 missing anchors."
    },
    {
      "command": "Object/field/operation consistency check",
      "cwd": "repo root",
      "result": "pass",
      "outcome": "alphaItds=14, dataObjects=9, customerObjects=9, endpoints=11, implementedContracts=11, missingInProv=[], extraInProv=[], objectIdsMatch=true, fieldDiff=[]."
    },
    {
      "command": "cmp -s 1edtech migration alpha migration",
      "cwd": "repo root",
      "result": "pass",
      "outcome": "Exit code 0. Alpha migration is byte-identical to the approved 1EdTech migration."
    },
    {
      "command": "Browser fetch approved documentation URLs",
      "cwd": "web tool",
      "result": "partial",
      "outcome": "CNCF benchmark page fetched successfully. The platform3 Vercel deployment hosts did not return content through the browsing tool, so this report relies on driver-recorded prior 200 checks and local approved artifacts; the driver will deploy and fetch this QC site."
    },
    {
      "command": "node loop/qti/artifacts/alpha/surface_qc/source/build-site.mjs",
      "cwd": "repo root",
      "result": "pass",
      "outcome": "Generated static index.html, surface-qc-evidence.json, vercel.json, and .gitignore under OUT_DIR/site."
    }
  ],
  "sourceFiles": [
    "loop/qti/state.json",
    "loop/qti/transcript.md",
    "loop/qti/issues.jsonl",
    "loop/qti/evals/1edtech/surface_qc/customer_eval.json",
    "loop/qti/evals/1edtech/surface_qc/rubric.json",
    "loop/qti/evals/alpha/*/results/*.json",
    "loop/qti/artifacts/alpha/architecture/summary.json",
    "loop/qti/artifacts/alpha/architecture/site/index.html",
    "loop/qti/artifacts/alpha/architecture/site/alpha-architecture-traceability.json",
    "loop/qti/artifacts/alpha/data_dictionary/summary.json",
    "loop/qti/artifacts/alpha/data_dictionary/site/index.html",
    "loop/qti/artifacts/alpha/data_dictionary/site/alpha-data-dictionary.json",
    "loop/qti/artifacts/alpha/customer_website/summary.json",
    "loop/qti/artifacts/alpha/customer_website/site/index.html",
    "loop/qti/artifacts/alpha/customer_website/site/alpha-customer-website-source.json",
    "loop/qti/artifacts/alpha/customer_website/site/search-index.json",
    "loop/qti/artifacts/alpha/implementation/summary.json",
    "loop/qti/artifacts/alpha/implementation/impl/README.md",
    "loop/qti/artifacts/alpha/implementation/impl/provenance.json",
    "loop/qti/artifacts/alpha/implementation/impl/openapi/alpha-qti.openapi.yaml",
    "loop/qti/artifacts/alpha/implementation/impl/migrations/001_qti_core.sql",
    "loop/qti/artifacts/alpha/implementation/impl/src/alpha/alphaHttpServer.mjs",
    "loop/qti/artifacts/alpha/implementation/impl/src/alpha/alphaMappings.mjs",
    "loop/qti/artifacts/alpha/implementation/impl/src/alpha/alphaQtiFacade.mjs",
    "loop/qti/artifacts/alpha/implementation/impl/tests/alphaHttpApi.test.mjs",
    "loop/qti/artifacts/alpha/implementation/impl/tests/alphaSchemaContract.test.mjs",
    "loop/qti/artifacts/alpha/implementation/impl/tests/conformanceRunner.test.mjs",
    "loop/qti/artifacts/alpha/implementation/impl/tests/privacyAndTrace.test.mjs",
    "loop/qti/artifacts/alpha/implementation/impl/tests/schemaContract.test.mjs",
    "external/qti/docs/plain-english-guide.md",
    "external/qti/docs/qti-3-relational-json-architecture.md",
    "external/qti/docs/runtime-semantics.md",
    "external/qti/contracts/qti-boundary.openapi.yaml",
    "external/qti/generated/conformance/processing-coverage.md"
  ]
}
