Files
jobtrackingapp/docs/automation/handoffs/pre-phase10/CONTRACT.md
T

5.8 KiB
Raw Blame History

Proposed evidence adapter v1

Contract ID: urn:jobjakt:pre-phase10-evidence:1. This is a proposed evidence import contract, not a replacement for AUTONOMOUS-ROADMAP-01's committed automation/schemas/backlog.schema.json or result.schema.json. Both happen to use version1; their document kinds and authority are different. The separate controller snapshot is recorded in GATES.json. Its worktree/policy/state/runtime was not modified or executed.

Package field Existing controller integration
ACCEPTANCE.localCommit Frozen application/test baseline; independently prove ancestry and application-source equality for the resolved final package commit. Never assume the capture-time remote observation is current
ACCEPTANCE.snapshotHead / verifiedRemoteCommit Dated provenance only. Resolve final branch HEAD again, require clean local/remote equality, and bind the protected entry request to that actual hash
TEST_EVIDENCE native report/process/source artifacts Recompute compressed-file hashes, decompress with a strict bound, parse native identities/counters and process exits. Source before/after must agree. Verify all expected ordinary discovery identities exactly once; retain separate lanes and original failures
GATES stage IDs / predecessor / manualApprovals Projection of the existing seven stages05–11 and their protected approval identifiers. Do not insert this evidence package as a second executable queue or enable execution from it
BLOCKERS classification / blockingPhase Scope-dependent entry, conditional development debt, production and future work. Neither a conditional result nor a closed unrelated blocker satisfies a mandatory candidate condition
requiredOwnerApprovals Requests for external protected owner decisions, not records that approval occurred. This package contains no approval token, signature or private key
packageStatus READY All required evidence/documentation is present and schema-consistent. It says nothing about approval to start Phase10
phase10DevelopmentReadiness NO-GO / eligibleForAutomaticExecution false Current authoritative entry decision. The controller must remain blocked pending actual protected approvals, candidate proof, publication and runtime/test-adapter qualification

The controller's existing result.schema.json uses outcomes such as blocked/conditional/complete and blocker/approval/checkpoint fields. A valid handoff with this entry decision maps to blocked for Phase10; do not translate validator exit0 into complete or a satisfied stage requirement. No result payload can sign its own authority. The controller must independently verify real predecessor acceptance and perform its protected phase10-development-entry and stage-review flow.

The current manifest has no declared checkpoint deferrable gates. Human release debt and disabled optional CV AI have individual historical conditional-development authority, but importing that debt does not authorise automatic advancement. A policy change and any actual conditional-deferral must use the controller's owner-controlled signed request process. Required automated failures remain failures. Preserve actual S01 failures and isolated model rejections.

The controller snapshot also has no explicit protected candidate-scope checkpoint between an assessment-only entry and removal. The proposed GATES contract adds candidate-specific-cleanup-scope as a source-derived requirement, not as a claim that the live manifest already enforces it. Either the entry grant must already name proven exact candidates, or the operator must adopt a signed policy update that stops after assessment and requires that protected decision before cleanup implementation. This workstream cannot add that hook in the separate worktree. AUTO-SCOPE-01 stays BLOCKED.

Portable evidence

Native test reports, process observations and source manifests are stored as individually compressed .gz files under evidence/ with exact hashes in TEST_EVIDENCE.json. XML, Jest and ordinary metadata bytes are preserved. Playwright reports with inline attachment bodies use an explicitly labelled transport projection: only results[].attachments[].body is externalized. Native cases, counters, errors, retries, statuses, labels and identities remain intact; an indexed audit retains original report/body hashes, sizes, native statistics and original producer paths. This avoids committing roughly77MiB of compressed inline screenshots. The original raw reports remain untouched under .artifacts/automation-handoff-01/; no failed result is removed or improved. Importing consumers must recognise this projection and obtain the original raw artifact if their policy requires complete inline bodies. Large videos, traces and model weights are not imported. Actual synthetic PDFs/previews are supplied in the separate visual comparison package.

The package verifier only reads bounded local files/Git and optionally verifies the configured remote. It does not execute report commands, install dependencies, run a controller, inspect protected approval keys or grant readiness. Installed pinned Ajv/jsdom from the existing frontend dev dependency tree provide actual JSON Schema/XML validation; no dependency was added. External consumers may use their own qualified parsers and must not trust this model-writable verifier as their security boundary.

At consumption, require a clean authorised checkout containing the final published package, verify hashes/source/ancestry, and independently run the controller's actual qualified test adapter. Hold protected authority and expected policy/report hashes outside model-writable repository state. If the adapter, signatures, runtime boundary or report transport is unavailable, remain BLOCKED. Do not weaken gates, issue self-approval or edit another worktree as an integration shortcut.