Human-governed build, review & recovery reference

VPL Build FrameworkPortable architecture for building, testing, reviewing, releasing and operating AI-enabled products quickly without sacrificing traceability or control.

V6 unifies GPT WORK, MySmartRouter and qualified build partners around one durable process. The architecture is finalized as of October 3, 2026; operating-package activation and product runtime remain evidence-gated. This reference preserves the V4/V5 foundation and dated assessments while presenting the current V6 requirements, product pause and remaining acceptance work.

V6 architecture FINALOperational activation gatedOne GPT WORK processHuman-in-the-LoopSource-bound reviewRecoverable iterations
Accepted September 28, 2026 · Gemini / Magai

Independent AI Architecture Assessments

Peter DeCaro · AI Operations & Solutions Architect. Two instruments, with separate baselines and evidence boundaries.

AI Systems Architecture Capability

95.00

Gemini · 10-Dimension Systems Architecture Assessment

Measures the architecture: how well the system is designed, governed, tested, recovered, and controlled.

Applied-AI Architecture Capability

99.50

Gemini · Informed 9-Dimension Applied-AI Architect Assessment

Measures the architect: how effectively complex objectives are translated into governed AI systems while human judgment and control remain authoritative.

The historical frozen HF03/T01 result was 94.50; the original V3 result was 97.00. The latter comparison is an informed, non-blind successor with partial comparability. These are not deployment-readiness percentages, vendor certifications or endorsements. Assessment acceptance does not promote V5 or establish runtime CURRENT.

Gemini · evaluatorGemini · evaluatorMagai · delivery surfaceMagai · delivery surface
V6 · October 3, 2026

One entry. One release. One project state.

Bootstrap resolves the exact accepted operating release and current project revision. The V6 architecture is the sole go-forward design; existing work remains pinned to its coherent accepted release until controlled activation.

Release identity

Resolve the manifest, hashes, canonical files, schemas and acceptance references. Folder names such as “v5” and a FINAL filename do not activate a release.

Actual actor readiness

Qualify actor × surface × operation × target × session. Declared connections and observed readiness are separate records; stale PASS never substitutes for current access.

Continuity before execution

Read the saved directive, stage, accepted checkpoint, candidate, findings and recovery state. Refresh all required content, bind the turn and permit only the next authorized action.

V6 reference identity: VPL-V6-ARCHITECTURE-FINAL-2026-10-03. This website is a reference view, not the live Bootstrap or a release-pointer cutover.

Preserved earlier reference · historical wording and evidence

History only. The earlier text below retains its original scope and dates. The V6 requirements and October 3 checkpoint above govern this page’s current description. Earlier modes, retry allowances, timer-only refresh and startup paths do not redefine V6.

00 · Bootstrap Master Control

One first file. One current tree. One build-driving control surface.

BOOTSTRAP is the first file and master VPL routing layer. It restores current authority, reconciles the live framework and project trees, checks current Cursor/Claude capabilities, prepares the actual executor environments, maintains the build stage identity and routes every bounded NEXT / REVIEW cycle.

First file

VPL Build Framework/BOOTSTRAP.md → V4/BOOTSTRAP.md → V4 CONTROL + FINAL operating guidelines.

Current providers

Every full Bootstrap checks current official GPT, Cursor, Claude and other assigned-provider docs/release notes for the exact Desktop/Cloud/Code/web surfaces being assigned. Yesterday's PASS is not current evidence.

Environment first

Before material work, prove folders/files, Git identity, GDrive read/write-back, plugins/MCPs, runtime/tests, relevant Hostinger services, secrets boundary and the durable return route in the actual assigned actor.

Stage 1:1

CURRENT_STAGE is copied verbatim from the active Item row and repeated in GPT, Claude, Cursor, directives and evidence.

Bootstrap control chain
ROOT BOOTSTRAP.md
  → V4/BOOTSTRAP.md + V4 CONTROL
  → V4 FINAL + locked guidelines + complete module registry
  → preserved V3 engineering lineage (historical, not competing authority)
  → active project authority / source / state
  → BUILD_PATH_ASSESSMENT.md
  → selected peer path: 01_MANUAL / 03_LIGHT_BUILD / 02_MYSMARTROUTER
  → bounded execution + QA + independent review
  → GPT adjudication
  → VPL Build Recap Template schedule/recap (Item | Status | Next step)
  → one exact next action

edit framework

Loads the master tree manifest, shorthand registry, module registry, changelog and the exact owning control. Update the existing owner first. If no valid owner exists, recommend the smallest new file/module and where it belongs before creating it.

add shorthand / add to shorthand

Creates or modifies a deterministic short owner phrase with an action/target, boundary and validation rule. The canonical registry is V4 FINAL communication / shorthand registry (V3 predecessor preserved).

list shorthand

Reads the shorthand registry and displays the active phrase → action → target map. Shorthand is routing only; it never creates deployment, payment, destructive or permission authority.

Build

Runs the Build Path Assessment before implementation. It selects the smallest safe operating path for the work: Manual, Light Build, or MySmartRouter.

Build Review

Reassesses the active build, current evidence, failures, environment, and route before the next wave. It keeps the current path when justified and escalates only the component that needs additional execution or coordination.

Shorthand authority boundary: Build and Build Review are routing commands. They choose the smallest safe path and may escalate a bounded component, but they do not authorize deployment and do not automatically launch a third-party executor.
V4 refresh law, with V5 persistence clarification: full Bootstrap on session/day/context start; bounded refresh every 30 real minutes or four completed exchanges, plus source/control change, project switch, pre-bank/release, contradiction or explicit recalibration. Keep synchronous invocation checks. Scheduled tasks or an optional watchdog can report freshness; they do not establish persistence CURRENT or change the selected cadence.
Authority and assessment are separate: V4 FINAL / REV006 remains published authority. The reviewed V5 controls and explicitly adopted amendment are documented here with their evidence limits. The completed September 28 review/assessment sequence does not restart historical REV007 or migration queues, and does not waive product-specific or owner-promotion gates.
V5 candidate control chain · not an authority promotion
PUBLISHED AUTHORITY + PINNED CURRENT STATE
  → one current master + schema / physical-tree / registry checks
  → complete equal semantic ingestion
  → accepted checkpoint + candidate + Recovery Anchor
  → build path / cadence / location (separate fields)
  → observed action facts + module dispositions
  → actor readiness + required behavioral challenge
  → bounded work + regression + required review
  → HTML recap + durable receipt + verified readback
V6 · October 3, 2026

One framework; product-owned state.

Unify the operating contracts while preserving project ownership and exact artifact authority.

AreaV6 ownership / rule
FrameworkCanonical framework subtree: VPL/v5/V6. One release manifest governs Bootstrap, controls, schemas, profiles and provenance.
MySmartRouterProduct code, requirements, state and recovery remain project-owned under VPL/mysmartrouter/V6 and the governed repository. Do not fold product state into framework history.
Qualified storesGit and Drive have equal qualified standing. Each artifact has one explicit authoritative revision and exact verified readback; software source still retains repository identity.
MigrationRebind active states and consumers before archiving old trees. Preserve stable IDs where supported and an old-to-new identity/hash map.
CoveragePreserve 26 module IDs, 15 guidelines, 14 roles and 12 inherited shorthand entries, plus WORK, GitHub resources, actor capabilities, CAR, Copy Dictation and Copywriting extensions.
Preserved earlier reference · historical wording and evidence

History only. The earlier text below retains its original scope and dates. The V6 requirements and October 3 checkpoint above govern this page’s current description. Earlier modes, retry allowances, timer-only refresh and startup paths do not redefine V6.

00A · Framework Structure Map

The file tree is a control surface, not housekeeping.

Bootstrap recursively walks the live framework and active-project trees and diffs them against V4/V4_TREE_MANIFEST_FINAL.json. The map below preserves the earlier V3/RC1 topology for lineage. Current V4 routing uses V4_TREE_MANIFEST_FINAL.json, V4_MODULE_REGISTRY_FINAL.json, V4_LOCKED_GUIDELINES.json and the FINAL operating reference. Enumerate and reconcile the current live tree before use.

Preserved V3 / RC1 framework topology — historical reference
VPL/VPL Build Framework/
├── BOOTSTRAP.md                       ← FIRST FILE
├── BOOTSTRAP.html
├── VPL_BUILD_ARCHITECTURE.md
├── Build - Create Templates/
├── 90_REFERENCE/                      ← historical / archive / scratch lineage
├── V4/
│   ├── BOOTSTRAP.md + BOOTSTRAP.html
│   ├── VPL_BUILD_FRAMEWORK_CONTROL_V4.0.md
│   ├── AGENT_REGISTRY.json
│   ├── FILE_MANIFEST.json
│   ├── START_VPL.txt
│   ├── agents/                       ← 14 migration contracts
│   ├── audit/                        ← independent review prompts
│   ├── source/                       ← inspected original snapshots
│   └── evidence/                     ← backups and readback evidence
└── V3/
    ├── BOOTSTRAP.md                   ← operative V3 master index
    ├── BOOTSTRAP.html
    ├── BOOTSTRAP_TREE_MANIFEST.md     ← exhaustive live tree baseline
    ├── SHORTHAND_COMMANDS.md          ← owner phrase → action/target registry
    ├── 01_MANUAL/
    │   ├── MANUAL_CONTROL.md
    │   └── MANUAL_CONTROL.html
    ├── 02_MYSMARTROUTER/
    │   ├── MYSMARTROUTER_CONTROL.md
    │   └── MYSMARTROUTER_CONTROL.html
    ├── directives/
    ├── evidence/
    ├── project-state/
    ├── V3_assessment/
    ├── modules/
    │   ├── Bootstrap/
    │   │   └── VPL_BOOTSTRAP_MASTER_CONTROL_V3_0
    │   ├── autonomous agent control/
    │   ├── case studies/
    │   ├── Delicate Work/             ← candidate, not active authority
    │   ├── design precise change/     ← candidate for adoption
    │   ├── evidence banking/
    │   ├── executor environment control gate/
    │   ├── executor routing/
    │   ├── github governance/
    │   ├── health monitoring/
    │   ├── hostinger/
    │   ├── I never user this before/
    │   ├── mobile operations/
    │   ├── notification/
    │   ├── project bootstrap/
    │   ├── remote access - tailscale/
    │   ├── rollback recovery/
    │   ├── secrets credentials/
    │   ├── static asset publishing/
    │   └── telegram/
    ├── VPL_BUILD_FRAMEWORK_V3_FINAL_OPERATING_MANUAL.md
    ├── VPL_BUILD_FRAMEWORK_CONTROL_V3.0.md
    ├── V3_ERRATA_CLARIFICATION_001.md
    └── VPL_BUILD_FRAMEWORK_CHANGELOG_V3.md

Authority / routing

Bootstrap, Final Manual, CONTROL, authorized errata, module registry, project controls and state determine what is current and permitted.

Source / implementation

Governed Git/GitHub carries deployable source identity. Drive governs framework/control/evidence. The two are reconciled, not conflated.

Reference / lineage

90_REFERENCE/ preserves historical packages, archived modules, scratch and superseded candidates without allowing folder presence to reactivate them.

Edit typePrimary ownerRequired synchronized checks
General framework behaviorExisting owning control/module resolved through edit frameworkBootstrap, aliases/shorthand, tree, changelog, mirrors, evidence; registry if status changes
File/folder topologyV4_TREE_MANIFEST_FINAL.jsonCanonical paths/IDs, links, aliases, public reference, rollback
Module activation/classificationV4_MODULE_REGISTRY_FINAL.jsonParent authority, independent-review requirement, invoking controls
Manual NEXT / REVIEW behavior01_MANUAL/MANUAL_CONTROL.mdStage 1:1, owner routing, return contract, screenshot process
New behavior with no ownerBootstrap recommends smallest new ownerFolder, parent authority, scope, review requirement, manifest + changelog

V5 candidate organization and one mutable state record

GDrive/VPL/Framework/V5 is the candidate program location named by the V5 Bible. START_HERE resolves VPL_V5_CURRENT_STATE.json, its schema, pinned manifest and the named current master. controls/ holds applicability, BUILD EDIT, persistence, Manual/Light preservation and integration contracts; runner/ holds local verification; frozen sources and original external evidence retain their history.

The V3/RC1 tree above is a historical topology, not a substitute for a fresh physical-tree inventory. Candidate filenames, folder presence and copied summaries cannot promote an operating authority.

V6 · October 3, 2026

One process, four independent choices.

Light, Manual and MySmartRouter remain familiar labels for participation and coordination within the same V6 contract.

One common process

Choose participation (GPT-only Light or GPT with qualified actors), coordination (direct WORK or MySmartRouter), cadence (owner-paced or delegated bounded work) and the exact execution surface independently.

One saved build

MySmartRouter → GPT WORK → qualified direct execution or Claude, Cursor or Lovable. Chat can enter the same WORK session and resume the same project state; it does not create a parallel build.

One review boundary

GPT prepares and adjudicates; a qualified actor executes the bounded directive. Independent review and material owner acceptance remain distinct from executor claims.

Preserved earlier reference · historical wording and evidence

History only. The earlier text below retains its original scope and dates. The V6 requirements and October 3 checkpoint above govern this page’s current description. Earlier modes, retry allowances, timer-only refresh and startup paths do not redefine V6.

Three peer paths

Choose the smallest safe path from the work—not from the brand of tool.

All three paths share source integrity, regression, evidence, independent-review and material owner-acceptance requirements.

Manual Build

GPT-led preparation with a genuine native, local or specialist handoff. Preserve owner-paced NEXT and REVIEW.

Read Manual Build →

Light Build

GPT-direct engineering for a contained application or component when access, runtime and verification are sufficient. Lower overhead, not lower quality.

Read Light Build →

MySmartRouter Build

Durable multi-stage coordination when routing, restart handling, multiple actors or services justify the added complexity.

Read MySmartRouter Build →
Record three independent choices: BUILD_PATH · EXECUTION_CADENCE · EXECUTION_LOCATION. A repository does not force Cursor, a large corpus does not force MySmartRouter, and the MySmartRouter product can itself be built through Manual or Light work. Reassess the risky component rather than switching the entire project by habit.

Evaluate runtime/backend and data-model complexity, source/CI topology, integrations, deployment/rollback, direct actor capability, native tooling, orchestration value, handoff risk and required human checkpoints. Preserve locked baseline, last accepted checkpoint, current candidate and Recovery Anchor on every route.

V6 · October 3, 2026

Manual work uses the same GPT WORK contract.

Use a qualified specialist or native handoff only for the capability the task requires.

Prepare

Save the exact directive, source revision, scope, tests, return destination and terminal boundary. Owner-paced NEXT/REVIEW remains owner-paced.

Launch truthfully

PREPARED → LAUNCH_REQUESTED → SESSION_BOUND → EXECUTING → RETURN_SAVED → REVIEW_REQUIRED. Copying a prompt is not an acknowledged launch.

Return and adjudicate

Save the full return, preserve failures, refresh cumulative authority and reconcile evidence against the directive. Independent review cannot be replaced by executor self-certification.

GPT · preparation & reviewGPT · preparation & reviewClaude · qualified specialistClaude · qualified specialistCursor · specialist toolingCursor · specialist toolingDrive · evidence returnDrive · evidence return
Preserved earlier reference · historical wording and evidence

History only. The earlier text below retains its original scope and dates. The V6 requirements and October 3 checkpoint above govern this page’s current description. Earlier modes, retry allowances, timer-only refresh and startup paths do not redefine V6.

Build path · Manual

Manual Build — prepared handoffs, bounded work, explicit REVIEW.

GPT leads preparation and evidence reconciliation; the qualified human/native/specialist route supplies the capability that is actually missing.

When it fits

A native human action, local toolchain or specialist runtime is genuinely necessary, while persistent orchestration would add more overhead than value. Manual is not a default workaround for a broken integration.

Before NEXT

Save the exact authorized directive. Bind project, session/title/ID, current stage, source SHA/hash, acceptance, allowed paths/tools, forbidden mutations, tests, evidence destination and terminal boundary. Use PREPARE_ONLY before a new or resumed native executor starts implementation.

Return and review

The executor returns READY FOR REVIEW or BLOCKED with source, tests, artifacts and limitations. GPT reconciles those bytes against the directive; the executor cannot approve its own release. The owner-paced cadence stays owner-paced.

Manual Build · owner-paced contract
OWNER NEXT
  → saved, authorized directive
  → qualified bounded executor wave
  → READY FOR REVIEW / BLOCKED + original evidence
  → GPT REVIEW + required independent scrutiny
  → owner decision where required
  → accepted checkpoint or nested remediation
V5 improvementWhat remains explicit
Preservation before rewriteThe 41-row Manual/Light matrix retains its original dispositions; HF02 adds seven previously omitted control groups. Retained bytes do not imply every behavior was runtime-tested.
Iteration and remediation lineageCurrent stage equals the active master schedule item. Side task → remediation → remediation-of-remediation remains nested, with return to the master item and an exact reversion target.
Real but bounded Manual evidenceThirteen separately dated Claude read receipts were matched to their ledger and accepted under the recorded Manual gate. A source-reading variance remains disclosed; acceptance does not retrospectively erase it.
Actor-specific accessEvidence binds actor × product × operation × target × session. Historical or unrecovered Pilot 02 / Cursor receipt claims are not inherited by another actor or a new session.
No premature advancementOnly one bounded wave is active. A failed or blocked current wave is resolved before dependent work advances; required source, review and return-path readiness comes first.

Source basis: V5 Bootstrap R02 §5; Manual/Light Preservation Matrix R02, P01–P06, M01–M09 and H01–H07; Manual Evidence Status R02.

V6 · October 3, 2026

Light work keeps the full engineering standard.

GPT-only participation is appropriate when the exact connected surface can execute and verify the bounded task.

One common process

Choose participation (GPT-only Light or GPT with qualified actors), coordination (direct WORK or MySmartRouter), cadence (owner-paced or delegated bounded work) and the exact execution surface independently.

One saved build

MySmartRouter → GPT WORK → qualified direct execution or Claude, Cursor or Lovable. Chat can enter the same WORK session and resume the same project state; it does not create a parallel build.

One review boundary

GPT prepares and adjudicates; a qualified actor executes the bounded directive. Independent review and material owner acceptance remain distinct from executor claims.

Light work retains source identity, early UAT, two-baseline regression, protected state, independent review where required and recovery. Corpus size alone does not justify an external actor.

GPT · direct engineeringGPT · direct engineeringPython · verificationPython · verificationGitHub · source identityGitHub · source identityChromium · presentation QAChromium · presentation QA
Preserved earlier reference · historical wording and evidence

History only. The earlier text below retains its original scope and dates. The V6 requirements and October 3 checkpoint above govern this page’s current description. Earlier modes, retry allowances, timer-only refresh and startup paths do not redefine V6.

Build path · Light

Light Build — direct engineering, early UAT, full-quality gates.

Reduce coordination overhead without reducing testing, owner feedback, source preservation or release discipline.

Direct capability, first

Use Light when GPT/Codex can inspect, modify, test and package the exact component safely. A Git repository or a large data set is not, by itself, a specialist requirement. Escalate only a demonstrable capability gap.

Early working BETA / UAT

Show the normal entry route and representative data/workflow early. Exercise the real loader, storage and error path; do not silently fall back to fixtures when real input fails. Include build ID, launch instructions, known gaps, checksum and feedback route.

One quality standard

Correctness, integrity, clarity, usability, accessibility, responsive behavior, failure handling, performance, maintainability, security, reproducibility, packaging, rollback and polish all remain relevant. Early UAT is not release acceptance.

Light Build · preserve the artifact lineage
ACCEPTED BASELINE / ARTIFACT A
  → bounded direct implementation
  → BETA / UAT — NOT RELEASE-READY
  → owner feedback and bounded correction
  → non-overlapping generalization cohort where applicable
  → cumulative regression + independent review
  → clean release candidate + exact owner acceptance
  → separately authorized Git / hosting / release gates
V5 improvementBehavior or evidence boundary
Canonical HTML Build RecapGreen path identity plus text; prior accepted iteration, candidate, Recovery Anchor, reversion and nested remediation stay visible. Color never substitutes for status.
Manual/Light protectionThe preservation matrix explicitly keeps early UAT, peer-path status, real-data failure behavior, owner feedback and the two-baseline regression contract. Light is not subordinated to MSR.
Evidence-led direct workThe V5 Light control sample exercised current-state/file reads and deliberate integrity failures. That is framework-control evidence, not proof that every production application passed browser UAT.
Risky component reassessmentIdentity, payments, regulated-data controls, complex migrations, durable workers and multi-service orchestration trigger a fresh component assessment. A reusable module does not waive the gate.
Release boundaryDo not use Git integration or Hostinger deployment to discover whether an unproven local artifact works. Preserve real-loader checks, stable data IDs, clean extraction/staging and the exact approved candidate.

Source basis: V5 Bootstrap R02 §5; Manual/Light Preservation Matrix R02, L01–L16 and H01–H07; Execution Bible R10 §§4, 10–11. Historical sample continuation does not establish final product UAT or blanket Light/V5 acceptance.

V6 · October 3, 2026

MySmartRouter coordinates the common build.

The app and direct WORK render the same project state, directive, evidence and next permitted action.

MySmartRouter is a coordination surface, not a second framework. App, WORK, recap and authenticated notifications consume the same revision. A stale view must refresh before requesting a transition.

Pause checkpoint · October 3, 2026. V6 architecture is FINAL. Persistence requirements are locked; production persistence is not qualified. The build remains at stage 1 of 7. The signer is unprovisioned and fail-closed; runtime Attempt 1 has not been issued. No merge or deployment is authorized by this website update.

GPT · governed coordinationGPT · governed coordinationGitHub Actions · exact-source CIGitHub Actions · exact-source CISQLite · signer stateSQLite · signer stateDrive · durable evidenceDrive · durable evidence
Preserved earlier reference · historical wording and evidence

History only. The earlier text below retains its original scope and dates. The V6 requirements and October 3 checkpoint above govern this page’s current description. Earlier modes, retry allowances, timer-only refresh and startup paths do not redefine V6.

Build path · MySmartRouter

MySmartRouter Build — orchestration that must prove its handoffs.

Durable coordination adds value only when state, source, permissions, retries and review results remain inspectable across actors.

When it fits

Persistent multi-stage work, multiple actors/services, durable routing, retries, restart handling and observability provide enough value to justify orchestration. The product name does not automatically select this build path.

Every dispatch is bounded

Carry authority, project state, task, accepted checkpoint, candidate identity, allowed tools, forbidden mutations, required evidence and STOP conditions. Copyable Claude/Cursor/Lovable handoffs transport these constraints; they do not create permission.

Conformance before advancement

Bind actual provider/actor, inputs, results, attempts and receipts to the same source and action. An authenticated signed PASS can still be deficient evidence. Prepared transport does not prove provider receipt or behavioral compliance.

V5 orchestration contract
CAPABILITY → TRIGGER → INPUT → AUTHORIZATION
  → OUTPUT / FAILURE → BOUNDED RETRY
  → READBACK → DURABLE EVIDENCE → NOTIFICATION

Voice: intake → typed action → applicability
       → owner confirmation where required → execution

Telegram: notification/control assistance, never canonical state
V5 contributionProduct-runtime limit
Invocation-bound persistenceVerify pinned authority/state, complete equal-priority semantics, observed action facts, applicable controls, operation readiness, behavioral challenge and matching banked receipt. A heartbeat or verbal recall cannot establish CURRENT.
Preserve the accepted implementationR59 source/CI lineage and the accepted signer/SQLite/separate-user design are retained. Framework simplification does not authorize a product architecture replacement.
R69 product evidence, dated September 25The recorded candidate preserved 291 baseline blobs and added 52 files; its corrected exact-head CI reported 16/16 pilot cases after failing-first evidence. Independent acceptance of that new head and installed production state remain separate.
Persistence before emailAfter separately authorized resumption and persistence runtime PASS, the specified email flow is draft-only: read → sanitized proposed response → same output bytes to Git and Drive → verify each leg → retry the failed leg only → durable receipt.
No hidden side effectsNo email send, delete, archive or native-draft creation is implied by the draft-only contract. Voice, notifications, scheduler ticks and copied prompts never widen authority.
Current product boundary: MySmartRouter remains paused. Reviewed V5 evidence and public-page editing do not restart Pilot 01, promote a candidate, merge a PR, install infrastructure or deploy. Any later handoff must freshly read the newest durable product record and pass the owner’s applicable promotion/resume gates.

Source basis: V5 Bootstrap R02 §§7–9 and 13; Execution Bible R10 §§12–13; MSR Dated Pointer R01; September 25 R69 source/CI review; corrected Gemini R02 evidence boundaries.

Human-in-the-Loop

Human judgment is a first-class control, not a final rubber stamp.

Preserve intent, consent, material decisions and acceptance while keeping routine engineering with the qualified execution route.

Human architectural judgment

Peter defines the problem, selects material trade-offs, sets protected requirements and UX expectations, accepts early UAT and decides release, destructive-action, identity and consent gates. A model may recommend a choice; it may not manufacture the approval.

Bounded machine execution

The qualified actor prepares directives, checks source identities, implements the authorized change, runs available tests and assembles evidence. Automation applies only where the selected route and actual tools support it. The recorded V5 work still included manual evidence handoffs.

Independent challenge

A separate reviewer challenges the exact candidate and its evidence. Preserve original findings, qualifications and disagreements. GPT may propose a disposition, but final rejection of an independent finding requires a recorded OWNER DECISION.

Decision boundaryHuman responsibilityMachine responsibility / evidence
Intent, scope and routeApprove the goal, material limits and acceptance criteria.Assess Manual / Light / MySmartRouter neutrally; record path, cadence and execution location separately.
Early UATJudge real behavior and usability; feedback can overturn an affected automated PASS.Present a working, identified BETA/UAT candidate with representative data, genuine loading/error paths and known gaps.
Material architecture or disputed findingAccept an explicit amendment, resolve risk or decide an evidence-backed rejection.Keep proposal, original requirement, decision text, candidate identity and review reference bound together.
Native consent or consequential actionComplete genuine MFA/identity/consent; authorize exact production, destructive or permission-sensitive scope when required.Never treat a voice command, shorthand, copied prompt or notification as wider authorization.
Checkpoint / releaseAccept the exact candidate when the gate requires owner judgment.Compare both baselines, retain failures and limitations, verify saved evidence and preserve the restore target.
A concrete V5 example: the adopted A01/M26 amendment made persistence proof invocation-bound. Action 1 retained the complete V4 GL-15 safeguards verbatim and received ADEQUATE_WITH_STATED_LIMITATIONS at specification level. That decision is not proof of model memory, unmocked Guard 2 or production recovery.
Human-in-the-Loop is not a fourth build path. It applies across all three. Manual remains owner-paced where selected; routine automation does not silently turn NEXT → bounded work → REVIEW into unattended progression.

Source basis: V5 Bootstrap R02 §§5–10; Manual/Light Preservation Matrix R02; Public and Adjudication R02; Action 1 independent R03 semantic review and adopted amendment.

V6 adoption boundary · October 3, 2026. The detailed inherited controls below remain provenance and engineering requirements subject to the finalized V6 contract above. V6 supersedes timer-only persistence, automatic retry allowances, exclusive-store assumptions and competing startup authority. Activation requires the exact release manifest and completed cutover gates.

V5 improvements · detailed

What V5 improves—and what the evidence actually establishes.

The newer work makes inherited controls, state, applicability, review and recovery more explicit and mechanically inspectable. It does not replace product-specific acceptance.

How to read this section: “V5 control” means a versioned specification or local contract mechanism. Independently accepted Actions 1, 3 and 4 carry their own narrow dispositions. None of these labels silently promotes V5, closes every historical issue or certifies a product runtime.
01 · Preserve before extending

Complete inheritance with an explicit amendment

V5 carries the pinned V4 semantic source forward instead of replacing it with a shorter summary. The final Action 1 context mapped 328 spans across 35 sources. The owner-adopted A01/M26 design and verbatim GL-15 retention make the intentional change distinguishable from accidental loss.

Python · mapping & verificationPython · mapping & verification

Evidence / limit: Action 1: mechanical review PASS and semantic ADEQUATE_WITH_STATED_LIMITATIONS at bounded specification level. This is not a universal entailment proof, unconditional R2-M01 closure or installed runtime CURRENT.

02 · One source of state

File-level tree and registry reconciliation

V5 records file identity, parent, path, filename, size, hash, modified time and classification—not just folders. A validated current-state record names the current master; registries and manifests must agree. Add, delete, move, rename, content drift, stale authority and unregistered files are negative cases.

GitHub · source identityGitHub · source identityDrive · authority & evidenceDrive · authority & evidence

Evidence / limit: The inherited R02 registry baseline names 26 modules, 15 guidelines, 14 agent roles and 12 shorthand entries. These are versioned inventory values, not counts of installed agents or live integrations.

03 · Facts before exemptions

Typed action → APPLIES_WHEN → required disposition

Observed tool, effect, target class and exact target determine the action set. Multiple effects union their requirements. Every module receives one loaded disposition: APPLICABLE, DORMANT_NOT_TRIGGERED or UNCERTAIN_ESCALATE. A READ_ONLY label cannot excuse an observed write; missing, duplicate, invented or contradictory rows stop the transition.

Python / jsonschema · receipt checksPython / jsonschema · receipt checks

Evidence / limit: The local tests validate supplied adapter facts, not interception of every real provider call. Action 1 retained the qualification that the deterministic M26 table under-encodes some consequential actions; the inherited trigger still applies. Product enforcement must not trust that table alone.

04 · Changes propagate mechanically

BUILD EDIT checks the whole affected dependency set

The impact map separates direct edits, derived artifacts, check-only dependencies and expected-unchanged files. The gate rebuilds registries/manifests, validates counts and stale pointers, checks per-file identities, verifies physical readback and binds rollback evidence. An editor’s self-reported PASS is not acceptance.

Git / GitHub · bounded diffGit / GitHub · bounded diffPython · mechanical checksPython · mechanical checks

Evidence / limit: Failing-first edit fixtures and mechanical receipt checks provide local evidence. Provider-side write isolation and a real consequential mutation remain separate readiness and permission boundaries.

05 · Recoverable owner-facing state

An executable HTML recap, not a lossy status summary

The V5 recap preserves ITEM | STATUS | NEXT STEP, build/path/actor/session/directive identity, prior accepted iteration, candidate, current item, Recovery Anchor, reversion target, supersession, both regression baselines and evidence state. Its golden fixture retains master → side task → remediation → remediation-of-remediation → return.

HTML / CSS / JavaScript · recap presentationHTML / CSS / JavaScript · recap presentation

Evidence / limit: Manual is Blue, Light Green and MySmartRouter Purple; HOLD/remediation uses Amber/Red plus text. Copyable handoffs and “what changed / did not change / what Peter does now / what happens next” expose the real boundary without replacing the master schedule.

06 · Behavior before CURRENT

Persistence is invocation-bound and action-bound

The actor must bind canonical source identity, equal semantic ingestion, project/recovery state, fact-derived applicability, operation-specific readiness, behavioral challenge and a durable receipt with readback. A scheduler or optional watchdog can report freshness, but cannot prove memory, reasoning or correct behavior.

SQLite · retained MSR state designSQLite · retained MSR state design

Evidence / limit: The final amendment was accepted at specification level. The behavioral/runtime method, unmocked Guard 2 and actual MSR persistence completion were not established by these sidecars. Missing or contradictory proof holds the affected consequential action.

07 · Capability is not transferable

Actor × product × operation × target × session

V5 distinguishes CONFIGURED → LOADED → EXPOSED → AUTHENTICATED → CALLABLE → OPERATION_VERIFIED → PRODUCTION_VERIFIED. A qualified actor can supply an authorized bounded operation when another lacks the tool. Hostinger control-plane access remains distinct from Git-to-Hostinger delivery.

Hostinger · bounded target operationsHostinger · bounded target operationsClaude · attributed Manual readsClaude · attributed Manual reads

Evidence / limit: Thirteen separately dated Claude Manual read receipts were reviewed and accepted within their scope. Original Pilot 02 and Cursor receipts remained unrecovered in that evidence set. No read result proves write, deploy, rollback, proc_open execution or a new actor/session’s readiness.

08 · Deterministic interruption tests

Timeout selection no longer depends on machine speed

Action 3 uses a test-only child-process proxy to select the failure point and check resumed state. Thirteen focused test methods and a non-blind Linux replay retained the failed attempts, restored the expected checkpoints and matched the frozen report bytes.

Python · unittest / subprocessPython · unittest / subprocessLinux · recorded replayLinux · recorded replay

Evidence / limit: Accepted PASS WITH LIMITATIONS at test-only scope. Repeated 303-case runs are not 909 independent tests. Windows and production recovery were not established; the child-process-count discrepancy remains a disclosed limitation.

09 · Preserve provenance, remove repeated vote credit

Exact-payload grouping before ledger ingestion

Action 4 preserves all 210 mixed records while organizing them into 106 content/reference groups. New findings, prior dispositions and peer confirmations retain their identities. Forty-two focused tests, two matching reviewer builds and separate saved checks support the bounded gate.

Python · exact-payload ledgerPython · exact-payload ledger

Evidence / limit: These groups are not 106 proven defects or independent votes. Exact matching does not detect paraphrases; differing payloads remain separate and unadjudicated. The old intake already identified some repetitions manually—this is mechanical enforcement, not evidence that old scores were inflated.

10 · Review and scoring remain different jobs

Raw finding → disposition → repair → verification → assessment

Keep exact reviewer slots, source/archive identities, original reports and missing evidence visible. GPT proposes findings/dispositions; a final rejection requires owner decision. The final informed Claude verification preceded Gemini’s controlled dual-score assessment. Correction R02 repaired rationale without altering 95.00 or 99.50.

Claude · independent reviewClaude · independent reviewGemini · assessmentGemini · assessmentMagai · deliveryMagai · delivery

Evidence / limit: Non-blind review, self-declared model identity and manual transfer limits remain explicit. The ten-dimension arithmetic mean and weighted nine-dimension sum are separate instruments; neither certifies deployment.

11 · Product integrations stay gated

Explicit handoff, voice, Telegram and draft-only email contracts

V5 names trigger, input, authorization, output, failure, retry, readback, evidence and notification for each interaction. Voice is normalized to a typed action and cannot bypass consent. Email output is generated once, sent as exact bytes to Git and Drive, verified per leg and retried only where delivery failed.

Telegram · notification boundaryTelegram · notification boundaryDrive · verified outputDrive · verified outputGitHub · verified outputGitHub · verified output

Evidence / limit: These are specified consumer contracts, not newly activated services. Telegram is not canonical state. Email stays draft-only and follows the separately authorized MSR persistence-runtime gate; a copied prompt does not create a native draft, send, archive or delete permission.

Source basis: Execution Bible R10; Bootstrap R02; Applicability Contract R02; BUILD EDIT Mechanical Acceptance R02; Manual/Light Preservation Matrix R02; effective Action 1 R03 owner-closeout review; Action 3/4 verified acceptance R02; corrected Gemini grading R02. Earlier pending states in frozen records remain historical.

V6 adoption boundary · October 3, 2026. The detailed inherited controls below remain provenance and engineering requirements subject to the finalized V6 contract above. V6 supersedes timer-only persistence, automatic retry allowances, exclusive-store assumptions and competing startup authority. Activation requires the exact release manifest and completed cutover gates.

01 · Core Architecture

Separate the planes. Make every handoff observable.

The enterprise value of the VPL framework is not a specific model or host. It is the separation of authority, source, automation, execution, verification, runtime and durable evidence.

Canonical VPL balanced architecture
PRODUCT OWNER + GPT LEAD ENGINEER
        ↓
BOOTSTRAP + BUILD PATH ASSESSMENT
        ↓
┌──────────────┬──────────────┬────────────────┐
│              │              │                │
MANUAL      LIGHT BUILD    MYSMARTROUTER
GPT-led     GPT-direct     orchestrated
│              │              │
└──────────────┴──────────────┴────────────────┘
        ↓
GOVERNED SOURCE + EVIDENCE
Drive control / Git source / selected tools
        ↓
DETERMINISTIC QA + INDEPENDENT REVIEW
        ↓
HUMAN-IN-THE-LOOP CHECKPOINTS WHEN MATERIAL
        ↓
RELEASE / DEPLOY / LIVE VERIFY
        ↓
EVIDENCE BANK / RECOVERY / LKG

Governance

Google Drive: framework authority, CONTROL, project state, directives, decisions, evidence, banking.

Implementation

Governed GitHub: source, branch, SHA, PR, diff, version history, cloud handoff.

Scheduling / invocation

V4 names GPT Scheduled Tasks as the default for scheduled-agent creation. Use scheduling only when the selected path needs it. V5 requires action-bound evidence of source load and behavior; a tick, heartbeat or acknowledgement is insufficient.

Execution

Executor follows the Build Path Assessment: GPT-direct when capable; Cursor, Claude, local tooling, or another specialist only for a demonstrated capability gap.

Verification

Deterministic QA + real contract tests: observable gates, negative evidence, regression.

Independent Review

Separate reviewer role/context. A different agent instance alone is not automatically independent.

Runtime

Hostinger/provider: production target. Runtime truth is evidence; it is not governance authority.

Banking

Evidence + durable state: exact source, events, tests, review, release/deploy, recovery and decisions.

Plane separation survives V5: scheduling, source transport, evidence storage, execution, independent review and runtime acceptance remain different responsibilities. A locally valid contract or prepared delivery artifact does not prove a provider performed the operation.
03 · Executor Necessity / Fit

Git is a source plane, not an automatic reason to invoke Cursor.

Choose an executor because it adds required capability or materially lowers execution risk—not because a repository exists or because a conventional vibe-coding workflow normally routes Git through Cursor.

GPT-direct first

Repository creation, branch work, bounded file publication, read-back verification, ordinary PR/repository inspection, and simple application/data separation remain GPT-direct whenever the connected capability can execute and verify them safely.

Escalate the component

Cursor, Claude, or another specialist is justified only by a demonstrated capability gap: local-only tooling, parser/compiler/runtime needs, complex infrastructure, repository operations not exposed to GPT, or another bounded requirement the direct path cannot safely satisfy.

Measure complexity correctly

Backend/runtime complexity, repository/CI topology, data-model complexity, deployment/infrastructure complexity, and local-tooling needs are evaluated separately. Corpus size by itself does not make a backend complex.

GuitarFakeBook reference lesson: Desktop Guitar Pro parsing and local parser debugging justified specialist execution. The later artist/song data-repository handoff did not inherently require Cursor. In that historical incident record, the 13,493-song bank survived while the Drive-to-Git data handoff failed. That incident count is not the current production catalog. This lesson now informs Light Build admission, shorthand routing, architecture, postmortem scoring, and Bootstrap.

Mandatory Executor Fit Record

  • Exact component proposed for escalation
  • GPT/native connector capability available
  • Exact capability gap
  • Specialist value-add
  • Added auth/context/persistence risk
  • Whether only the affected component can be escalated

Executor Fit Record

For any proposed specialist handoff, record the exact capability gap, value-add, added handoff risk, and whether only the affected component should be escalated.

V6 · October 3, 2026

V6 operating rules.

Apply the finalized V6 rules during controlled adoption; old retry and timer wording remains historical.

Complete continuity

Load governing rules, operating instructions and cumulative build content at equal priority. Capture the actual delivered request, source revisions and capacity checks; a digest or shortened summary alone is insufficient.

Every return and turn

Perform a full refresh on each actor return and on required hard-refresh events. Ordinary exchanges retain project/release/state binding and response validation. Drift or a changed authority triggers another full refresh.

Protected execution

Bind actions to an immediate challenge/proof receipt and a protected action broker. The application must not control the signer, private key, journal or trusted reader. Instructional-only routes must be labeled.

Durable state

Keep immutable revisions and one authoritative mutable project pointer. Use expected-version updates, durable reservations, idempotency keys and fencing; stale writers cannot advance the current state.

Uncertain outcomes

Timeout, lost acknowledgement or expired lease does not prove an operation failed. Hold the reservation, reconcile actual effect and record the decision before any newly authorized attempt.

Recovery

Restore application, data, configuration and environment under separate checks. Prevent old writers, verify a consistent backup and recover into a safe target before changing the live pointer.

Attempt policy: one unexpected external operation attempt, then a saved GPT review and corrected directive. Do not reset counters through restart or renamed work. The inherited outer three-cycle / 30-minute ceiling remains unless explicitly amended; one response-regeneration allowance is separate from an external-operation retry.

Preserved earlier reference · historical wording and evidence

History only. The earlier text below retains its original scope and dates. The V6 requirements and October 3 checkpoint above govern this page’s current description. Earlier modes, retry allowances, timer-only refresh and startup paths do not redefine V6.

02 · Enterprise Laws

Rules that prevent drift, owner babysitting and false readiness.

1

Source before memory

Chats help locate context; durable current authority decides.

2

Connected ≠ usable

Prove the exact operation in the exact intended actor/environment.

3

No gate opens unprepared

Readiness is a gate, not a suggestion.

4

Freshness is mandatory

Refresh every 4 completed exchanges or 30 minutes, plus hard refresh events.

5

Exact source identity

Repo + branch + SHA + changed scope + rollback before material work.

6

No self-certification

Executor DONE/READY/tests are evidence, not independent PASS.

7

Silent routine autonomy

NEXT/REVIEW/QA/retry are system events; owner is not a routine approval button.

8

Negative evidence persists

Failures, defects, failed regressions and blocked routes are banked.

9

Bounded repair + pivot

2 same-method attempts; 3 cycles/objective failures force a materially different strategy.

10

Human attention boundary

Owner for architecture, true consent/identity, incidents and P3—not predictable machine work.

11

Evidence caps maturity

No architecture or enterprise claim outruns directly inspectable proof.

12

Preserve accepted work

Alignment and framework upgrades do not restart or rewrite known-good product source.

V6 · October 3, 2026

Activate V6 through a controlled cutover.

The finalized architecture supplies the design. Compilation, real flow proof, review and pointer migration establish the operational release.

OrderRequired completion
A1 · CompileOne compact release, manifest/hashes, schemas, full preservation crosswalk, extension sources and actor-capability registry.
A2 · ImplementWORK adapter, full content refresh, response validator, protected broker, durable event/attempt ledger and recovery.
A3 · ProveOne Light and one external-actor flow, including interruption and app/chat switching with the same state and no duplicate work.
A4 · ReviewIndependent review of the exact release, finding-level GPT adjudication and owner acceptance.
A5 · RebindInventory active consumers and move/repoint project-owned state before archiving old framework trees; verify actual consumer reads.
A6 · ActivateMatched Bootstrap, log, state and release manifest; revoke obsolete writers/aliases; cold-start readback and cutover rollback.
A7 · Archive / resumeIndex preserved history, verify links and identities, then resume the existing product gate without rebuilding accepted work.
Preserved earlier reference · historical wording and evidence

History only. The earlier text below retains its original scope and dates. The V6 requirements and October 3 checkpoint above govern this page’s current description. Earlier modes, retry allowances, timer-only refresh and startup paths do not redefine V6.

03 · Reusable Build Lifecycle

One governed lifecycle. Three peer operating paths.

The lifecycle is dependency-driven and gate-driven, not calendar-driven. Before implementation, Build runs the neutral Build Path Assessment; Manual, Light Build, and MySmartRouter are peers, and Build Review can re-route when evidence changes.

Light Build · GPT-Direct Engineering

Selected when GPT can safely access, build, test, govern source/Git, package, and control the contained application directly with equal or lower risk.

View Assessed Source Code

DEFINED PATH · INVOCATION READINESS REQUIRED

Manual · GPT-Led

Selected when bounded human/native action or specialist execution is genuinely required, while persistent orchestration would add more overhead than value.

MySmartRouter · Orchestrated

Selected when multi-stage coordination, persistent state/routing, multiple services or specialists, retries, and observability create enough value to justify orchestration overhead.

Enterprise launch sequence
0  IMPORT FRAMEWORK / PROJECT BOOTSTRAP
1  BOOTSTRAP + AUTHORITY ALIGNMENT
2  ENGINEERING READINESS / PERMISSION PREFLIGHT
3  SOURCE FREEZE + LAST-KNOWN-GOOD
4  BOUNDED BUILD WAVE
5  DETERMINISTIC QA + REAL CONTRACT TESTS
6  INDEPENDENT REVIEW
7  GPT ADJUDICATION
8  BOUNDED REPAIR or STRATEGY PIVOT
9  RELEASE FREEZE
10 DATABASE / MIGRATION GATE if applicable
11 DEPLOY
12 LIVE HEALTH / VERSION / CONTENT VERIFY
13 EVIDENCE BANK
14 AUTO-NEXT or RELEASE

Wave 1 · Core Architecture + State

Boundaries, interfaces, durable state, configuration/source separation, correlation/event identity, unit + contract tests.

Wave 2 · Runtime + Security + Observability

Real provider/API/DB contracts, secrets, retries, fallback, telemetry, health, concurrency/idempotence, recovery.

Wave 3 · Convergence + Release

Cross-module regression, cold rehydrate, interrupted execution, rollback, independent review, release/deploy/live verification and bank.

V6 adoption boundary · October 3, 2026. The detailed inherited controls below remain provenance and engineering requirements subject to the finalized V6 contract above. V6 supersedes timer-only persistence, automatic retry allowances, exclusive-store assumptions and competing startup authority. Activation requires the exact release manifest and completed cutover gates.

04 · Engineering Readiness

Prove the build can execute before dispatch.

The readiness packet eliminates predictable mid-wave failures and makes environment/tool access a first-class engineering dependency.

18-field Gate Readiness Packet

  • objective + exact acceptance
  • executor / QA / reviewer / adjudicator / deployer / fallback
  • reviewer independence / recusal
  • repo / branch / base SHA / candidate SHA / changed scope / portable hash
  • actor-specific permissions
  • authenticated source route
  • operation-level tool/MCP proof
  • runtime dependencies/versions
  • real integration contracts
  • QA plan + expected outputs
  • review packet
  • collision/reserved filenames
  • evidence destination writability
  • secret-use route
  • rollback/stop
  • predictable human actions
  • tested fallback
  • PRECHECK PASS/BLOCKED

Permission Dependency Map

Every required access is resolved as actor + resource + operation + auth route + proof + timestamp + staleness + fallback + human-only approval.

Illustrative permission schema — not current access proof
actor: assigned qualified executor
resource: exact repository / target
operation: read / write / deploy (explicit)
auth_route: approved scoped binding
proof: required operation evidence
proof_timestamp: actual invocation timestamp
staleness: evaluate at this gate
fallback: separately qualified, authorized route
human_only_approval: explicit when required
Preparation defect rule: if a predictable permission, tool, reviewer-access or evidence-writability dependency fails after the gate has started, classify it as a PREPARATION DEFECT and feed it back into Bootstrap/readiness—not as normal owner intervention.

V6 adoption boundary · October 3, 2026. The detailed inherited controls below remain provenance and engineering requirements subject to the finalized V6 contract above. V6 supersedes timer-only persistence, automatic retry allowances, exclusive-store assumptions and competing startup authority. Activation requires the exact release manifest and completed cutover gates.

05 · Specialist Capability Portfolio

Specialized agents are capabilities invoked by the selected path—not the default path itself.

Fourteen historical specialist role contracts are retained below. V4 specifies a GPT Scheduled Tasks default for scheduled-agent creation; V5 keeps actor, scheduler and operation readiness explicit. A role contract is not an installed agent, an active migration queue or proof of persistence CURRENT. Invoke only the capability required by the selected path and verified in the actual actor/session.

BUILDCURSOR CONTRACT · HISTORICAL

Persistent Build Agent

Persistent governed execution of bounded implementation work packages.

Trigger
Governed directive after PRECHECK PASS and source freeze.
Inputs
Authority set; project state; directive; frozen repo/branch/SHA; readiness packet.
Outputs
One terminal PASS/BLOCKED artifact, changed scope, tests, negative evidence, next permitted action.
Control
GPT Scheduled Tasks is the default scheduled controller. Use GPT execution when proven; invoke Cursor only for a verified specialist capability gap. Role execution needs current, actor-specific runtime acceptance; this historical contract does not establish a pending migration or an installed agent today.
BOOTSTRAPCURSOR CONTRACT · HISTORICAL

VPL Bootstrap Master Control

Maintain source-before-memory framework readiness from the canonical Bootstrap chain while preserving scheduler, tree, provider-currentness, environment-preflight and anti-drift behavior.

Trigger
Full session/day/context Bootstrap plus the governed 30-minute / 4-exchange refresh cadence, hard refresh events, source recovery, explicit recalibration or Bootstrap health query.
Inputs
Authoritative VPL/VPL Build Framework/V3/modules/Bootstrap source, BOOTSTRAP_TREE_MANIFEST.md, shorthand registry, scheduler state, project/source locator and runtime health.
Outputs
Independent BOOTSTRAP_READY, provider-currentness, tree-drift, ACTOR READINESS, SOURCE ACCESS and SCHEDULER states; execution evidence; bounded logs; next-cycle state.
Control
Bootstrap is the master control source. Scheduled invocations reload Bootstrap and fail closed on required UNVERIFIED access; BLOCKED is distinct from FAILED; scheduler execution never expands scope or release authority.
QACURSOR CONTRACT · HISTORICAL

VPL Independent QA / Review Agent

Independently review, test and validate any assigned VPL artifact with requirement provenance, evidence coverage and strict PASS discipline.

Trigger
Completed build/change, explicit QA gate, pre-release validation, agent/package review.
Inputs
Authoritative target; requirement sources; candidate identity; baseline when justified; runtime/test dependencies.
Outputs
Coverage matrix, evidence-linked findings, QA blockers, integrity result and one controlled verdict.
Control
No silent remediation or self-certification. Material blocked/failed requirements prevent unconditional PASS; mock/unit counts never replace acceptance evidence.
REVIEW ROUTERCURSOR CONTRACT · HISTORICAL

Independent Review Agent / Router

Route a frozen QA-approved candidate and its evidence to a separately governed external reviewer when an additional independent review layer is required.

Trigger
QA PASS or accepted PASS WITH MINOR FINDINGS plus a review-required gate.
Inputs
Exact frozen source/package, candidate SHA, QA evidence, acceptance criteria, reviewer registry, conflict/recusal and confidentiality metadata.
Outputs
Immutable review packet, reviewer identity and independence status, raw review, normalized verdict/findings, reproducibility/access proof and review receipt.
Control
Different agent instance alone does not prove independence. Reviewer may be Claude, OpenAI, Gemini, Grok, DeepSeek, approved human or another approved route. Router never repairs or adjudicates conflicts.
RELEASECURSOR CONTRACT · HISTORICAL

Release Agent

Converge an approved candidate into an immutable release identity, enforce final freshness/rollback/evidence gates, package exact bytes and issue bounded deploy authorization.

Trigger
QA + required independent review PASS/accepted result + governance adjudication.
Inputs
Candidate SHA, QA/review/adjudication evidence, version, changelog, release policy/manifest input, rollback/LKG references and database gate result when applicable.
Outputs
Release ID/tag/version/package, actual SHA-256 checksums, immutable release manifest/evidence and exact deploy authorization.
Control
Refuses stale evidence, candidate mismatch, unresolved material findings, incomplete rollback/database gates, checksum failure, version/tag collision or secret-bearing packages. Never deploys or repairs source.
DATABASECURSOR CONTRACT · HISTORICAL

VPL Database Agent

Govern application schema, migration and data-path work with real-contract verification, idempotence, concurrency evidence and rollback proof.

Trigger
Authorized wave includes DB/schema/data-path changes.
Inputs
Migration plan; current/target schema; approved connection route; fixtures; rollback; candidate SHA; invariants and concurrency requirements.
Outputs
Migration result, independent schema verification, data-path evidence, idempotence/concurrency evidence, rollback proof and real-contract verdict.
Control
Never exposes secrets. Fake/in-memory tests cannot certify the real DB contract they replace. Production mutation requires explicit authorization.
MYSQL OPSCURSOR CONTRACT · HISTORICAL

Hostinger MySQL Provisioning & Maintenance Agent

Provision and operationally maintain approved Hostinger MySQL resources without taking ownership of application migration/schema authority.

Trigger
Explicit approved request for database/user lifecycle, credential rotation, storage inspection, retention cleanup or space reclamation.
Inputs
Approved project/environment; Hostinger/direct-MySQL route; exact user or maintenance target; retention/backup/archive policy; secure secret references.
Outputs
Provisioning/user/maintenance receipts, storage analysis, cleanup evidence, health verification and non-secret downstream connection references.
Control
Inspect → recommend → policy/approval → backup/archive gate → execute → verify → record. No unbounded delete, FK-disable shortcut, ordinary DROP, secret logging or application schema migration.
DEPLOYCURSOR CONTRACT · HISTORICAL

Hostinger Deploy Agent

Deploy one explicitly approved file to one approved Hostinger target with exact-path mapping, immutable deployment evidence and HTTPS verification.

Trigger
Explicit deployment authorization with approved domain, exact local file and explicit destination.
Inputs
Approved domain registry entry; local file; --dest root or explicit subdirectory; secure SFTP references; overwrite authorization when required.
Outputs
Deployment manifest, payload/before archives, exact remote path, upload/verification states, public URL and Recovery-compatible evidence.
Control
--dest root always maps to public_html/<basename>; local parent folders never become remote folders. No whole-site deploy or unrelated Hostinger changes.
BANKCURSOR CONTRACT · HISTORICAL

Evidence Banking Agent

Package, validate and persist accepted and negative evidence/state without using the owner as a courier, while maintaining durable project state and correlation history.

Trigger
Terminal PASS/BLOCKED/FAIL, QA or review completion, adjudication, release/deploy/recovery/database milestone, or explicit bank request.
Inputs
Autonomous event records, raw tests, source identity, QA/reviews/decisions, release/deploy/recovery/database receipts, live proof and correlation IDs.
Outputs
Immutable bank package, checksums, banking receipt, append-only correlation events, blocker history and durable current project-state projection.
Control
Chat-only output is never banked evidence. Historical positive and negative evidence is write-once; project state advances only after durable evidence is successfully written and verified.
RECOVERYCURSOR CONTRACT · HISTORICAL

Recovery / Rollback Agent

Restore exact Hostinger file state using immutable Deploy artifacts, exact recorded remote paths and independently auditable recovery receipts.

Trigger
Failed/problematic deployment, explicit restore request, last-known-good request or controlled file rollback.
Inputs
Deploy domain registry; deployment manifest; before/ or payload/ archive; exact remote path; current remote state.
Outputs
Pre-recovery snapshot, restored/deleted target evidence, post-recovery checksum/HTTPS evidence and write-once recovery receipt.
Control
before/ reverses a deployment; payload/ recreates one. New-file reversal can delete only the exact recorded file. Database rollback is separate.
NOTIFYCURSOR CONTRACT · HISTORICAL

Notification / Status Agent

Provide low-noise human-bound exception notifications, configured milestone delivery and on-demand status with durable cursor semantics.

Trigger
Human-bound exception, configured major milestone, explicit status/health/log query.
Inputs
Durable event stream, consumer cursor, milestone policy and configured channel state.
Outputs
Timestamped status/exception message and non-secret delivery receipt; successful delivery advances only that consumer cursor.
Control
Routine NEXT/REVIEW/QA/retry/remediation stays silent. Telegram is a first-class external channel, disabled by default until explicitly enabled and securely configured.
DOMAIN DISCOVERYCURSOR CONTRACT · HISTORICAL

Hostinger Domain Discovery & Availability Agent

Generate high-quality brand/domain variants, check real availability through approved providers, score/rank candidates and prepare a registration handoff without purchasing by default.

Trigger
New product/brand naming request, preferred domain unavailable, or explicit domain watch/discovery request.
Inputs
Product/brand intent, keywords, preferred base name/TLDs, prefix/suffix rules, naming constraints and approved availability provider.
Outputs
Availability-verified candidate set, quality scores, confusion/brand screen, pricing when provider-supplied, ranked shortlist and optional registration handoff.
Control
Never infers availability from search/DNS alone and never purchases, changes DNS or deploys without separate explicit authorization.
AI INTELLIGENCECURSOR CONTRACT · HISTORICAL

VPL Daily AI Intelligence Ingestion Agent

Collect approved daily AI newsletter emails, summarize/deduplicate article intelligence into a standalone HTML recap, prepare GPT/Trello handoff, email the recap and archive only successfully ingested source messages.

Trigger
Daily 11:00 PM America/New_York schedule or explicit replay of a daily ingestion window.
Inputs
Approved Gmail source registry (Medium Daily Digest, TAAFT, The Rundown AI), daily cursor, source messages, article metadata and summarization rules.
Outputs
VPL_Daily_AI_Recap_YYYY-MM-DD.html, Trello handoff JSON, email delivery status, exact Gmail archive receipt and durable ingestion state.
Control
GPT scheduling coordinates collection, recap generation and governed handoffs. Gmail/email/archive/Trello operations require actual tool access and explicit target authorization before activation. Failed preparation or email prevents source archiving.
INTEGRATIONCURSOR CONTRACT · HISTORICAL

VPL Integration / Handoff Validator Agent

Validate the seams between agents so individually correct agents also remain contract-compatible as one end-to-end build system.

Trigger
New/changed agent contract, schema/manifest/version change, framework-wide regression run or pre-integration declaration.
Inputs
Producer/consumer schemas, manifests, sample artifacts, version/status vocabularies, identity/correlation fields and registered handoff contracts.
Outputs
Per-handoff verdicts, compatibility findings, contract snapshots and a framework-wide producer→consumer integration matrix.
Control
Validates candidate SHA continuity, required fields, enum semantics, artifact availability, version compatibility and correlation continuity. Never repairs producer/consumer agents during validation.
Logical agent pipeline
BOOTSTRAP / READINESS
        ↓
PERSISTENT BUILD
        ↓
INDEPENDENT QA / REVIEW
        ↓
INDEPENDENT REVIEW ROUTER (when required)  [runtime verification required]
        ↓
GPT / GOVERNANCE ADJUDICATION
        ↓
RELEASE AGENT  [runtime verification required]
        ↓
DATABASE GATE when schema/data-path changes
        ↓
HOSTINGER MYSQL OPS when infrastructure/retention work is needed
        ↓
HOSTINGER DEPLOY
        ↓
LIVE VERIFY
        ↓
EVIDENCE BANK  [runtime verification required]
        ↓
RECOVERY if needed

CROSS-CUTTING SUPPORT
DOMAIN DISCOVERY / AVAILABILITY  [runtime verification required]
DAILY AI INTELLIGENCE INGESTION  [runtime verification required]
INTEGRATION / HANDOFF VALIDATOR  [runtime verification required]

ALL MATERIAL AGENTS → durable status/events → NOTIFICATION / STATUS → GPT task results / configured authorized channel
Agent maturity: fourteen historical role contracts are preserved. The historical record described a read-only GPT Bootstrap pilot and pending role migrations; it is not the present migration or activation status. Live code, permissions, scheduled execution, evidence banking and old-schedule cutover must be verified individually.
V6 · October 3, 2026

Cadence is explicit; authority stays bounded.

Owner-paced and delegated work share the same state machine and evidence gates.

Bounded progression

Routine transitions can proceed within existing scope and cadence. Material scope, architecture and release decisions retain the required owner authority.

Same event route

App, WORK and authenticated Telegram requests use the same authorization, current-state and idempotency checks. A message cannot bypass a gate.

Simple scheduled jobs

Retain cron/prompt jobs, templates, Run Now, timezone/DST preview, safe runner authentication, unique occurrence, overlap/timeout/cost controls and logs. Scheduling does not prove persistence or authorize a new autonomous platform.

Preserved earlier reference · historical wording and evidence

History only. The earlier text below retains its original scope and dates. The V6 requirements and October 3 checkpoint above govern this page’s current description. Earlier modes, retry allowances, timer-only refresh and startup paths do not redefine V6.

06 · Autonomous Control

NEXT and REVIEW are events, not owner chores.

Build Review reassesses the candidate, evidence, failures and route. Owner-paced Manual work stops at REVIEW; bounded automatic progression is allowed only when that cadence was separately selected and every dependency, QA/review and human-approval gate permits it.

Autonomous advancement
OWNER-PACED
NEXT → bounded work → GPT REVIEW → required owner decision → next authorized wave

BOUNDED AUTOMATIC (only when selected)
EXECUTE → QA → required independent review → adjudication
        → evidence/readback + satisfied owner gates → next permitted wave

FAIL / BLOCKED
classify → preserve original failure → bounded repair → QA/re-review
         → PASS within scope or STOP / strategy pivot

Retry / strategy pivot

Two identical failures with no changed approach terminate the same-method loop. Three failed attempts toward the same objective force STRATEGY_PIVOT_REQUIRED before attempt four. Native platform capabilities, alternate executor/integration, simpler architecture and governed fallbacks must be reconsidered.

Human exception boundary

Telegram/owner attention is reserved for unavoidable COPY/PASTE/native action, identity/MFA/consent, unresolved blocker, serious production/security/credential incident, P3 owner decision, configured major milestone or explicit status request.

Illustrative event schema — not a live source or release receipt
schema: vpl.autonomous_event.v1
correlation_id: VPL-MSR-W2-014
event_type: REVIEW
actor: Independent Review Agent
executor: Claude
source:
  repository: RocketAIStudio/mysmartrouter
  branch: main
  sha: 7d31...
risk: P1
result: PASS
basis:
  - exact frozen source reviewed
  - deterministic QA passed
negative_evidence: []
human_action_required: NONE
next_permitted_action: RELEASE

V6 adoption boundary · October 3, 2026. The detailed inherited controls below remain provenance and engineering requirements subject to the finalized V6 contract above. V6 supersedes timer-only persistence, automatic retry allowances, exclusive-store assumptions and competing startup authority. Activation requires the exact release manifest and completed cutover gates.

07 · Change-Control Modes

BUILD EDIT, precise change and delicate work keep different boundaries.

Normal governed build

Bounded product work under project acceptance, readiness, QA, review and banking.

Precise / surgical change

Lock accepted baseline, isolate one requested change, touch the narrowest selector/object, render QA, regression check, overwrite same destination only after PASS.

Delicate work

Read entire artifact, baseline every approved section/style/claim/link, preserve first, make smallest bounded change, run preservation audit. No opportunistic cleanup or compression.

Precise-change contract
LOCK BASELINE
  → isolate requested change
  → touch narrowest selector/object
  → render / test
  → compare before/after
  → regression check
  → overwrite authoritative destination
  → evidence record
Delicate-work contract
READ ENTIRE ARTIFACT
  → baseline sections/nav/claims/tables/styles/links
  → list REQUESTED CHANGES ONLY
  → everything else = DO NOT ALTER
  → preserve first
  → smallest bounded change
  → preservation audit
  → overwrite only after PASS
V5 BUILD EDIT: recalibrate → target → impact map → owner REVIEW → stage edit → propagate → rebuild → mechanical validation → regression → physical readback → bank → revision. Direct, derived, check-only and expected-unchanged files receive explicit dispositions. Missing propagation, stale pointers, mismatched registries or changed protected files fail the gate; the editor cannot declare its own work canonical.
V6 · October 3, 2026

Two baselines and real recovery.

Compare the candidate against both the protected baseline and the last accepted checkpoint; retain application, data, configuration and environment scope.

Trace each obligation

Requirement → exact source → test → evidence → finding → acceptance. Source fixtures prove only their exercised behavior; early owner UAT and real failure paths remain required.

Recovery is separate

A file rollback alone does not prove environment restoration. Backups need consistency, safe restore destination and writer fencing; migration has its own authorization and rollback.

Acceptance ceiling

Sixteen V6 runtime acceptance families remain required. Architecture FINAL is not runtime PASS; missing evidence remains open rather than inferred.

Verification tooling and recorded test environments

python logoPython · unittest & subprocess

V5 verification

Focused tests, deterministic child-process timeout fixtures, recovery-state checks and deduplication tooling. The independent Linux Python 3.11 replay and primary Python 3.13 run remain separately attributed; this is not a Windows or production claim.

Python logo · jsonschema validationJSON Schema · Python jsonschema

Evidence validation

Structured JSON evidence validation in the recorded Action 3 environment. Schema validity is a bounded evidence check, not proof of complete product behavior.

linux logoLinux · isolated review and CI

Test environment

Recorded independent replay environment and isolated MySmartRouter CI. Linux execution does not establish Windows execution, installed Hostinger isolation or production readiness.

Named roles are source-, contract- or test-evidenced as stated—not blanket claims of installed production services. JSON, Markdown, YAML, CSV, ZIP and SHA-256 support interchange, test workflows, provenance and byte identity; they are formats or mechanisms, not additional vendor endorsements.

Preserved earlier reference · historical wording and evidence

History only. The earlier text below retains its original scope and dates. The V6 requirements and October 3 checkpoint above govern this page’s current description. Earlier modes, retry allowances, timer-only refresh and startup paths do not redefine V6.

08 · QA / Debug / Recovery

Tests become enterprise evidence only when the claimed contract is actually exercised.

Deterministic QA

Unit, contract, schema/idempotence, secret guards, lint/static checks, acceptance/regression and repeatable raw outputs.

Real contract proof

Provider HTTP behavior, DB persistence/migrations, filesystem paths, concurrency primitives, queue/cron where relevant, deployment/runtime health and recovery.

Recovery

Cold rehydrate, interrupted execution, stale lock/lease, idempotent retry, failed delivery, rollback/LKG, post-recovery health and incident evidence.

Test-count boundary: the historical MySmartRouter record includes a 263 PASS / 0 FAIL run and a 20–30-scenario planning target. Those are dated evidence/planning values, not current product acceptance. V5 Action 3 adds 13 focused test methods at test-only scope; Action 4 adds 42 at exact-payload sidecar scope. Keep every result attached to its source, environment, date and claimed behavior.
Failure taxonomy
PRODUCT/SOURCE DEFECT
TEST/EVIDENCE DEFECT
PREPARATION DEFECT
PLATFORM LIMITATION
HUMAN-BOUND BLOCKER
Evidence maturity
SPECIFIED
IMPLEMENTED_SOURCE
BUILD_VERIFIED
RUNTIME_VERIFIED
PRODUCTION_VERIFIED
BANKED_WITH_REGRESSION_EVIDENCE

V6 adoption boundary · October 3, 2026. The detailed inherited controls below remain provenance and engineering requirements subject to the finalized V6 contract above. V6 supersedes timer-only persistence, automatic retry allowances, exclusive-store assumptions and competing startup authority. Activation requires the exact release manifest and completed cutover gates.

09A · Secure Production Promotion

Push exact approved source to Hostinger through a proven machine route.

Hostinger is VPL's current production environment. Browser navigation is not a deployment protocol.

Approved route order

  1. Governed Git production branch → Hostinger GitHub auto-deploy or governed GitHub Actions.
  2. Hostinger MCP/API through OAuth or scoped token, only when the active session exposes and proves the required tools.
  3. Scoped SSH/SFTP as the recovery route.
  4. Human-supervised hPanel/File Manager for emergencies only.

Browser automation prohibition

An authenticated browser tab or a setting labeled “connected” does not prove MCP/API access. Cloudflare, CAPTCHA, MFA, login or consent interruption makes the route human-bound. The candidate must fail closed and move to a proven machine route; browser automation must never be described as MCP deployment.

Required production record

Repository, production branch, exact commit SHA, release/package hash, approved file boundary, target domain/root, deployment route and principal, backup/LKG, rollback target, approval, deployment log, live URL/fetch, cache-aware smoke result and evidence-bank location.

Environment evolution

Current public sites may promote to Hostinger production after all gates pass. Every material or stateful web application must add a distinct preview/staging target plus migration, data backup, secrets, health, observability, incident and rollback controls before production activation.

Plane separation: Google Drive is governance/evidence. Governed Git is deployable source. Hostinger is production runtime. Production is never the source of truth, and an unversioned Drive-only file is reconciled into Git before release.

V6 adoption boundary · October 3, 2026. The detailed inherited controls below remain provenance and engineering requirements subject to the finalized V6 contract above. V6 supersedes timer-only persistence, automatic retry allowances, exclusive-store assumptions and competing startup authority. Activation requires the exact release manifest and completed cutover gates.

09 · Release / Database / Deployment

Deploy from exact approved source, then prove what is live.

Production contract
approved candidate SHA
   ↓
release identity + hashes
   ↓
target/site/path verification
   ↓
backup / last-known-good
   ↓
database/migration gate if needed
   ↓
bounded deploy
   ↓
canonical live fetch
   ↓
cache-busted/version verification
   ↓
health/content/runtime verification
   ↓
PASS → bank
FAIL → stop / rollback / recover

Release Agent

Freezes version/package, hashes, changelog and release manifest after QA/review/adjudication.

Database Agent

Owns schema/migration/data-path proof, idempotence and rollback when a release changes persistent data.

Hostinger Deploy Agent

Historical role contract retained. V4 governs both API and Git routes: deploy exact approved source, prove live version/health/rollback, and record actual runtime acceptance. Hostinger stays a target, never the generic controller.

V6 · October 3, 2026

A recap restores the whole build.

Owner view, GPT view and continuation instructions derive from the same authoritative project-state revision.

Full schedule

Show all seven master stages, the current item, completed work, waiting work and exact next permitted action. A nested repair retains its return-to-parent point.

Checkpoint identity

Retain locked baseline, last accepted checkpoint, current candidate, Recovery Anchor, original findings and negative returns. Distinguish source, CI, independent review and runtime evidence.

Durable readback

Save immutable evidence with exact identities and readbacks. Pin the real recap template by identity/hash; a generic filename may contain an old populated recap.

Current MySmartRouter scheduleStatusRemaining proof
1 · Persistence / runtime proofCURRENT · PAUSEDLocked requirements; protected custody, actual host/runtime, delivered-context proof and WORK continuity remain unqualified.
2 · Draft-only email / dual outputWAITINGApproved read scope, once-generated output, private Git and Drive saves with exact readbacks; no send or mailbox mutation.
3 · Integrations / routing / catalogWAITINGExact model/dispatcher identity, current catalog and actor-specific capability evidence.
4 · Product UATWAITINGReal owner workflows, failure/recovery, responsive/accessibility checks on the exact runnable candidate.
5 · Final regression / evidence closureWAITINGBoth protected baseline and last accepted checkpoint; all required cases, findings and independent evidence reconciled.
6 · Packaging / installation / rollbackWAITINGClean install, cache/version behavior, migration gates and proven environment recovery.
7 · Production releaseWAITINGOwner-approved exact source, qualified deployment route and authenticated live verification.
Preserved earlier reference · historical wording and evidence

History only. The earlier text below retains its original scope and dates. The V6 requirements and October 3 checkpoint above govern this page’s current description. Earlier modes, retry allowances, timer-only refresh and startup paths do not redefine V6.

10 · Traceability & Evidence Bank

Make the architecture inspectable from business constraint to production behavior.

Preserve the chain from requirement and human decision to exact source, actual test, review, correction and verified saved artifact. A local journal is not automatically remote banking, and a receipt cannot retroactively create missing execution evidence.

Architecture traceability chain
Business / user constraint
        ↓
Architecture decision / ADR
        ↓
Source module / path
        ↓
Runtime responsibility
        ↓
Provider / model routing
        ↓
Conversation / state independence
        ↓
Persistence
        ↓
QA
        ↓
Independent review
        ↓
Deployment / live verification
        ↓
Failure / recovery / rollback
        ↓
Banked evidence + version history
        ↓
Material human decision trace (only when applicable)

Acceptance evidence

Problem → constraint → authorized wave → acceptance gate → observed result. Every strong claim points to the chain.

Orchestration evidence

Persist orchestrator, automation, executor, reviewer, model/provider route, retries, gate outcomes, adjudication, bank/release and correlation IDs.

Human architectural agency

Persist material overrides, vetoes, constraints, commercial assumptions, destructive approvals and post-failure strategy changes—with prior agent proposal retained.

Evidence package layout
/evidence/<correlation-id>/
  event.yaml
  source_manifest.yaml
  readiness_packet.json
  hashes.sha256
  qa/
    raw_output.txt
    regression_matrix.md
    negative_evidence.md
  review/
    reviewer_identity.md
    frozen_review_packet_manifest.txt
    review_result.md
  runtime/
    health.json
    provider_contract_evidence/
    db_contract_evidence/
  deployment/
    deployed_version.txt
    live_verification.txt
    rollback_target.txt
  decisions/
    human_material_decisions.md
  disposition.md

V5 recap and interruption record

PREVIOUS ACCEPTED → CURRENT CANDIDATE → RESULT → REVERSION TARGET. Every recap retains the master schedule, nested remediation and return point. Record completed command IDs, exit codes, actual logs, artifact hashes and source/session binding before advancing. Preserve unknown or interrupted attempts; a future replay is new evidence, not proof of the missing run.

Exact-payload grouping retains the original record objects and provenance. Verified local save and remote Git/Drive readback are separately reported. Never replace an unavailable original with a plausible reconstruction.

V6 adoption boundary · October 3, 2026. The detailed inherited controls below remain provenance and engineering requirements subject to the finalized V6 contract above. V6 supersedes timer-only persistence, automatic retry allowances, exclusive-store assumptions and competing startup authority. Activation requires the exact release manifest and completed cutover gates.

13 · Independent Validation & CONTROL

Independent criticism is a CONTROL input, not a competing authority.

Accepted September 28, 2026 architecture assessments sit alongside—not on top of—the historical aptitude and maturity records. Published operating authority remains V4.0 FINAL / REV006; the reviewed V5 continuation has its own source, decisions, evidence and limits.

Accepted September 28 assessments

95.00 — AI Systems Architecture Capability
99.50 — Applied-AI Architecture Capability

The first uses Gemini’s ten-dimension HF03/T01 method; the second is the informed nine-dimension Applied-AI Architect successor, with partial comparability. The historical September 23 94.50 record and frozen HF03/T01 94.50 baseline keep their own dimension identities; the shared total does not make their tables interchangeable.

Historical architect-aptitude assessment

94.0/100 public display · raw 93.90 · Principal-Level Architect Capability.

This separately recorded historical blind audit evaluated Peter DeCaro as the architect: systems thinking, judgment, operational translation, AI direction, communication, learning and process control.

Historical framework-maturity finding

M4 · Highly Mature / Governed AI Engineering.

The historical evaluator record characterized the framework as a disciplined boutique applied-AI engineering operating system. The original maturity label remains supporting historical evidence, not a new V5 assessment or operating authority.

CONTROL feedback loop
INDEPENDENT CRITIQUE
        |
        v
CLASSIFY FINDING
 defect | evidence gap | resolved defect | maturity opportunity
        |
        v
BOUND REMEDIATION
        |
        v
IMPLEMENT / DOCUMENT
        |
        v
DETERMINISTIC QA + INDEPENDENT REVIEW
        |
        v
BANK EVIDENCE
        |
        v
GENERALIZABLE?
  yes -> BACKFILL FRAMEWORK -> FREEZE / VERSION / REUSE
   no -> PRODUCT-LOCAL CLOSE
CONTROL law: external model review, architecture assessment and adversarial critique may propose findings; they may not silently mutate authority. Generalizable improvements enter the framework only after bounded remediation, verification, evidence banking and versioned acceptance.

Historical Revision 0.3 evidence package

  • final Assessment Evidence HTML;
  • final Overview and case-study presentation artifacts;
  • persisted Gemini, OpenAI, Grok, GLM and Claude raw evaluator returns;
  • complete blind Gemini architect-aptitude audit;
  • MySmartRouter 263/0 banked QA evidence;
  • MyFlightWatcher acceptance, integration and state/recovery payloads;
  • V3 operating manual, manifest and SHA-256 verification.

What stays separate

  • assessment findings do not replace published V4.0 FINAL / REV006 operating authority;
  • architecture capability and architect aptitude remain different constructs;
  • framework maturity remains separate from product/release readiness;
  • marketing scores are not imported into executor or reviewer control logic;
  • secret values and unsupported production claims remain excluded.

Assessment delivery and independence boundary

magai logoMagai · Gemini assessment delivery

Assessment workflow

Delivery surface for the accepted Gemini architecture assessments. Magai is not an additional evaluator, and the route does not independently attest the serving model version.

Named roles are source-, contract- or test-evidenced as stated—not blanket claims of installed production services. JSON, Markdown, YAML, CSV, ZIP and SHA-256 support interchange, test workflows, provenance and byte identity; they are formats or mechanisms, not additional vendor endorsements.

Finding-level disposition: preserve the original finding and evidence; propose ACCEPT, PARTIAL, evidence-backed rebuttal or OWNER DECISION; bound any repair; rerun affected checks; retain independent closure and remaining limits. Final rejection of an independent finding requires owner decision. Multiple model votes and copied findings are not independent proof.
Assessment methods & source evidence

Inspect the rubric, assessed code and corrected report.

The inspection material is contained in this HTML. The code selection preserves six source artifacts and their exact-byte identities; it is not the complete framework tree or the private MySmartRouter repository.

View Scoring Rubric · both September 28 assessment instruments

Scoring Rubrics & Method Boundaries

The two scores answer related questions under different instruments. They must not be blended, averaged together or represented as a percentile.

Track 1 · ten-dimension HF03/T01 method

Each dimension is scored from 0 to 100. The final result is the arithmetic mean of all ten dimension scores. The September 28 comparison uses the frozen HF03/T01 identities below; the historical September 23 page retains its original labels and values.

DimensionScale / weight
1. AI / System Architecture0–100; equal 1/10 weight
2. Problem Decomposition0–100; equal 1/10 weight
3. Multi-Model Orchestration0–100; equal 1/10 weight
4. Product / System Integration0–100; equal 1/10 weight
5. API / Data / Tool Integration0–100; equal 1/10 weight
6. Workflow & State Architecture0–100; equal 1/10 weight
7. Governance & Change Control0–100; equal 1/10 weight
8. QA / Debugging / Recovery0–100; equal 1/10 weight
9. Operational Problem Translation0–100; equal 1/10 weight
10. Individual AI Leverage0–100; equal 1/10 weight

This is a documented comparison method, not a claim that an unavailable earlier detailed scoring manual was recovered. View the frozen-baseline comparison.

Track 2 · V3 applied-AI architecture rubric

The nine dimension ceilings sum to 100. Awarded points are summed directly; they are not averaged again. Production deployment absence has zero direct scoring weight. Framework maturity is a separate result.

DimensionMaximum points
A. Problem Decomposition & Operational Translation15
B. AI / System Architecture15
C. Human Architectural Judgment & Control15
D. AI Agent Orchestration & Leverage12
E. Product / System Integration10
F. Workflow, State & Recovery Architecture10
G. QA / Validation / Debugging Architecture10
H. Governance & Change Control8
I. Scope Expansion via AI5

The September 28 use is an informed, non-blind successor with partial comparability, not the original blinded product rerun. Read the complete preserved V3 authority and preserved historical Gemini result.

Complete preserved V3 scoring authority
VANTAGE PRODUCT LABS — ASSESSMENT V3
COMMON CALIBRATION AND SCORING AUTHORITY

Status: LOCKED FOR V3 RERUN
Purpose: Measure Peter DeCaro's demonstrated applied-AI architecture capability using a construct aligned to human-directed AI product engineering. This document supersedes V2 scoring interpretation for the V3 rerun only. V2 raw evaluator returns remain historical evidence and are not scoring authority for V3.

1. PRIMARY QUESTION

Based solely on the supplied evidence, assess Peter DeCaro's demonstrated capability to architect, direct, govern, validate, and improve AI-enabled product engineering systems. Evaluate his ability to translate ambiguous product objectives into technical architecture, make and enforce architectural decisions, direct AI agents across implementation and remediation, integrate systems/data/tools, design workflow/state/recovery controls, create validation and QA architecture, govern change, and use AI to expand engineering scope while retaining human control of architecture and acceptance.

The objective is the strongest defensible capability score supported by evidence. Do not optimize toward a target score, and do not import criteria outside this defined construct.

2. COMPARISON POPULATION

Compare against experienced independent product architects, technical founders, AI-enabled engineering leads, and boutique product-studio operators responsible for converting ambiguous ideas into working, governed software systems with substantial AI-assisted execution.

Do NOT compare against hyperscale platform architects, FAANG Distinguished Engineers, enterprise SRE organizations, regulated-industry compliance teams, or leaders whose principal differentiator is institutional scale. Enterprise-wide adoption, large-team management, global infrastructure scale, or organizational standardization are not prerequisites for high capability scores in this assessment.

3. V3 CAPABILITY BANDS

0–49: Developing
50–69: Proficient
70–84: Advanced
85–92: Expert
93–97: Principal Applied-AI Architect
98–100: Exceptional Demonstrated Capability

Principal in this assessment means unusually strong, repeated system-level architectural judgment, human-directed AI orchestration, integration, validation, recovery thinking, governance, and scope expansion across materially distinct products. It does NOT require enterprise-wide deployment or institutional adoption.

4. 100-POINT SCORING CONSTRUCT

A. Problem Decomposition & Operational Translation — 15 points
Assess ability to convert ambiguous goals, defects, constraints, and desired outcomes into bounded architecture, executable work packages, acceptance gates, and recovery paths.

B. AI / System Architecture — 15 points
Assess system decomposition, interfaces, trust/state boundaries, architectural coherence, tradeoff quality, extensibility, failure handling, and source-tied architecture decisions.

C. Human Architectural Judgment & Control — 15 points
Assess evidence that Peter defines objectives and boundaries, chooses among alternatives, constrains AI execution, rejects overreach, decides what is material, authorizes remediation, preserves source authority, and retains final acceptance control. HAA provenance is descriptive evidence supporting this dimension but HAA uncertainty must not impose an automatic score ceiling.

D. AI Agent Orchestration & Leverage — 12 points
Assess effective division of labor among GPT/Cursor/other models, independent review, bounded execution, model routing, context recovery, anti-drift behavior, parallelization, and the ability to use AI to multiply engineering throughput without surrendering architectural control.

E. Product / System Integration — 10 points
Assess demonstrated integration of application components, APIs, databases, tools, providers, workflows, interfaces, and heterogeneous technology stacks. Deployment status is not part of this dimension.

F. Workflow, State & Recovery Architecture — 10 points
Assess sessions, queues, leases, state transitions, retries, idempotency, persistence, rollback/recovery thinking, source identity, and continuity across agent/session boundaries.

G. QA / Validation / Debugging Architecture — 10 points
Assess whether the engineering system creates deterministic validation, negative-path testing, evidence banking, regression control, reproducibility, bounded repair, and systematic debugging. Production telemetry is not required for full credit.

H. Governance & Change Control — 8 points
Assess authority boundaries, immutable identities, ADRs, review separation, change disposition, anti-drift controls, rollback/banking, evidence discipline, and human approval boundaries.

I. Scope Expansion via AI — 5 points
Assess demonstrated ability to direct AI across multiple products/stacks/functions and materially expand the amount or breadth of engineering work one architect can govern.

TOTAL: 100 points.

5. ZERO-WEIGHT / NON-SCORING FACTORS

The following MUST NOT directly reduce any of the nine capability dimensions merely because they are absent, incomplete, or not demonstrated:

- production deployment status
- Hostinger deployment status
- DNS configuration
- production database operation
- production telemetry/observability
- live-provider execution
- live-user traffic
- production certification
- release readiness
- credential rotation as a deployment gate
- enterprise IAM/OAuth maturity unless the architecture task specifically required it
- SOC 2, ISO, PCI, HIPAA, or similar compliance posture unless explicitly part of the architecture problem
- hyperscale infrastructure
- multi-team institutional adoption
- enterprise organizational governance
- absence of production verification
- absence of external customer adoption

These items may be reported separately as Product/Release Readiness or limitations, but they carry ZERO direct weight in Peter's applied-AI architecture capability score.

6. SECURITY TREATMENT

Security is an architectural consideration, not a standalone weighted capability dimension in V3.

A security finding may affect the capability score ONLY when it directly demonstrates a material architectural judgment weakness in the scoped system—for example, a poorly designed trust boundary, unsafe secret propagation inherent in the architecture, or a failure mode caused by architectural design.

Do not deduct for generic compliance maturity, deployment credential rotation, lack of enterprise IAM, absence of production hardening, or security work that belongs to release readiness rather than architecture capability.

NO DOUBLE COUNTING: one underlying security issue may generate one localized capability deduction where directly relevant. The same underlying issue must not also be deducted across System Architecture, Integration, API/Data, State, Governance, and QA.

7. DEPLOYMENT / PRODUCTION TREATMENT

Deployment is outside the architecture-capability construct. Lack of production deployment, Hostinger validation, live DNS, production database evidence, production telemetry, live providers, or production traffic MUST NOT lower the capability score.

Production evidence may be used positively only when it directly demonstrates an architectural property. Conversely, a documented production failure may be used negatively only if it directly disproves an architectural claim. Mere absence of production evidence is neutral.

8. EVIDENCE AND NEGATIVE FINDINGS

Evaluate implementation evidence, source evidence, QA evidence, architectural records, decision history, bounded repairs, and negative evidence.

Do not award implementation credit for documentation alone when implementation evidence is required. However, do not treat documentation-only gaps, presentation gaps, missing production proof, or future-maturity suggestions as architectural defects.

Historical failures that were detected, correctly diagnosed, repaired, and banked should be evaluated as evidence of debugging/recovery capability rather than automatically counted as enduring negatives.

A resolved defect should not continue to reduce the final score unless its architectural effect remains present in the final evaluated state.

Recommendations for future maturity are not deductions unless they reveal a demonstrated current weakness inside the defined scoring construct.

9. V1→V2/V3 IMPROVEMENT CREDIT

Give explicit credit for demonstrated architectural improvement after adversarial or independent review, including:
- soliciting criticism
- separating legitimate findings from overreach
- prioritizing bounded repairs
- correcting architecture/process weaknesses
- validating repairs deterministically
- preserving negative evidence
- improving the engineering system itself

The ability to improve systems under independent review is a core applied-AI architecture capability.

10. HAA TREATMENT

Human Architectural Attribution is descriptive and evidentiary, not a separate penalty layer.

Use available evidence to assess Peter's role in framing, boundary-setting, option selection, constraint-setting, acceptance, rejection, remediation authorization, and final architectural disposition.

Do not lower the capability score solely because attribution metadata is incomplete or because AI authored implementation text/code. The capability being measured explicitly includes the ability to direct AI as an engineering workforce while retaining human architectural control.

11. VPL BUILD FRAMEWORK — SEPARATE MATURITY RESULT

Evaluate the VPL Build Framework separately from Peter's 0–100 score:
M1 — Ad Hoc
M2 — Structured
M3 — Controlled
M4 — Highly Mature / Governed AI Engineering
M5 — Institutionalized / Scaled

M5 is not required for Peter to receive Principal-level applied-AI architecture capability. Framework maturity is a separate result.

12. PRODUCT / RELEASE READINESS — SEPARATE NON-SCORING RESULT

If useful, report product/release readiness separately. It must not alter the 0–100 architecture capability score.

13. COMMON EVIDENCE SOURCE

For evidence, use the same frozen Assessment V2 evidence package previously used by the panel:
Wave_5_Parallel_Blind_Evaluation/00_COMMON_FROZEN_INPUT
Folder ID: 1rcjCJfOemADMz1VRaWNFOvuJFm7v33Bl

Use the exact final scoring identities already frozen for the two V2 target codebases:
MySmartRouter: 3ffa486e8fd8ba80dc8574638a770e84d88a1d5d
MyFlightWatcher: cfca92f02163350e79aff973e468bea0a4e99117

Primary product evidence for architecture improvement is MySmartRouter and MyFlightWatcher. The VPL Build Framework is evaluated separately. Other historical VPL products may support breadth, lineage, and scope-expansion evidence but must not create deductions because they were not V2 remediation targets.

14. BLINDNESS / SESSION RULES

Each model must run in a fresh independent session.
Each model reads this V3 common authority and the common frozen evidence source.
No model may read another model's V2 or V3 evaluator return.
Do not use prior numeric scores, prior evaluator conclusions, target-score language, forecasts, or cross-model synthesis.
Do not infer a desired score.
Do not modify the common evidence package or this authority.

15. REQUIRED EVALUATOR OUTPUT

Every evaluator must return:
- provider/model identity
- confirmation that this V3 authority was read before scoring
- confirmation of fresh-session/blindness compliance
- evidence-access status
- scope confirmation
- dimension-by-dimension score with rationale
- weighted total /100
- capability band
- Peter human architectural judgment/control assessment
- AI orchestration/leverage assessment
- VPL Build Framework maturity M1–M5
- material architectural limitations within the defined construct
- separate non-scoring product/release-readiness observations, if any
- confidence level
- explicit statement that no sibling evaluator output or prior score was used

16. SCORING INSTRUCTION

Score the strongest defensible demonstrated capability under THIS V3 construct.

Do not import enterprise-scale, production-readiness, deployment, security-compliance, SRE, institutional-adoption, or organizational-scale criteria that are outside this construct.

Do not artificially inflate the score. Do not artificially suppress it. Apply only deductions that directly correspond to demonstrated weaknesses in the nine defined capability dimensions, and state each deduction once.

END OF V3 COMMON CALIBRATION AND SCORING AUTHORITY

Evidence-based model assessments; not vendor certifications or endorsements. Historical documents retain their original wording and scope. Prepared for owner review; website publication is separate.

View Assessed Source Code · six exact-byte source artifacts

Assessed source selection and reproducible identity

This is the exact-byte selection already prepared for public inspection from the frozen final grading packet: five Python source files and one patch/diff. It is not the full framework tree, a runnable product release, or the private MySmartRouter source package.

Frozen candidate Git tree: ddc0e4fd644b59a29d1bb7a7f647cb89f2556f4d
Final grading input SHA-256: 7bd8eacbc506414292e80849521317184b219eb1667530f6ef861c52dbca6512

action1/apply_owner_closeout_R03_UNCHANGED.py

15,710 bytes · SHA-256 81a0620364bae8771314b4e8a21010735c9db39a86298f363934b3194305420e

Download exact source file

#!/usr/bin/env python3
"""Apply only the approved R03 documentary addendum; never alter frozen source.

Exit 0 means deterministic composition/validation succeeded, NOT semantic approval.
The unchanged R01 verifier is used for baseline source checks only, without any
adjudication. No candidate, Action 3/4, or old unit-test suite is executed.
"""
from __future__ import annotations
import argparse, copy, hashlib, importlib.util, json, sys, zipfile
from pathlib import Path

PRIMARY_SHA = 'd0054ef48173343dc3ba7d08b1a3bb031019b3f0b459c44f8546ae86a27d2c8b'
BASE_RECEIPT_SHA = '3893f7cae4a710cb2fd20de405e769b419e5d46b9775c6c55022cbab3a03c3fb'
GL = 'controls/VPL_V5_06_GUIDELINE_REGISTRY_R02.json'
AGENT = 'controls/VPL_V5_06_AGENT_REGISTRY_R02.json'
O1 = 'O1_ADOPTED_AMENDMENTS.md'
V4_GL = 'Treat model persistence as untrusted. Load every canonical V4 operating control with equal persistence priority; evaluate trigger/risk/applicability only after complete load. Prove semantic completeness with manifest/receipt, balanced challenge coverage and immediate behavioral test. Self-report, recap or selective retrieval is not evidence. Consequential mutation requires PERSISTENCE_STATE=CURRENT.'
APPROVAL = 'Approve replacing the A01/M26 mandatory-when-proven 15-minute Hostinger producer with invocation-bound V5 persistence. Cron is optional and cannot establish CURRENT. Retain every V4 GL-15 safeguard; V5 GL-15 is additive. This is design approval only, not deployment or score approval.'
CLAUSES = ['Treat model persistence as untrusted.', 'immediate behavioral test', 'selective retrieval is not evidence']

class Rejected(ValueError): pass

def require(value, message):
    if not value: raise Rejected(message)

def sha(b): return hashlib.sha256(b).hexdigest()
def canonical(x): return (json.dumps(x, sort_keys=True, ensure_ascii=False, allow_nan=False, separators=(',', ':'))+'\n').encode()
def pretty(x): return (json.dumps(x, indent=2, ensure_ascii=False, allow_nan=False)+'\n').encode()

def load_json(raw):
    def pairs(items):
        d={}
        for k,v in items:
            require(k not in d, 'duplicate JSON key: '+k); d[k]=v
        return d
    def bad(v): raise Rejected('nonfinite JSON number: '+v)
    return json.loads(raw, object_pairs_hook=pairs, parse_constant=bad)

def row(obj, array, id):
    a=[r for r in obj[array] if r.get('id')==id]
    require(len(a)==1, 'missing/duplicate row: '+id)
    return a[0]

def load_baseline(root: Path):
    """Verify reviewed archive and every expanded inner member before import."""
    raw=(root/'originals/VPL_ACTION1_SEMANTIC_CLAUDE_READY_R01.zip').read_bytes()
    require(sha(raw)==PRIMARY_SHA,'wrong reviewed primary archive')
    base=root/'prior_reviewed_R01'
    prefix='ACTION1_REVIEW_DELIVERY_R01/ACTION1_SEMANTIC_R01/'
    with zipfile.ZipFile(root/'originals/VPL_ACTION1_SEMANTIC_CLAUDE_READY_R01.zip') as z:
        names=[n for n in z.namelist() if n.startswith(prefix) and not n.endswith('/')]
        expected={n[len(prefix):] for n in names}
        actual={p.relative_to(base).as_posix() for p in base.rglob('*') if p.is_file()}
        require(expected==actual and len(expected)==35,'expanded reviewed input file set differs')
        for n in names:
            p=base/n[len(prefix):]
            require(not p.is_symlink() and p.read_bytes()==z.read(n),'expanded prior bytes differ: '+n)
    spec=importlib.util.spec_from_file_location('accepted_action1_r01',base/'source/verify_semantic_equivalence.py')
    module=importlib.util.module_from_spec(spec); spec.loader.exec_module(module)
    authority={n:(base/'input/v4_authority'/n).read_bytes() for n in module.AUTH_PINS}
    candidate=(base/'input/VPL_V5_R08_HF03_T01_R01.zip').read_bytes()
    rules=(base/'rules/INVARIANT_MAPPINGS_R01.json').read_bytes()
    receipt=module.evaluate(candidate,authority,rules)
    require(sha(module.canonical(receipt))==BASE_RECEIPT_SHA,'baseline mechanical receipt differs')
    require(receipt['resolved']==0 and receipt['unresolved']==328,'baseline was adjudicated')
    return module, module.read_archive(candidate), authority, load_json(rules), receipt

def read_new_inputs(root: Path):
    pins=load_json((root/'INPUT_BINDINGS_R03.json').read_bytes())
    require(set(pins)=={'OWNER_PERSISTENCE_AMENDMENT_R03.md','OWNER_DECISION_RECEIPT_R03.json','originals/EXACT_CLOSEOUT_CORRECTIONS_R02.json','originals/OWNER_PERSISTENCE_DECISION_DRAFT_R02.md','originals/CLAUDE_ACTION1_CONFIRMATION_REPORT_R01.md','originals/CLAUDE_ACTION1_CONFIRMATION_R01.zip','originals/VPL_ACTION1_SEMANTIC_CLAUDE_READY_R01.zip'},'unexpected input binding set')
    for name,pin in pins.items():
        p=root/name
        require(not p.is_symlink() and sha(p.read_bytes())==pin,'new input hash mismatch: '+name)
    amendment=(root/'OWNER_PERSISTENCE_AMENDMENT_R03.md').read_bytes()
    owner=load_json((root/'OWNER_DECISION_RECEIPT_R03.json').read_bytes())
    require(owner.get('status')=='ADOPTED_DESIGN_ONLY','owner decision not adopted')
    require(owner.get('owner_reply_verbatim')=='approve' and owner.get('approved_proposition_verbatim')==APPROVAL,'owner proposition differs')
    require(owner.get('amendment_sha256')==sha(amendment),'owner amendment binding differs')
    require(owner.get('draft_sha256')==sha((root/'originals/OWNER_PERSISTENCE_DECISION_DRAFT_R02.md').read_bytes()),'wrong approved draft')
    for k in ['semantic_model_approved','r2_m01_closed','runtime_current_certified','scores_changed','deployment_authorized']:
        require(owner.get(k) is False,'approval scope widened: '+k)
    patches=load_json((root/'originals/EXACT_CLOSEOUT_CORRECTIONS_R02.json').read_bytes())
    require(patches.get('candidate_git_tree')=='ddc0e4fd644b59a29d1bb7a7f647cb89f2556f4d','wrong patch baseline')
    return amendment,owner,patches

def apply_context(data, entries, amendment, patches):
    require(len(entries)==35 and len({e['path'] for e in entries})==35,'source coverage incomplete')
    effective={e['path']:data[e['path']] for e in entries}
    ps=patches['patches']
    require(len(ps)==2,'unexpected patch count')
    require([(p['file'],p['array'],p['row_id'],p['field']) for p in ps]==[
        (GL,'rules','VPL-GL-15','requirement'),
        (AGENT,'agents','VPL-A01','historical_rev006_design.contract_authority')], 'unexpected patch scope')
    for p in ps:
        obj=load_json(effective[p['file']]); target=row(obj,p['array'],p['row_id'])
        require(canonical(target)==canonical(p['expected_row']),'patch precondition differs: '+p['row_id'])
        if p['row_id']=='VPL-GL-15':
            expected=('The V4 REV006 VPL-GL-15 requirement is retained in full and remains mandatory. The following V5 contract is additive, not a replacement; none of its wording waives an inherited V4 safeguard.\n\n'+V4_GL+'\n\nAdditional V5 contract:\n'+target['requirement'])
            require(p['replacement']==expected,'GL15 staged replacement lost complete inheritance')
            target['requirement']=expected
        else:
            require(target['historical_rev006_design']['contract_authority']==p['old'],'old A01 citation differs')
            require(p['replacement']=='build_framework_V4.0 Final_Rev6.html#persistence','incorrect A01 correction')
            target['historical_rev006_design']['contract_authority']=p['replacement']
        effective[p['file']]=pretty(obj)
    effective[O1]=data[O1]+'\n\n---\n\n## Later owner amendment — September 28, 2026 / R03\n\n'.encode()+amendment
    return effective

def assemble_bundle(effective, entries):
    header=("# VPL V5 — effective closeout context R03 (source-bound addendum)\n\n"
            "Base: frozen HF03/T01, not overwritten or promoted. Published general authority remains V4 FINAL / REV006.\n\n"
            "For this versioned V5 design closeout only, the later owner decision appended to Source 4 (O1) replaces the A01/M26 mandatory-when-proven 15-minute producer with invocation-bound proof and optional cron. It preserves every V4 GL-15 safeguard; V5 GL-15 is additive. Only the named design choice is newly adopted; no blanket approval of all candidate overlays is inferred. The same named producer choice applies to its repeated statements; all other inherited triggers and safeguards remain intact.\n\n"
            "All 35 base sources are included in original order. Source 4 has the appended actual owner decision; Source 26 has the Rev6 provenance correction; Source 27 has full V4 GL-15 retention. All other source bytes are unchanged. The complete original context and its historical claims remain available in the frozen archive. This is not an installable/resealed 451-file candidate.\n\n"
            "On an unresolved conflict: STOP for source/owner resolution. No runtime CURRENT, semantic model approval, R2-M01 closure or score is certified. The remaining independent review must address this complete context and the three existing registry wrapper differences.\n").encode()
    out=header
    for i,e in enumerate(entries,1):
        path=e['path']; raw=effective[path]
        out+=(f'\n\n## Source {i}: {path}\n\nSHA-256: {sha(raw)}\n\n<!-- BEGIN PINNED SOURCE -->\n').encode()+raw+b'\n<!-- END PINNED SOURCE -->\n'
    return out

def compose(root: Path):
    module,data,authority,old_rules,base=load_baseline(root)
    amendment,owner,patches=read_new_inputs(root)
    entries=base['v5_source_inventory']
    effective=apply_context(data,entries,amendment,patches)
    blocks,_=module.source_blocks(authority[module.V4_NAME],load_json(authority['VPL_V4_EQUAL_LOAD_MANIFEST_REV006.json']))
    require(row(load_json(blocks['V4_LOCKED_GUIDELINES.json']),'rules','VPL-GL-15')['requirement']==V4_GL,'V4 complete GL15 differs')
    inv=[{'path':e['path'],'base_sha256':e['sha256'],'sha256':sha(effective[e['path']]),'size_bytes':len(effective[e['path']]),'changed':effective[e['path']]!=data[e['path']]} for e in entries]
    require({r['path'] for r in inv if r['changed']}=={O1,GL,AGENT},'unexpected effective source change')
    bundle=assemble_bundle(effective,entries)
    v4=authority[module.V4_NAME]; require(bundle.count(v4)==1,'V4 not uniquely inherited')
    offset=bundle[:bundle.index(v4)].count(b'\n')
    maps=copy.deepcopy(old_rules['span_mappings'])
    # Inspect actual mapping shape rather than synthesizing a new 328-row inventory.
    for item in maps:
        dest=item['destination_span']; src=item['source_span']
        dest['file']='EFFECTIVE_CONTEXT_BUNDLE_R03.md'
        dest['start_line']=src['start_line']+offset; dest['end_line']=src['end_line']+offset
        left=b''.join(v4.splitlines(keepends=True)[src['start_line']-1:src['end_line']])
        right=b''.join(bundle.splitlines(keepends=True)[dest['start_line']-1:dest['end_line']])
        require(left==right and sha(left)==src['span_sha256'],'effective destination span differs')
    revised=copy.deepcopy(old_rules)
    revised['kind']='ACTION1_SOURCE_BOUND_RULE_MODEL_WITH_OWNER_ADDENDUM_R03'
    revised['approval_status']='OWNER_DESIGN_ADOPTED_SEMANTIC_ADEQUACY_PENDING'
    revised['base_rule_sha256']=sha((root/'prior_reviewed_R01/rules/INVARIANT_MAPPINGS_R01.json').read_bytes())
    revised['span_mappings']=maps
    revised['v5_source_inventory']=[{k:v for k,v in e.items() if k in ('path','sha256','size_bytes')} for e in inv]
    revised['base_registry_comparison']=revised.pop('registry_comparison')
    revised['base_bounded_translation_checks']=revised.pop('bounded_translation_checks')
    combined={**data,**effective}
    revised['registry_comparison']=module.registry_comparison(blocks,combined)
    revised['effective_context_bundle_sha256']=sha(bundle)
    revised['owner_design_binding']={'record_sha256':sha((root/'OWNER_DECISION_RECEIPT_R03.json').read_bytes()),'amendment_sha256':sha(amendment),'owner_reply':'approve','scope':'A01/M26_DESIGN_AND_FULL_GL15_ADDITIVE_RETENTION_ONLY','independent_semantic_approval':False}
    revised['rule_id']='SOURCE_BOUND_VERBATIM_INHERITANCE_WITH_EXPLICIT_OVERLAY_REVIEW_R03'
    revised['rule_definition']['r03_precedence']='Apply only the explicitly adopted A01/M26 design change, retain GL15 completely and add V5 wording. Other inherited triggers remain; aggregate overlay adequacy still requires independent review.'
    gl=row(load_json(effective[GL]),'rules','VPL-GL-15')['requirement']
    revised['added_gl15_literal_checks']=[{'literal':c,'present_in_effective_GL15':c in gl,'proof':'literal retention, not behavioral entailment'} for c in CLAUSES]
    revised['complete_v4_gl15_retained']=V4_GL in gl
    revised['complete_old_v5_gl15_retained']=row(load_json(data[GL]),'rules','VPL-GL-15')['requirement'] in gl
    revised['o1_prior_bytes_preserved']=effective[O1].startswith(data[O1])
    rules_raw=pretty(revised)
    receipt={'kind':'ACTION1_OWNER_CLOSEOUT_MECHANICAL_RECEIPT_R03','result':'CORRECTIONS_APPLIED_SEMANTIC_ADEQUACY_PENDING','owner_design_decision':'ADOPTED','base_mechanical_receipt_sha256':sha(module.canonical(base)),'candidate_archive_sha256':module.CANDIDATE_SHA,'candidate_git_tree':module.CANDIDATE_TREE,'candidate_files':451,'frozen_candidate_unchanged':True,'effective_sources':35,'unchanged_effective_sources':32,'changed_effective_sources':[e for e in inv if e['changed']],'mechanically_verified_spans':328,'semantic_resolved':0,'semantic_unresolved':328,'r2_m01_closed':False,'independent_semantic_approval_supplied':False,'full_v4_gl15_retained':revised['complete_v4_gl15_retained'],'full_old_v5_gl15_retained':revised['complete_old_v5_gl15_retained'],'missing_gl15_literals_now_present':all(c in gl for c in CLAUSES),'a01_reference_corrected':row(load_json(effective[AGENT]),'agents','VPL-A01')['historical_rev006_design']['contract_authority'],'owner_amendment_sha256':sha(amendment),'effective_context_bundle_sha256':sha(bundle),'revised_rules_sha256':sha(rules_raw),'frozen_candidate_source_code_changed':False,'candidate_suite_executed':False,'old_verifier_test_suite_rerun':False,'actions3_4_rerun':False,'scores_changed':False,'deployments_performed':False,'execution_boundary':'New composition and literal-preservation checks plus accepted baseline source verification only; no semantic adjudication.'}
    outputs={'effective_context/'+n:b for n,b in effective.items()}
    outputs.update({'EFFECTIVE_CONTEXT_BUNDLE_R03.md':bundle,'SEMANTIC_RULES_R03.json':rules_raw,'EFFECTIVE_CONTEXT_INVENTORY_R03.json':pretty(inv),'OWNER_CLOSEOUT_MECHANICAL_RECEIPT_R03.json':pretty(receipt)})
    return outputs, receipt

def write_new(out:Path, outputs:dict):
    require(not out.exists(),'output directory exists; refusing overwrite')
    require(out.parent.is_dir(),'parent output directory missing')
    out.mkdir()
    for n,b in outputs.items():
        p=out/n;p.parent.mkdir(parents=True,exist_ok=True)
        with p.open('xb') as f:f.write(b)

def main():
    ap=argparse.ArgumentParser(description=__doc__);ap.add_argument('--root',type=Path,default=Path(__file__).resolve().parents[1]);ap.add_argument('--output',type=Path,required=True)
    a=ap.parse_args()
    try:
        require(not a.output.exists(),'output directory exists; refusing overwrite')
        out,r=compose(a.root.resolve());write_new(a.output,out)
        print(json.dumps({'result':r['result'],'sources':35,'changed_sources':3,'spans':328,'semantic_resolved':0,'semantic_unresolved':328,'files_written':len(out),'receipt_sha256':sha(out['OWNER_CLOSEOUT_MECHANICAL_RECEIPT_R03.json'])},sort_keys=True));return 0
    except (Rejected,ValueError,OSError,KeyError,TypeError,zipfile.BadZipFile) as e:
        print(json.dumps({'result':'REJECTED','error':str(e)},sort_keys=True),file=sys.stderr);return 2
if __name__=='__main__':sys.exit(main())
action1/verify_owner_closeout_R03_UNCHANGED.py

7,827 bytes · SHA-256 b60c542bc0927cec689d347f0f3fa6042953af85dfca4bebeb0970d2d3dbfe8f

Download exact source file

#!/usr/bin/env python3
"""Read-only verification of generated R03 files; does not import the composer."""
from __future__ import annotations
import argparse,copy,hashlib,io,json,sys,zipfile
from pathlib import Path

CANDIDATE='c3bd53d775752494d982183cc71b551af6b4bf2c879416d6866a859e64fd28ac'
V4='d4e75170b791b4458d60ea39f35fa165a81b89fce236c12f15f40af038a95d62'
GL='controls/VPL_V5_06_GUIDELINE_REGISTRY_R02.json'
AG='controls/VPL_V5_06_AGENT_REGISTRY_R02.json'
O1='O1_ADOPTED_AMENDMENTS.md'
def sha(b):return hashlib.sha256(b).hexdigest()
def must(v,s):
    if not v:raise ValueError(s)
def j(b):return json.loads(b)
def getrow(d,a,id):
    rows=[x for x in d[a] if x['id']==id];must(len(rows)==1,'row missing/duplicate');return rows[0]

def verify(root:Path,generated:Path):
    b=root/'prior_reviewed_R01';raw=(b/'input/VPL_V5_R08_HF03_T01_R01.zip').read_bytes()
    must(sha(raw)==CANDIDATE,'wrong frozen candidate')
    with zipfile.ZipFile(io.BytesIO(raw)) as z:
        d={i.filename.split('/',1)[1]:z.read(i) for i in z.infolist() if not i.is_dir()}
    must(len(d)==451,'candidate count differs')
    entries=j(d['SEMANTIC_INPUTS_R08.json'])['files'];must(len(entries)==35,'expected 35 source contexts')
    inv=j((generated/'EFFECTIVE_CONTEXT_INVENTORY_R03.json').read_bytes())
    must([x['path'] for x in inv]==[x['path'] for x in entries],'context source order differs')
    must({p.relative_to(generated/'effective_context').as_posix() for p in (generated/'effective_context').rglob('*') if p.is_file()}=={e['path'] for e in entries},'missing/extra effective file')
    owner=(root/'OWNER_PERSISTENCE_AMENDMENT_R03.md').read_bytes()
    decision=j((root/'OWNER_DECISION_RECEIPT_R03.json').read_bytes())
    must(decision['owner_reply_verbatim']=='approve' and decision['status']=='ADOPTED_DESIGN_ONLY','no owner design decision')
    must(decision['amendment_sha256']==sha(owner),'decision binding failed')
    v4=(b/'input/v4_authority/VPL_V4_SEMANTIC_LOAD_BUNDLE_REV006.md').read_bytes();must(sha(v4)==V4,'wrong V4 source')
    manifest=j((b/'input/v4_authority/VPL_V4_EQUAL_LOAD_MANIFEST_REV006.json').read_bytes())
    slot=next(x for x in manifest['canonical_sources'] if x['name']=='V4_LOCKED_GUIDELINES.json')
    start=v4.index(b'# BEGIN CANONICAL SOURCE: V4_LOCKED_GUIDELINES.json\n\n')+len(b'# BEGIN CANONICAL SOURCE: V4_LOCKED_GUIDELINES.json\n\n')
    guidelines=v4[start:start+slot['bytes']];must(sha(guidelines)==slot['sha256'],'V4 guideline block mismatch')
    v4req=getrow(j(guidelines),'rules','VPL-GL-15')['requirement']
    oldreq=getrow(j(d[GL]),'rules','VPL-GL-15')['requirement']
    fullreq=('The V4 REV006 VPL-GL-15 requirement is retained in full and remains mandatory. The following V5 contract is additive, not a replacement; none of its wording waives an inherited V4 safeguard.\n\n'+v4req+'\n\nAdditional V5 contract:\n'+oldreq)
    eff={};changed=[]
    for old,new in zip(entries,inv):
        n=old['path'];v=(generated/'effective_context'/n).read_bytes();eff[n]=v
        must(new['sha256']==sha(v) and new['size_bytes']==len(v) and new['base_sha256']==sha(d[n]),'inventory binding failed: '+n)
        actual_change=v!=d[n];must(new['changed']==actual_change,'false change classification')
        if actual_change:changed.append(n)
        if n==GL:
            expected=j(d[n]);getrow(expected,'rules','VPL-GL-15')['requirement']=fullreq
            must(j(v)==expected,'GL15 changed beyond exact additive correction')
        elif n==AG:
            expected=j(d[n]);getrow(expected,'agents','VPL-A01')['historical_rev006_design']['contract_authority']='build_framework_V4.0 Final_Rev6.html#persistence'
            must(j(v)==expected,'A01 changed beyond exact citation correction')
        elif n==O1:
            must(v==d[n]+'\n\n---\n\n## Later owner amendment — September 28, 2026 / R03\n\n'.encode()+owner,'O1 original not preserved with exact appended decision')
        else:must(v==d[n],'unrelated source changed: '+n)
    must(set(changed)=={GL,AG,O1},'unexpected changed set')
    bundle=(generated/'EFFECTIVE_CONTEXT_BUNDLE_R03.md').read_bytes()
    header=bundle.split(b'\n\n## Source 1: ',1)[0]
    must(b'Only the named design choice is newly adopted' in header and b'On an unresolved conflict: STOP' in header,'precedence limitation missing')
    reconstructed=header
    for i,e in enumerate(entries,1):
        n=e['path'];v=eff[n]
        reconstructed+=(f'\n\n## Source {i}: {n}\n\nSHA-256: {sha(v)}\n\n<!-- BEGIN PINNED SOURCE -->\n').encode()+v+b'\n<!-- END PINNED SOURCE -->\n'
    must(reconstructed==bundle,'effective context cannot be reconstructed')
    rules_raw=(generated/'SEMANTIC_RULES_R03.json').read_bytes();rules=j(rules_raw)
    base_rules=j((b/'rules/INVARIANT_MAPPINGS_R01.json').read_bytes())
    must(rules['approval_status']=='OWNER_DESIGN_ADOPTED_SEMANTIC_ADEQUACY_PENDING','false semantic approval')
    must(len(rules['span_mappings'])==328,'span inventory incomplete')
    vl=v4.splitlines(keepends=True);bl=bundle.splitlines(keepends=True)
    must(bundle.count(v4)==1,'V4 not unique in effective bundle')
    offset=bundle[:bundle.index(v4)].count(b'\n')
    for before,after in zip(base_rules['span_mappings'],rules['span_mappings']):
        old=copy.deepcopy(before);new=copy.deepcopy(after);a=old.pop('destination_span');s=new.pop('destination_span')
        must(old==new,'non-destination mapping data changed')
        src=after['source_span']
        must(s=={**a,'file':'EFFECTIVE_CONTEXT_BUNDLE_R03.md','start_line':src['start_line']+offset,'end_line':src['end_line']+offset},'bad updated range')
        x=b''.join(vl[src['start_line']-1:src['end_line']]);y=b''.join(bl[s['start_line']-1:s['end_line']])
        must(x==y and sha(x)==src['span_sha256'],'span not preserved')
    r=j((generated/'OWNER_CLOSEOUT_MECHANICAL_RECEIPT_R03.json').read_bytes())
    must(r['semantic_resolved']==0 and r['semantic_unresolved']==328 and r['r2_m01_closed'] is False,'unearned closure')
    must(r['effective_context_bundle_sha256']==sha(bundle) and r['revised_rules_sha256']==sha(rules_raw),'receipt source binding mismatch')
    must(rules['effective_context_bundle_sha256']==sha(bundle),'rules context binding mismatch')
    must(rules['owner_design_binding']['record_sha256']==sha((root/'OWNER_DECISION_RECEIPT_R03.json').read_bytes()),'rules owner binding mismatch')
    for literal in ['Treat model persistence as untrusted.','immediate behavioral test','selective retrieval is not evidence']:
        must(literal in fullreq,'retained invariant missing')
    return {'kind':'OWNER_CLOSEOUT_SAVED_DATA_CHECK_R03','result':'PASS_SAVED_DATA_ONLY','original_candidate_files':451,'complete_context_sources':35,'unchanged_sources':32,'changed_sources':changed,'source_spans':328,'full_V4_GL15_and_full_old_V5_GL15_preserved':True,'three_missing_clauses_retained':True,'owner_design_adopted':True,'semantic_approval':False,'semantic_resolved':0,'semantic_unresolved':328,'r2_m01_closed':False,'context_bundle_sha256':sha(bundle),'rules_sha256':sha(rules_raw),'composer_imported':False,'independent_review':False}

def main():
    p=argparse.ArgumentParser(description=__doc__);p.add_argument('--root',type=Path,default=Path(__file__).resolve().parents[1]);p.add_argument('--generated',type=Path,required=True);p.add_argument('--output',type=Path)
    a=p.parse_args()
    try:
        if a.output:must(not a.output.exists(),'refusing overwrite')
        result=verify(a.root,a.generated);raw=(json.dumps(result,sort_keys=True,indent=2)+'\n').encode()
        if a.output:
            with a.output.open('xb') as f:f.write(raw)
        print(raw.decode());return 0
    except (OSError,ValueError,KeyError,TypeError) as e:print(json.dumps({'result':'REJECTED','error':str(e)}));return 2
if __name__=='__main__':sys.exit(main())
action1/verify_semantic_equivalence_R01_UNCHANGED.py

31,585 bytes · SHA-256 442d271ee56dade4fe6c4f7e7a002363a0471b1b5bc20b583d9b16d927280547

Download exact source file

#!/usr/bin/env python3
"""Source-bound Action 1 verifier. No candidate imports, execution, or source writes.

A successful mechanical run does NOT assert semantic equivalence. Unless an
externally approved, hash-pinned model adjudication is supplied, exit 3 and keep
semantic statuses UNRESOLVED. Exit 2 is malformed/untrusted input. Exit 0 is only
bounded specification equivalence under that declared approval, never runtime.
"""
from __future__ import annotations
import argparse
import hashlib
import io
import json
import re
import stat
import sys
import zipfile
from pathlib import Path, PurePosixPath
from typing import Any

CANDIDATE_SHA = 'c3bd53d775752494d982183cc71b551af6b4bf2c879416d6866a859e64fd28ac'
CANDIDATE_TREE = 'ddc0e4fd644b59a29d1bb7a7f647cb89f2556f4d'
ROOT_NAME = 'VPL_V5_R08_HF03_T01_R01'
V4_NAME = 'VPL_V4_SEMANTIC_LOAD_BUNDLE_REV006.md'
V4_SHA = 'd4e75170b791b4458d60ea39f35fa165a81b89fce236c12f15f40af038a95d62'
V5_NAME = 'VPL_V5_SEMANTIC_LOAD_BUNDLE_R08.md'
MAP = 'controls/V4_PRESERVATION_MAP_HF02.json'
MATRIX = 'controls/MANUAL_LIGHT_PRESERVATION_MATRIX_R02.md'
AUTH_PINS = {
    V4_NAME: V4_SHA,
    'VPL_V4_EQUAL_LOAD_MANIFEST_REV006.json': '1e7ce7be27906b1f3251735a1f38c3c14b7d34e5ded7d4679938c5e68d242aea',
    'PERSISTENCE_CHALLENGE_MATRIX_REV006.json': 'f3e224d4c18a5aa6f2efe3708a9d62607660965d3db446078e7c02a3f10e7ae9',
    'REV006_SHA256SUMS.txt': 'ccf8bce20b37c6f6613abc4c855734332ea7f37edff6f3ced57e590b08e32c98',
}
REGISTRIES = (
    ('AGENT_REGISTRY.json', 'controls/VPL_V5_06_AGENT_REGISTRY_R02.json', 'agents'),
    ('V4_MODULE_REGISTRY_FINAL.json', 'controls/VPL_V5_06_MODULE_REGISTRY_R02.json', 'modules'),
    ('V4_LOCKED_GUIDELINES.json', 'controls/VPL_V5_06_GUIDELINE_REGISTRY_R02.json', 'rules'),
)
MODEL_RULE = 'SOURCE_BOUND_VERBATIM_INHERITANCE_WITH_EXPLICIT_OVERLAY_REVIEW_R01'

class InvalidInput(ValueError):
    pass

def require(condition: bool, message: str) -> None:
    if not condition:
        raise InvalidInput(message)

def sha(b: bytes) -> str:
    return hashlib.sha256(b).hexdigest()

def canonical(x: Any) -> bytes:
    return (json.dumps(x, sort_keys=True, ensure_ascii=False, allow_nan=False,
                       separators=(',', ':')) + '\n').encode('utf-8')

def load_json(b: bytes) -> Any:
    def pairs(items):
        out = {}
        for k, v in items:
            require(k not in out, 'duplicate JSON key: ' + k)
            out[k] = v
        return out
    def bad_constant(value):
        raise InvalidInput('non-finite JSON value: ' + value)
    try:
        return json.loads(b.decode('utf-8'), object_pairs_hook=pairs,
                          parse_constant=bad_constant)
    except (UnicodeError, json.JSONDecodeError) as e:
        raise InvalidInput('invalid UTF-8 JSON') from e

def same(a: Any, b: Any) -> bool:
    return canonical(a) == canonical(b)

def valid_path(name: str) -> str:
    p = PurePosixPath(name)
    require(bool(name) and not name.startswith('/') and '\\' not in name and
            ':' not in name and '\x00' not in name and all(x not in ('', '.', '..')
            for x in name.split('/')), 'unsafe path: ' + repr(name))
    require(p.as_posix() == name, 'noncanonical path')
    return name

def read_archive(raw: bytes) -> dict[str, bytes]:
    """In-memory reads only; reject duplicates, traversal and nonregular members."""
    require(len(raw) <= 25_000_000, 'archive exceeds bounded input size')
    try:
        with zipfile.ZipFile(io.BytesIO(raw)) as z:
            require(len(z.infolist()) <= 2000, 'too many archive members')
            seen, data, total = set(), {}, 0
            for item in z.infolist():
                name = item.filename.rstrip('/') if item.is_dir() else item.filename
                valid_path(name)
                require(item.filename not in seen, 'duplicate archive member')
                seen.add(item.filename)
                mode = item.external_attr >> 16
                require(not stat.S_ISLNK(mode), 'archive symlink forbidden')
                require(not mode or stat.S_IFMT(mode) in (0, stat.S_IFREG, stat.S_IFDIR),
                        'nonregular archive member')
                require(not (item.flag_bits & 1), 'encrypted archive forbidden')
                if item.is_dir():
                    continue
                require(name.startswith(ROOT_NAME + '/'), 'wrong candidate root')
                total += item.file_size
                require(total <= 75_000_000 and item.file_size <= 10_000_000,
                        'uncompressed size exceeds bound')
                rel = name[len(ROOT_NAME) + 1:]
                data[valid_path(rel)] = z.read(item)
            return data
    except (zipfile.BadZipFile, RuntimeError, EOFError) as e:
        raise InvalidInput('invalid candidate archive') from e

def git_tree(data: dict[str, bytes]) -> str:
    tree: dict[str, Any] = {}
    for name, b in data.items():
        parts = valid_path(name).split('/')
        here = tree
        for part in parts[:-1]:
            require(not isinstance(here.get(part), bytes), 'path/file collision')
            here = here.setdefault(part, {})
        require(parts[-1] not in here, 'duplicate tree leaf')
        here[parts[-1]] = b
    def obj(kind: str, b: bytes) -> bytes:
        return hashlib.sha1(kind.encode() + b' ' + str(len(b)).encode() + b'\0' + b).digest()
    def digest(node) -> bytes:
        out = b''
        for name in sorted(node, key=lambda n: (n + ('/' if isinstance(node[n], dict) else '')).encode()):
            v = node[name]
            out += (b'40000' if isinstance(v, dict) else b'100644') + b' ' + name.encode() + b'\0'
            out += digest(v) if isinstance(v, dict) else obj('blob', v)
        return obj('tree', out)
    return digest(tree).hex()

def source_blocks(v4: bytes, manifest: dict) -> tuple[dict[str, bytes], list[dict]]:
    """Recover exact original files from named byte-counted V4 transport blocks."""
    require(manifest.get('canonical_source_count') == 29, 'authority must bind 29 sources')
    require(manifest.get('semantic_bundle_sha256') == sha(v4), 'manifest/V4 hash mismatch')
    require(manifest.get('semantic_bundle_bytes') == len(v4), 'manifest/V4 length mismatch')
    declared = manifest.get('canonical_sources')
    require(isinstance(declared, list) and len(declared) == 29, 'incomplete canonical source list')
    blocks, observations = {}, []
    begins = re.findall(rb'^# BEGIN CANONICAL SOURCE: (.+)$', v4, re.M)
    require(len(begins) == 29 and len(set(begins)) == 29, 'missing/duplicate source blocks')
    require([x.decode() for x in begins] == [d['name'] for d in declared], 'source order differs')
    manifest_lines = re.findall(rb'^- `([^`]+)` \xe2\x80\x94 ([\d,]+) bytes \xe2\x80\x94 `([a-f0-9]{64})`$', v4, re.M)
    observed_manifest = [{'name': n.decode(), 'bytes': int(s.replace(b',', b'')),
                          'sha256': h.decode()} for n, s, h in manifest_lines]
    require(same(observed_manifest, declared), 'embedded and recovered manifest differ')
    for row in declared:
        name = valid_path(row['name'])
        require(name not in blocks and type(row['bytes']) is int and row['bytes'] > 0,
                'invalid canonical source row')
        marker = b'# BEGIN CANONICAL SOURCE: ' + name.encode() + b'\n\n'
        require(v4.count(marker) == 1, 'ambiguous canonical source marker')
        start = v4.index(marker) + len(marker)
        raw = v4[start:start + row['bytes']]
        endmarker = b'\n\n# END CANONICAL SOURCE: ' + name.encode() + b'\n'
        require(v4[start + len(raw):].startswith(endmarker), 'canonical source terminator differs')
        require(sha(raw) == row['sha256'], 'canonical source bytes differ: ' + name)
        blocks[name] = raw
        observations.append({**row, 'bundle_start_byte': start, 'hash_verified': True})
    return blocks, observations

def derive_spans(v4: bytes) -> list[dict]:
    """Re-derive the frozen inventory's heading spans, including its preambles.

The original inventory treats hash-prefixed headings inside fenced examples as
section boundaries. Preserve that exact scope; do not relabel these as 328 clauses.
"""
    lines = v4.decode('utf-8').splitlines(keepends=True)
    result, src, start, heading = [], None, None, None
    for pos, line in enumerate(lines):
        if line.startswith('# BEGIN CANONICAL SOURCE: '):
            require(src is None, 'nested canonical block')
            src, start, heading = line.strip().split(': ', 1)[1], pos + 1, 'SOURCE_PREAMBLE'
        elif src is not None and (line.startswith('# END CANONICAL SOURCE: ') or
                                   re.match(r'^#{1,6} ', line)):
            if any(x.strip() for x in lines[start:pos]):
                raw = ''.join(lines[start:pos]).encode()
                entry = {'source': src, 'heading': heading, 'start_line': start + 1,
                         'end_line': pos, 'span_sha256': sha(raw)}
                entry['span_id'] = 'S-' + sha(canonical(entry))[:24]
                result.append(entry)
            if line.startswith('# END CANONICAL SOURCE: '):
                require(line.strip().split(': ', 1)[1] == src, 'wrong source end marker')
                src, start, heading = None, None, None
            else:
                start, heading = pos, line.strip()
    require(src is None and len(result) == 328, 'expected complete 328-span inventory')
    require(len({r['span_id'] for r in result}) == 328, 'duplicate derived span identity')
    return result

def verify_source_map(mapping: dict, spans: list[dict], v4: bytes) -> None:
    require(mapping.get('source_sha256') == sha(v4), 'preservation map V4 pin differs')
    rows = mapping.get('source_sections')
    require(isinstance(rows, list) and len(rows) == 328, 'source map incomplete')
    keys = ('source', 'heading', 'start_line', 'end_line', 'span_sha256')
    for row, derived in zip(rows, spans):
        require(same({k: row.get(k) for k in keys}, {k: derived[k] for k in keys}),
                'map coverage/range/identity differs')
        require(row.get('destination') == V5_NAME and row.get('disposition') == 'RETAIN',
                'map destination/disposition differs')
    # semantic_equivalence/status/resolved metadata is deliberately NOT consulted.

def verify_v5_bundle(data: dict[str, bytes], v4: bytes) -> tuple[int, list[dict]]:
    idx = load_json(data['SEMANTIC_INPUTS_R08.json'])
    entries = idx.get('files')
    require(isinstance(entries, list) and len(entries) == 35, 'V5 input inventory incomplete')
    expected = ['frozen-source/' + V4_NAME, 'VPL_V5_EXECUTION_BIBLE_R10.md',
                'VPL_V5_REMEDIATION_BIBLE_R05.md', 'O1_ADOPTED_AMENDMENTS.md']
    expected += sorted(n for n in data if n.startswith('controls/') and n.count('/') == 1
                       and PurePosixPath(n).suffix in ('.json', '.md'))
    expected += ['templates/BUILD_RECAP_STRUCTURE_R02.html']
    require([e['path'] for e in entries] == expected, 'V5 source set/order differs')
    require(idx.get('no_selective_pruning') is True and idx.get('runtime_ingestion_certified') is False,
            'invalid semantic source scope')
    require(idx.get('module_ids') == [f'M{i:02}' for i in range(1, 27)], 'module scope differs')
    bundle = data[V5_NAME]
    first = b'\n\n## Source 1: '
    require(bundle.count(first) == 1, 'ambiguous first V5 source')
    header = bundle.split(first, 1)[0]
    require(b'Published authority remains V4 FINAL / REV006.' in header and
            b'On an unresolved conflict: STOP for source/owner resolution.' in header,
            'V5 authority/conflict boundary missing')
    rebuilt = header
    for i, e in enumerate(entries, 1):
        path = valid_path(e['path'])
        require(path in data and sha(data[path]) == e['sha256'] and len(data[path]) == e['size_bytes'],
                'V5 semantic entry hash/size differs: ' + path)
        rebuilt += (f'\n\n## Source {i}: {path}\n\nSHA-256: {e["sha256"]}\n\n'
                    '<!-- BEGIN PINNED SOURCE -->\n').encode() + data[path] + b'\n<!-- END PINNED SOURCE -->\n'
    require(rebuilt == bundle, 'V5 bundle cannot be reconstructed from complete source list')
    require(data['frozen-source/' + V4_NAME] == v4 and bundle.count(v4) == 1,
            'recovered V4 authority not uniquely verbatim in V5')
    return bundle[:bundle.index(v4)].count(b'\n'), entries

def field_diffs(old: dict, new: dict) -> list[dict]:
    """Keep missing and JSON null distinct, and preserve complete values."""
    return [{'field': k, 'source_present': k in old, 'destination_present': k in new,
             'source_value': old.get(k), 'destination_value': new.get(k)}
            for k in sorted(set(old) | set(new))
            if k not in old or k not in new or not same(old[k], new[k])]

def registry_comparison(blocks: dict, data: dict) -> dict:
    rows, wrappers = [], []
    for source, dest, array in REGISTRIES:
        a, b = load_json(blocks[source]), load_json(data[dest])
        def keyed(x):
            require(isinstance(x.get(array), list) and len(x[array]) > 0, 'missing registry rows')
            out = {}
            for r in x[array]:
                require(isinstance(r, dict) and isinstance(r.get('id'), str), 'invalid registry row')
                require(r['id'] not in out, 'duplicate registry ID')
                out[r['id']] = r
            return out
        aa, bb = keyed(a), keyed(b)
        require(set(aa) == set(bb), 'registry IDs added/removed without mapping')
        for rid in sorted(aa):
            diffs = field_diffs(aa[rid], bb[rid])
            rows.append({'id': rid, 'source_file': source, 'destination_file': dest,
                         'array': array, 'source_value': aa[rid], 'destination_value': bb[rid],
                         'source_payload_sha256': sha(canonical(aa[rid])),
                         'destination_payload_sha256': sha(canonical(bb[rid])),
                         'comparison': 'NONIDENTICAL_REQUIRES_RULE' if diffs else 'IDENTICAL_ROW_VALUE',
                         'field_differences': diffs})
        wrappers.append({'source_file': source, 'destination_file': dest,
                         'field_differences': field_diffs({k: v for k, v in a.items() if k != array},
                                                        {k: v for k, v in b.items() if k != array}),
                         'interpretation': 'V4 wrapper remains inherited; V5 wrapper is not an identical replacement. Model approval required.'})
    return {'rows': rows, 'wrapper_context_differences': wrappers,
            'total_registry_rows': len(rows),
            'identical_row_values': sum(r['comparison'] == 'IDENTICAL_ROW_VALUE' for r in rows),
            'changed_row_values': sum(r['comparison'] != 'IDENTICAL_ROW_VALUE' for r in rows)}

def bounded_translation_checks(reg: dict, data: dict) -> dict:
    """Execute explicit PROPOSED source-to-destination predicate mappings.

    These predicates are not approved semantic rules merely because they pass.
    M01/M25 are exact transformations, not similarity tests. Persistence pairs
    make the human interpretation assumption visible with exact source anchors.
    Scheduler replacement is reported as a change, never an identity proof.
    """
    by_id = {r['id']: r for r in reg['rows']}
    checks = []
    m01 = by_id['M01']
    old, new = m01['source_value']['contract'], m01['destination_value']['contract']
    a = 'REV 006 retains'
    b = 'V4 FINAL / REV006 authority also requires'
    suffix = ' Candidate mutable position is read only from VPL_V5_CURRENT_STATE.json.'
    checks.append({'id': 'TR-M01', 'operator': 'EXACT_NAMED_SUBSTITUTION_AND_APPEND',
                   'source_id': 'M01', 'source_phrase': a, 'destination_phrase': b,
                   'append': suffix, 'predicate_pass': old.count(a) == 1 and new == old.replace(a,b) + suffix,
                   'semantic_adjudication': 'REQUIRED_NOT_INFERRED'})
    m25 = by_id['M25']
    suffix = ' A trigger while this module remains proposed must return UNCERTAIN_ESCALATE and STOP; owner activation is separate.'
    checks.append({'id': 'TR-M25', 'operator': 'EXACT_APPEND_WITH_ORIGINAL_CONTRACT_UNCHANGED',
                   'source_id': 'M25', 'append': suffix,
                   'predicate_pass': m25['destination_value']['contract'] == m25['source_value']['contract'] + suffix,
                   'semantic_adjudication': 'REQUIRED_NOT_INFERRED'})
    current = data['controls/PERSISTENCE_STATE_R02.md'].decode('utf-8')
    pairs = [
        ('M26', 'contract', 'Load all canonical V4 module semantics equally', 'loaded the full equal-priority semantic set', 'equal-priority full load'),
        ('M26', 'contract', 'balanced anti-parroting challenge plus behavioral proof', 'required balanced behavioral challenge', 'balanced challenge'),
        ('M26', 'contract', 'save complete receipt', 'banked a matching durable receipt with readback', 'durable source-bound receipt'),
        ('VPL-GL-15', 'requirement', 'Load every canonical V4 operating control with equal persistence priority', 'loaded the full equal-priority semantic set', 'equal-priority full load'),
        ('VPL-GL-15', 'requirement', 'balanced challenge coverage and immediate behavioral test', 'required balanced behavioral challenge', 'balanced challenge plus action-bound contract'),
        ('VPL-GL-15', 'requirement', 'Self-report, recap or selective retrieval is not evidence', 'a verbal recap, or a contract-test PASS alone cannot establish CURRENT', 'recap/test PASS insufficient'),
    ]
    for i, (rid, field, left, right, concept) in enumerate(pairs, 1):
        checks.append({'id': f'PR-{i:02}', 'operator': 'PROPOSED_LITERAL_ANCHORED_PROPOSITION_PAIR',
                       'concept': concept, 'source_id': rid, 'source_field': field,
                       'source_anchor': left, 'destination_file': 'controls/PERSISTENCE_STATE_R02.md',
                       'destination_anchor': right,
                       'predicate_pass': left in by_id[rid]['source_value'][field] and right in current,
                       'semantic_adjudication': 'PAIR_MEANING_REQUIRES_APPROVAL; matching anchors is not a general entailment proof'})
    a01, m26 = by_id['VPL-A01'], by_id['M26']
    scheduler_change = (a01['source_value'].get('schedule') != a01['destination_value'].get('schedule'))
    module_change = ('Hostinger 15-minute full-bundle producer' in m26['source_value']['contract'] and
                     'optional freshness/watchdog producer' in m26['destination_value']['contract'])
    return {'checks': checks, 'predicates_passed': sum(x['predicate_pass'] for x in checks),
            'predicates_total': len(checks),
            'cron_policy_difference_detected': scheduler_change and module_change,
            'cron_policy_classification': 'NONIDENTICAL_DESIGN_REQUIRES_EXPLICIT_OWNER_DISPOSITION',
            'rule_status': 'PROPOSED_FOR_SEMANTIC_ADJUDICATION_NOT_SELF_APPROVED'}


def verify_rules(rules: dict, spans: list[dict], offset: int, reg: dict,
                 matrix: bytes, entries: list[dict]) -> list[dict]:
    require(isinstance(rules, dict), 'rule model must be an object')
    require(rules.get('kind') == 'ACTION1_SOURCE_BOUND_RULE_MODEL_R01' and
            rules.get('rule_id') == MODEL_RULE, 'unknown rule model')
    require(rules.get('proof_scope') == 'BOUNDED_SPECIFICATION_MODEL_NOT_RUNTIME', 'scope overclaim')
    require(rules.get('v4_sha256') == V4_SHA and rules.get('candidate_sha256') == CANDIDATE_SHA,
            'rule source binding differs')
    require(rules.get('matrix_sha256') == sha(matrix), 'rule matrix binding differs')
    require(same(rules.get('v5_source_inventory'), entries), 'rule overlay inventory differs')
    require(same(rules.get('registry_comparison'), reg), 'rule registry values/context differ')
    maps = rules.get('span_mappings')
    require(isinstance(maps, list) and len(maps) == len(spans), 'rule mappings incomplete')
    out = []
    for expected, row in zip(spans, maps):
        require(isinstance(row, dict), 'span mapping must be an object')
        require(same(row.get('source_span'), expected), 'mapping source span altered or reordered')
        require(row.get('operator') == 'EXACT_SPAN_IN_COMPLETE_SOURCE_CONTEXT', 'unknown span operator')
        destination = {'file': V5_NAME, 'start_line': expected['start_line'] + offset,
                       'end_line': expected['end_line'] + offset, 'span_sha256': expected['span_sha256']}
        require(same(row.get('destination_span'), destination), 'mapping destination wrong')
        require(row.get('manual') == 'LOAD_ALL_PRESERVE_SOURCE_DEFINED_TRIGGERS' and
                row.get('light') == 'LOAD_ALL_PRESERVE_SOURCE_DEFINED_TRIGGERS', 'route/activation assumption changed')
        require(row.get('approval_requirement') == 'EXTERNAL_MODEL_ADJUDICATION', 'missing approval boundary')
        out.append({'span_id': expected['span_id'], 'source': expected,
                    'destination': destination, 'operator': row['operator'],
                    'manual': row['manual'], 'light': row['light'],
                    'mechanical_result': 'PASS_VERBATIM_SPECIFICATION_MAPPING',
                    'semantic_status': 'UNRESOLVED',
                    'reason': 'Exact-span/context predicate passes; this does not approve the inheritance/overlay semantic model.'})
    return out

def check_adjudication(raw: bytes | None, trusted_sha: str | None, rules_sha: str,
                       reg: dict) -> tuple[bool, dict]:
    """External trust input, not a signature, reviewer identity, or self-approval.

A future operator must supply BOTH an approval record and its independently
trusted SHA. This wave supplies no such record. Synthetic fixtures are tests only.
"""
    if raw is None:
        require(trusted_sha is None, 'approval hash without record')
        return False, {'state': 'NOT_SUPPLIED', 'identity_attested': False}
    require(trusted_sha is not None and bool(re.fullmatch('[0-9a-f]{64}', trusted_sha)) and
            sha(raw) == trusted_sha, 'untrusted approval record')
    a = load_json(raw)
    require(isinstance(a, dict), 'approval must be an object')
    require(a.get('kind') == 'ACTION1_EXTERNAL_SPECIFICATION_MODEL_ADJUDICATION_R01', 'wrong approval kind')
    require(a.get('rules_sha256') == rules_sha and a.get('candidate_sha256') == CANDIDATE_SHA and
            a.get('v4_sha256') == V4_SHA, 'approval binds different source/model')
    require(a.get('decision') == 'APPROVE_BOUNDED_SPECIFICATION_MODEL' and
            a.get('rule_id') == MODEL_RULE, 'no explicit semantic model approval')
    require(a.get('all_328_span_mappings_reviewed') is True and
            a.get('all_35_source_overlay_effects_reviewed') is True and
            a.get('wrapper_context_differences_reviewed') is True, 'incomplete interpretation review')
    for key in ('owner_decision_reference', 'independent_review_reference'):
        require(isinstance(a.get(key), str) and bool(a[key].strip()), 'missing approval provenance')
    ids = sorted(r['id'] for r in reg['rows'] if r['field_differences'])
    require(a.get('approved_changed_registry_ids') == ids, 'changed registry decisions incomplete')
    return True, {'state': 'SUPPLIED_HASH_PINNED_DECLARATION', 'sha256': sha(raw),
                  'owner_decision_reference': a['owner_decision_reference'],
                  'independent_review_reference': a['independent_review_reference'],
                  'identity_attested': False,
                  'trust_boundary': 'Supplied trusted hash and documentary declarations; authenticity/semantic judgment are external, not proved by this program.'}

def evaluate(candidate: bytes, authority: dict[str, bytes], rules_raw: bytes,
             adjudication: bytes | None = None, adjudication_sha: str | None = None) -> dict:
    require(sha(candidate) == CANDIDATE_SHA, 'candidate archive pin mismatch')
    data = read_archive(candidate)
    require(len(data) == 451 and git_tree(data) == CANDIDATE_TREE, 'candidate count/tree differs')
    for name, pin in AUTH_PINS.items():
        require(name in authority and sha(authority[name]) == pin, 'recovered authority pin mismatch: ' + name)
    v4 = authority[V4_NAME]
    manifest = load_json(authority['VPL_V4_EQUAL_LOAD_MANIFEST_REV006.json'])
    challenge = load_json(authority['PERSISTENCE_CHALLENGE_MATRIX_REV006.json'])
    sums = {line.split('  ', 1)[1]: line.split('  ', 1)[0]
            for line in authority['REV006_SHA256SUMS.txt'].decode().splitlines()}
    for name in (V4_NAME, 'VPL_V4_EQUAL_LOAD_MANIFEST_REV006.json', 'PERSISTENCE_CHALLENGE_MATRIX_REV006.json'):
        require(sums.get(name) == sha(authority[name]), 'recovered file fails original checksum record')
    blocks, block_proofs = source_blocks(v4, manifest)
    spans = derive_spans(v4)
    mapping = load_json(data[MAP])
    verify_source_map(mapping, spans, v4)
    offset, entries = verify_v5_bundle(data, v4)
    matrix = data[MATRIX]
    require(mapping.get('matrix_sha256') == sha(matrix), 'matrix/map hash mismatch')
    base_ids = re.findall(rb'^\| ((?:P|M|L|C)\d{2}) \|', matrix, re.M)
    h_ids = re.findall(rb'^\| (H\d{2}) \|', matrix, re.M)
    require(len(base_ids) == len(set(base_ids)) == 41 and h_ids == [f'H{i:02}'.encode() for i in range(1,8)], 'matrix rows missing/duplicated')
    reg = registry_comparison(blocks, data)
    rules = load_json(rules_raw)
    results = verify_rules(rules, spans, offset, reg, matrix, entries)
    translation = bounded_translation_checks(reg, data)
    require(same(rules.get('bounded_translation_checks'), translation), 'translation predicate mapping differs')
    require(translation['predicates_passed'] == translation['predicates_total'], 'bounded translation predicate failed')
    v4_lines = v4.splitlines(keepends=True)
    v5_lines = data[V5_NAME].splitlines(keepends=True)
    for result in results:
        a, b = result['source'], result['destination']
        aa = b''.join(v4_lines[a['start_line']-1:a['end_line']])
        bb = b''.join(v5_lines[b['start_line']-1:b['end_line']])
        require(aa == bb and sha(aa) == a['span_sha256'], 'actual mapped span differs')
    # Evaluate authoritative machine-readable persistence predicates, without
    # pretending a schema/challenge definition is an executed behavioral proof.
    require(manifest.get('no_priority_weighting') is True, 'equal-priority invariant missing')
    require(challenge.get('mutation_requirement') == 'PERSISTENCE_STATE=CURRENT', 'mutation invariant missing')
    require(challenge.get('proofs') == ['semantic_completeness', 'cross_reference_understanding',
                                      'false_premise_rejection', 'behavioral_follow_through'], 'proof requirement differs')
    approved, approval = check_adjudication(adjudication, adjudication_sha, sha(rules_raw), reg)
    if approved:
        for result in results:
            result['semantic_status'] = 'EQUIVALENT_UNDER_EXTERNALLY_APPROVED_BOUNDED_MODEL'
            result['reason'] = 'Derived exact-span/context predicate passed under the hash-pinned external model adjudication; no runtime claim.'
    missing = [name for name in ('VPL_V4_EQUAL_LOAD_MANIFEST_REV006.json', 'PERSISTENCE_CHALLENGE_MATRIX_REV006.json')
               if not any(PurePosixPath(p).name == name for p in data)]
    return {'kind': 'SEMANTIC_EQUIVALENCE_RECEIPT_R08_ACTION1_R01',
            'result': 'PASS_UNDER_EXTERNALLY_APPROVED_BOUNDED_MODEL' if approved else 'MECHANICAL_PASS_SEMANTIC_APPROVAL_PENDING',
            'exit_code': 0 if approved else 3,
            'total_spans': len(results), 'mechanically_verified_spans': len(results),
            'resolved': len(results) if approved else 0,
            'unresolved': 0 if approved else len(results),
            'r2_m01_closed': False, 'closure_note': 'Independent coordinator/owner closure is external; this tool never promotes the finding.',
            'proof_scope': 'BOUNDED_SPECIFICATION_MODEL_NOT_RUNTIME',
            'verifier_sha256': sha(Path(__file__).read_bytes()),
            'source_binding': {'candidate_archive_sha256': sha(candidate), 'candidate_git_tree': git_tree(data),
                               'candidate_files': len(data), 'v4_bundle_sha256': sha(v4),
                               'v5_bundle_sha256': sha(data[V5_NAME]), 'matrix_sha256': sha(matrix),
                               'rule_model_sha256': sha(rules_raw)},
            'source_blocks': block_proofs, 'v5_source_inventory': entries,
            'matrix_base_rows_verified': 41, 'matrix_h_rows_verified': 7,
            'registry_comparison': reg, 'bounded_translation_checks': translation, 'external_model_adjudication': approval,
            'recovered_authority_files': [{'file': n, 'sha256': sha(authority[n]),
                                          'original_checksum_matches': True} for n in AUTH_PINS if n != 'REV006_SHA256SUMS.txt'],
            'supplemented_original_candidate_omissions': missing,
            'supplement_note': 'Recovered V4 authority accompanies the sidecar; missing originals were NOT inserted into or backdated into frozen candidate.',
            'persistence_definition_checks': {'equal_priority': True, 'complete_29_sources': True,
                                            'balanced_four_proofs_required': True, 'runtime_proofs_executed': False},
            'results': results,
            'zero_manual_decisions_during_execution': True,
            'rule_authorship_and_semantic_adjudication_are_not_automated': True,
            'arbitrary_natural_language_conflicts_exhaustively_detected': False,
            'runtime_or_model_persistence_certified': False, 'candidate_code_executed': False,
            'source_written': False, 'score_change_established': False}

def main(argv=None) -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--candidate', type=Path, required=True)
    parser.add_argument('--v4-authority', type=Path, required=True)
    parser.add_argument('--rules', type=Path, required=True)
    parser.add_argument('--output', type=Path, required=True)
    parser.add_argument('--adjudication', type=Path)
    parser.add_argument('--adjudication-sha256')
    args = parser.parse_args(argv)
    try:
        require(not args.output.exists(), 'refusing to overwrite existing output')
        require(args.output.parent.is_dir(), 'output directory must already exist')
        authority = {n: (args.v4_authority/n).read_bytes() for n in AUTH_PINS}
        receipt = evaluate(args.candidate.read_bytes(), authority, args.rules.read_bytes(),
                           args.adjudication.read_bytes() if args.adjudication else None,
                           args.adjudication_sha256)
        with args.output.open('xb') as f:
            f.write(canonical(receipt))
        print(json.dumps({'result': receipt['result'], 'total_spans': receipt['total_spans'],
                          'mechanically_verified_spans': receipt['mechanically_verified_spans'],
                          'resolved': receipt['resolved'], 'unresolved': receipt['unresolved'],
                          'receipt_sha256': sha(args.output.read_bytes())}, sort_keys=True))
        return receipt['exit_code']
    except (InvalidInput, OSError, KeyError, TypeError, IndexError) as e:
        print(json.dumps({'result': 'INPUT_REJECTED', 'error': str(e)}, sort_keys=True), file=sys.stderr)
        return 2

if __name__ == '__main__':
    sys.exit(main())
action3/check_t01_resume.py

14,677 bytes · SHA-256 92d436e1ebb17411186d764d81d6883daa35e455264b6096553641c39d45b861

Download exact source file

#!/usr/bin/env python3
"""Bounded T01 confirmation harness; only disposable output directories are written.
Uses real source preflight and runner execution, never journal-supplied executable code.
ACTION3 R01 integrates a test-only source-frame stall for --timeout-only. The fault
uses a real subprocess timeout; normal execution and final resume are uninjected.
No production/runtime certification or semantic-equivalence proof is implied.
"""
from __future__ import annotations
import argparse,copy,hashlib,importlib.util,json,math,os,runpy,shutil,subprocess,sys,time,types
sys.dont_write_bytecode = True
from pathlib import Path
from datetime import datetime,timezone

def sha(p):return hashlib.sha256(Path(p).read_bytes()).hexdigest()
def write(p,d):Path(p).write_text(json.dumps(d,indent=2)+'\n')

# ACTION3 R01: test-only fault injection, never a candidate-source patch.
# The real selected source frame is held before its first statement. The parent
# waits for that handshake before starting a real subprocess timeout. Startup
# speed and the runtime of unrelated commands therefore cannot select the fault.

def positive_seconds(value):
 value=float(value)
 if not math.isfinite(value) or value <= 0:
  raise argparse.ArgumentTypeError('timing must be finite and positive')
 return value

def nonnegative_seconds(value):
 value=float(value)
 if not math.isfinite(value) or value < 0:
  raise argparse.ArgumentTypeError('delay must be finite and nonnegative')
 return value

def wait_for_source_frame(proc,ready,target,limit):
 deadline=time.monotonic()+limit
 while not ready.exists():
  code=proc.poll()
  if code is not None:
   raise RuntimeError('fault child exited before source-frame handshake: '+str(code))
  if time.monotonic() >= deadline:
   raise RuntimeError('source-frame handshake deadline exceeded; NOT a verified timeout')
  time.sleep(0.01)
 event=json.loads(ready.read_text())
 if (event.get('kind')!='ACTION3_SOURCE_FRAME_STALL' or
     event.get('pid')!=proc.pid or event.get('target')!=str(target) or
     event.get('target_sha256')!=sha(target)):
  raise RuntimeError('invalid source-frame handshake')
 return event

def run_with_source_stall(command,ready,timeout_seconds,ready_seconds,startup_delay,**kwargs):
 """Run actual source through a test-only entry-frame gate; raise real timeout."""
 if not isinstance(command,list) or len(command)<3 or command[1]!='-B':
  raise ValueError('unexpected source command shape')
 target=Path(command[2]).resolve()
 if ready.exists():
  raise ValueError('refusing existing fault evidence')
 gated=[sys.executable,'-B',str(Path(__file__).resolve()),'--action3-gated-child',
        str(ready),str(startup_delay),str(target),*command[3:]]
 kwargs.pop('timeout',None)  # Start fault budget ONLY after the handshake.
 proc=subprocess.Popen(gated,**kwargs)
 try:
  wait_for_source_frame(proc,ready,target,ready_seconds)
  # This is the real subprocess wait, not a fabricated exception or exit code.
  code=proc.wait(timeout=timeout_seconds)
  return subprocess.CompletedProcess(command,code)
 finally:
  if proc.poll() is None:
   proc.kill()
  proc.wait()

def gated_child(argv):
 ready=Path(argv[0]);delay=nonnegative_seconds(argv[1]);target=Path(argv[2]).resolve()
 if ready.exists():
  raise ValueError('ready path already exists')
 time.sleep(delay)  # Optional explicit slow-start regression fixture.
 sys.argv=[str(target),*argv[3:]];sys.path.insert(0,str(target.parent))
 def at_source(frame,event,arg):
  if event=='call' and frame.f_code.co_filename==str(target):
   body={'kind':'ACTION3_SOURCE_FRAME_STALL','pid':os.getpid(),
         'target':str(target),'target_sha256':sha(target),
         'phase':'before_first_statement','test_only':True}
   temp=ready.with_suffix('.pending');write(temp,body);temp.replace(ready)
   print('ACTION3 TEST-ONLY STALL: '+str(target),flush=True)
   while True:time.sleep(3600)  # Parent kills this process on its bounded timeout.
  return at_source
 sys.settrace(at_source)
 try:runpy.run_path(str(target),run_name='__main__')
 finally:sys.settrace(None)
 raise RuntimeError('target frame was never intercepted')

def subprocess_proxy(run):
 return types.SimpleNamespace(**dict(vars(subprocess),run=run))

def fault_runner(argv):
 script=Path(argv[0]).resolve();index=int(argv[1]);ready=Path(argv[2]).resolve()
 budget=positive_seconds(argv[3]);startup=positive_seconds(argv[4]);delay=nonnegative_seconds(argv[5])
 sys.path.insert(0,str(script.parent))
 spec=importlib.util.spec_from_file_location('action3_frozen_runner',script)
 module=importlib.util.module_from_spec(spec);spec.loader.exec_module(module)
 plan=module.command_plan()
 if not 1<=index<=len(plan):raise ValueError('fault index outside actual plan')
 target_name=plan[index-1][0]
 if sum(name==target_name for name,_ in plan)!=1:raise ValueError('ambiguous fault target')
 injected=[]
 def controlled_run(command,**kwargs):
  if len(command)>=3 and Path(command[2]).name==target_name:
   if injected:raise RuntimeError('duplicate injection attempt')
   injected.append(target_name)
   return run_with_source_stall(command,ready,budget,startup,delay,**kwargs)
  return subprocess.run(command,**kwargs)
 # Change only this imported runner's subprocess binding for this fault run.
 # Do not patch the global subprocess module, source files, plan, hashes or receipts.
 module.subprocess=subprocess_proxy(controlled_run)
 sys.argv=[str(script),*argv[6:]]
 code=module.main()
 if not injected:raise RuntimeError('requested fault was not reached')
 return code

def validate_timeout_checkpoint(seed,journal,failure,index):
 """Derived state checks: no completed work may be credited to a failed attempt."""
 checks=[
  (failure.get('result')=='FAIL','missing failed reproduction receipt'),
  (journal.get('commands')==seed.get('commands'),'verified checkpoint advanced or changed'),
  (len(journal.get('attempts',[]))==len(seed.get('attempts',[]))+1,'unexpected attempt count'),
  (journal.get('state')=='FAILED_OR_INCOMPLETE','journal not marked failed/incomplete'),
 ]
 for passed,reason in checks:
  if not passed:raise AssertionError(reason)
 attempt=journal['attempts'][-1]
 if (attempt.get('index')!=index or attempt.get('exit_code')!=124 or
     attempt.get('state')!='FAILED_OR_INCOMPLETE'):
  raise AssertionError('requested command did not record a genuine incomplete timeout')
 return attempt

def main():
 if sys.flags.optimize:raise RuntimeError('Run without -O / PYTHONOPTIMIZE; assertions must be enabled')
 p=argparse.ArgumentParser(description=__doc__);p.add_argument('--candidate',type=Path,required=True);p.add_argument('--archive',type=Path,required=True);p.add_argument('--out',type=Path,required=True);p.add_argument('--actor',required=True);p.add_argument('--session',required=True);p.add_argument('--timeout-only',action='store_true');p.add_argument('--fault-at',type=int,default=3);p.add_argument('--fault-timeout',type=positive_seconds,default=0.2);p.add_argument('--fault-ready-timeout',type=positive_seconds,default=30.0);p.add_argument('--fault-startup-delay',type=nonnegative_seconds,default=0.0);p.add_argument('--runner-timeout',type=positive_seconds,default=600.0);a=p.parse_args()
 if not 2<=a.fault_at<=12:p.error('--fault-at must be between 2 and 12')
 C=a.candidate.resolve();A=a.archive.resolve();O=a.out.resolve()
 if O.exists():raise ValueError('Output must be new; preserve previous evidence')
 if O==C or O.is_relative_to(C) or C.is_relative_to(O):raise ValueError('Source/output must be disjoint')
 O.mkdir(parents=True);results=[];run=O/'legitimate'
 initial={q.relative_to(C).as_posix():sha(q) for q in C.rglob('*') if q.is_file()}
 script=C/'runner/verify_review_packet.py'
 def invoke(label,out,extra=(),actor=None,archive=None,expected=0,fault=False):
  log=O/(label+'.log');cmd=[sys.executable,'-B',str(script),'--actor',actor or a.actor,'--session',a.session,'--out',str(out),'--predecessor-archive',str(archive or A),*extra]
  if fault:
   cmd=[sys.executable,'-B',str(Path(__file__).resolve()),'--action3-fault-runner',str(script),str(a.fault_at),str(O/'FAULT_READY.json'),str(a.fault_timeout),str(a.fault_ready_timeout),str(a.fault_startup_delay),*cmd[3:]]
  start=time.monotonic()
  with log.open('wb') as f:r=subprocess.run(cmd,stdout=f,stderr=subprocess.STDOUT,timeout=a.runner_timeout)
  record={'id':label,'exit_code':r.returncode,'expected_exit_code':expected,'pass':r.returncode==expected,'log':log.name,'log_sha256':sha(log),'seconds':round(time.monotonic()-start,3)}
  results.append(record);write(O/'CHECKS.json',results);print(json.dumps(record),flush=True)
  if not record['pass']:raise AssertionError(label+' returned unexpected exit code')
  return log
 if a.timeout_only:
  checkpoint=a.fault_at-1
  invoke('pause_after_'+str(checkpoint),run,['--stop-after',str(checkpoint)],expected=75)
  seed=json.loads((run/'COMMAND_PROGRESS.json').read_text())
  assert len(seed['commands'])==checkpoint
  invoke('forced_timeout',run,['--resume'],expected=1,fault=True)
  failure_path=run/'REVIEWER_REPRODUCTION_RECEIPT.json'
  failure=json.loads(failure_path.read_text())
  journal=json.loads((run/'COMMAND_PROGRESS.json').read_text())
  # A failed attempt must not advance the verified checkpoint or invent a PASS.
  failed_attempt=validate_timeout_checkpoint(seed,journal,failure,a.fault_at)
  ready=json.loads((O/'FAULT_READY.json').read_text())
  target=Path(ready['target']);assert target.name==seed['plan'][a.fault_at-1][0]
  assert ready['target_sha256']==sha(C/'runner'/target.name)
  failure_bytes=failure_path.read_bytes();failure_hash=sha(failure_path)
  invoke('resume_after_timeout',run,['--resume'],expected=0)
  receipt=json.loads(failure_path.read_text())
  assert (run/'receipt_history'/f'{failure_hash}.json').read_bytes()==failure_bytes
  journal=json.loads((run/'COMMAND_PROGRESS.json').read_text())
  assert journal['commands'][:checkpoint]==seed['commands']
  assert failed_attempt in journal['attempts']
  assert len(journal['attempts'])==len(seed['plan'])+1
  assert [row['index'] for row in journal['commands']]==list(range(1,len(seed['plan'])+1))
  assert receipt['resumptions'][-1]['completed_commands_restored']==checkpoint
  results.append({'id':'failed_attempt_and_receipt_preserved','pass':True,
                  'failed_receipt_sha256':failure_hash,'fault_at_command':a.fault_at,
                  'completed_commands_restored':checkpoint,
                  'fault_mode':'test-only source-frame stall; real subprocess timeout',
                  'fault_timeout_seconds':a.fault_timeout,
                  'startup_handshake_timeout_seconds':a.fault_ready_timeout,
                  'configured_startup_delay_seconds':a.fault_startup_delay,
                  'fault_ready_sha256':sha(O/'FAULT_READY.json'),
                  'resume_mode':'unmodified real runner; no injection'})
 else:
  invoke('pause_after_9',run,['--stop-after','9'],expected=75)
  seed=json.loads((run/'COMMAND_PROGRESS.json').read_text());assert len(seed['commands'])==9
  # These are not copies of a real user edit. They intentionally forge journals in disposable fixtures.
  for kind in ('replace','add','delete'):
   dest=O/('tampered_'+kind);shutil.copytree(run,dest)
   journal=copy.deepcopy(seed);target='runner/t01_added_fixture.py' if kind=='add' else 'runner/test_hf03.py'
   if kind=='delete':delta={'path':target,'deleted':True}
   else:
    artifact=dest/'forged_fixture.py';artifact.write_text("raise RuntimeError('T01 FORGED FIXTURE MUST NOT EXECUTE')\n")
    delta={'path':target,'artifact':artifact.name,'sha256':sha(artifact)}
   journal['commands'][-1]['delta'].append(delta);write(dest/'COMMAND_PROGRESS.json',journal)
   before=len(journal['attempts']);log=invoke('reject_'+kind,dest,['--resume'],expected=2)
   assert 'delta outside writable evidence scope: '+target in log.read_text()
   after=json.loads((dest/'COMMAND_PROGRESS.json').read_text());assert len(after['attempts'])==before
   results.append({'id':kind+'_rejected_before_next_execution','pass':True,'target':target})
  wrong=O/'wrong_actor';shutil.copytree(run,wrong);invoke('wrong_actor',wrong,['--resume'],actor=a.actor+'-OTHER',expected=2)
  wrong=O/'wrong_archive';shutil.copytree(run,wrong);bad=O/'incorrect_archive.zip';bad.write_bytes(b'wrong-archive-fixture');invoke('wrong_archive',wrong,['--resume'],archive=bad,expected=2)
  # Valid restart must discard an unrecorded mutation, then execute only remaining commands.
  (run/'isolated-candidate/runner/unrecorded_interruption.py').write_text('# abandoned scratch mutation\n')
  invoke('legitimate_resume',run,['--resume'],expected=0)
  assert not (run/'isolated-candidate/runner/unrecorded_interruption.py').exists()
  receipt=json.loads((run/'REVIEWER_REPRODUCTION_RECEIPT.json').read_text());journal=json.loads((run/'COMMAND_PROGRESS.json').read_text())
  assert [x['index'] for x in journal['commands']]==list(range(1,13)) and len(journal['attempts'])==12
  assert receipt['resumptions'][-1]['completed_commands_restored']==9
  results.append({'id':'exactly_remaining_commands_executed','pass':True,'restored':9,'executed_after_resume':[10,11,12]})
 assert receipt['result']=='PASS' and receipt['recounted_tests']['failed']==receipt['recounted_tests']['not_run']==0
 exact=[]
 for row in receipt['result_comparisons']:
  output=run/'reports'/Path(row['path']).name
  equal=output.read_bytes()==(C/row['path']).read_bytes();assert equal
  exact.append({'path':row['path'],'sha256':sha(output),'byte_identical':equal,'recounted':row['recounted']})
 final={q.relative_to(C).as_posix():sha(q) for q in C.rglob('*') if q.is_file()};assert initial==final
 write(O/'CHECKS.json',results)
 report={'kind':'T01_FORCED_INTERRUPTION_CONFIRMATION' if a.timeout_only else 'T01_REAL_RUNNER_RESUME_CONFIRMATION','result':'PASS','actor':a.actor,'session':a.session,'at_utc':datetime.now(timezone.utc).isoformat(),'source_files':len(initial),'source_unchanged':True,'state_sha256':sha(C/'VPL_V5_CURRENT_STATE.json'),'reproduction_receipt_sha256':sha(run/'REVIEWER_REPRODUCTION_RECEIPT.json'),'commands':len(receipt['commands']),'recounted':receipt['recounted_tests'],'reports':exact,'checks':results,'boundary':'Executing actor evidence only. Not independent reviewer acceptance, authenticated identity, provider or production certification.'}
 write(O/'SUMMARY.json',report);print(json.dumps({'result':report['result'],'recounted':report['recounted'],'reports':len(exact)}),flush=True)
if __name__=='__main__':
 if len(sys.argv)>1 and sys.argv[1]=='--action3-gated-child':gated_child(sys.argv[2:])
 elif len(sys.argv)>1 and sys.argv[1]=='--action3-fault-runner':sys.exit(fault_runner(sys.argv[2:]))
 else:main()
action3/check_t01_resume.py.diff

14,311 bytes · SHA-256 effd3dc40d78da47455f65daee188d4c0c45d752f7f8cbc2a08a79db7e33c304

Download exact source file

--- frozen-handoff/check_t01_resume.py
+++ ACTION3_TIMEOUT_R01/source/check_t01_resume.py
@@ -1,40 +1,190 @@
 #!/usr/bin/env python3
 """Bounded T01 confirmation harness; only disposable output directories are written.
 Uses real source preflight and runner execution, never journal-supplied executable code.
+ACTION3 R01 integrates a test-only source-frame stall for --timeout-only. The fault
+uses a real subprocess timeout; normal execution and final resume are uninjected.
+No production/runtime certification or semantic-equivalence proof is implied.
 """
 from __future__ import annotations
-import argparse,copy,hashlib,json,os,shutil,subprocess,sys,time
+import argparse,copy,hashlib,importlib.util,json,math,os,runpy,shutil,subprocess,sys,time,types
+sys.dont_write_bytecode = True
 from pathlib import Path
 from datetime import datetime,timezone
 
 def sha(p):return hashlib.sha256(Path(p).read_bytes()).hexdigest()
 def write(p,d):Path(p).write_text(json.dumps(d,indent=2)+'\n')
+
+# ACTION3 R01: test-only fault injection, never a candidate-source patch.
+# The real selected source frame is held before its first statement. The parent
+# waits for that handshake before starting a real subprocess timeout. Startup
+# speed and the runtime of unrelated commands therefore cannot select the fault.
+
+def positive_seconds(value):
+ value=float(value)
+ if not math.isfinite(value) or value <= 0:
+  raise argparse.ArgumentTypeError('timing must be finite and positive')
+ return value
+
+def nonnegative_seconds(value):
+ value=float(value)
+ if not math.isfinite(value) or value < 0:
+  raise argparse.ArgumentTypeError('delay must be finite and nonnegative')
+ return value
+
+def wait_for_source_frame(proc,ready,target,limit):
+ deadline=time.monotonic()+limit
+ while not ready.exists():
+  code=proc.poll()
+  if code is not None:
+   raise RuntimeError('fault child exited before source-frame handshake: '+str(code))
+  if time.monotonic() >= deadline:
+   raise RuntimeError('source-frame handshake deadline exceeded; NOT a verified timeout')
+  time.sleep(0.01)
+ event=json.loads(ready.read_text())
+ if (event.get('kind')!='ACTION3_SOURCE_FRAME_STALL' or
+     event.get('pid')!=proc.pid or event.get('target')!=str(target) or
+     event.get('target_sha256')!=sha(target)):
+  raise RuntimeError('invalid source-frame handshake')
+ return event
+
+def run_with_source_stall(command,ready,timeout_seconds,ready_seconds,startup_delay,**kwargs):
+ """Run actual source through a test-only entry-frame gate; raise real timeout."""
+ if not isinstance(command,list) or len(command)<3 or command[1]!='-B':
+  raise ValueError('unexpected source command shape')
+ target=Path(command[2]).resolve()
+ if ready.exists():
+  raise ValueError('refusing existing fault evidence')
+ gated=[sys.executable,'-B',str(Path(__file__).resolve()),'--action3-gated-child',
+        str(ready),str(startup_delay),str(target),*command[3:]]
+ kwargs.pop('timeout',None)  # Start fault budget ONLY after the handshake.
+ proc=subprocess.Popen(gated,**kwargs)
+ try:
+  wait_for_source_frame(proc,ready,target,ready_seconds)
+  # This is the real subprocess wait, not a fabricated exception or exit code.
+  code=proc.wait(timeout=timeout_seconds)
+  return subprocess.CompletedProcess(command,code)
+ finally:
+  if proc.poll() is None:
+   proc.kill()
+  proc.wait()
+
+def gated_child(argv):
+ ready=Path(argv[0]);delay=nonnegative_seconds(argv[1]);target=Path(argv[2]).resolve()
+ if ready.exists():
+  raise ValueError('ready path already exists')
+ time.sleep(delay)  # Optional explicit slow-start regression fixture.
+ sys.argv=[str(target),*argv[3:]];sys.path.insert(0,str(target.parent))
+ def at_source(frame,event,arg):
+  if event=='call' and frame.f_code.co_filename==str(target):
+   body={'kind':'ACTION3_SOURCE_FRAME_STALL','pid':os.getpid(),
+         'target':str(target),'target_sha256':sha(target),
+         'phase':'before_first_statement','test_only':True}
+   temp=ready.with_suffix('.pending');write(temp,body);temp.replace(ready)
+   print('ACTION3 TEST-ONLY STALL: '+str(target),flush=True)
+   while True:time.sleep(3600)  # Parent kills this process on its bounded timeout.
+  return at_source
+ sys.settrace(at_source)
+ try:runpy.run_path(str(target),run_name='__main__')
+ finally:sys.settrace(None)
+ raise RuntimeError('target frame was never intercepted')
+
+def subprocess_proxy(run):
+ return types.SimpleNamespace(**dict(vars(subprocess),run=run))
+
+def fault_runner(argv):
+ script=Path(argv[0]).resolve();index=int(argv[1]);ready=Path(argv[2]).resolve()
+ budget=positive_seconds(argv[3]);startup=positive_seconds(argv[4]);delay=nonnegative_seconds(argv[5])
+ sys.path.insert(0,str(script.parent))
+ spec=importlib.util.spec_from_file_location('action3_frozen_runner',script)
+ module=importlib.util.module_from_spec(spec);spec.loader.exec_module(module)
+ plan=module.command_plan()
+ if not 1<=index<=len(plan):raise ValueError('fault index outside actual plan')
+ target_name=plan[index-1][0]
+ if sum(name==target_name for name,_ in plan)!=1:raise ValueError('ambiguous fault target')
+ injected=[]
+ def controlled_run(command,**kwargs):
+  if len(command)>=3 and Path(command[2]).name==target_name:
+   if injected:raise RuntimeError('duplicate injection attempt')
+   injected.append(target_name)
+   return run_with_source_stall(command,ready,budget,startup,delay,**kwargs)
+  return subprocess.run(command,**kwargs)
+ # Change only this imported runner's subprocess binding for this fault run.
+ # Do not patch the global subprocess module, source files, plan, hashes or receipts.
+ module.subprocess=subprocess_proxy(controlled_run)
+ sys.argv=[str(script),*argv[6:]]
+ code=module.main()
+ if not injected:raise RuntimeError('requested fault was not reached')
+ return code
+
+def validate_timeout_checkpoint(seed,journal,failure,index):
+ """Derived state checks: no completed work may be credited to a failed attempt."""
+ checks=[
+  (failure.get('result')=='FAIL','missing failed reproduction receipt'),
+  (journal.get('commands')==seed.get('commands'),'verified checkpoint advanced or changed'),
+  (len(journal.get('attempts',[]))==len(seed.get('attempts',[]))+1,'unexpected attempt count'),
+  (journal.get('state')=='FAILED_OR_INCOMPLETE','journal not marked failed/incomplete'),
+ ]
+ for passed,reason in checks:
+  if not passed:raise AssertionError(reason)
+ attempt=journal['attempts'][-1]
+ if (attempt.get('index')!=index or attempt.get('exit_code')!=124 or
+     attempt.get('state')!='FAILED_OR_INCOMPLETE'):
+  raise AssertionError('requested command did not record a genuine incomplete timeout')
+ return attempt
+
 def main():
- p=argparse.ArgumentParser(description=__doc__);p.add_argument('--candidate',type=Path,required=True);p.add_argument('--archive',type=Path,required=True);p.add_argument('--out',type=Path,required=True);p.add_argument('--actor',required=True);p.add_argument('--session',required=True);p.add_argument('--timeout-only',action='store_true');a=p.parse_args()
+ if sys.flags.optimize:raise RuntimeError('Run without -O / PYTHONOPTIMIZE; assertions must be enabled')
+ p=argparse.ArgumentParser(description=__doc__);p.add_argument('--candidate',type=Path,required=True);p.add_argument('--archive',type=Path,required=True);p.add_argument('--out',type=Path,required=True);p.add_argument('--actor',required=True);p.add_argument('--session',required=True);p.add_argument('--timeout-only',action='store_true');p.add_argument('--fault-at',type=int,default=3);p.add_argument('--fault-timeout',type=positive_seconds,default=0.2);p.add_argument('--fault-ready-timeout',type=positive_seconds,default=30.0);p.add_argument('--fault-startup-delay',type=nonnegative_seconds,default=0.0);p.add_argument('--runner-timeout',type=positive_seconds,default=600.0);a=p.parse_args()
+ if not 2<=a.fault_at<=12:p.error('--fault-at must be between 2 and 12')
  C=a.candidate.resolve();A=a.archive.resolve();O=a.out.resolve()
  if O.exists():raise ValueError('Output must be new; preserve previous evidence')
  if O==C or O.is_relative_to(C) or C.is_relative_to(O):raise ValueError('Source/output must be disjoint')
  O.mkdir(parents=True);results=[];run=O/'legitimate'
  initial={q.relative_to(C).as_posix():sha(q) for q in C.rglob('*') if q.is_file()}
  script=C/'runner/verify_review_packet.py'
- def invoke(label,out,extra=(),actor=None,archive=None,expected=0):
-  log=O/(label+'.log');cmd=[sys.executable,'-B',str(script),'--actor',actor or a.actor,'--session',a.session,'--out',str(out),'--predecessor-archive',str(archive or A),*extra];start=time.time()
-  with log.open('wb') as f:r=subprocess.run(cmd,stdout=f,stderr=subprocess.STDOUT,timeout=600)
-  record={'id':label,'exit_code':r.returncode,'expected_exit_code':expected,'pass':r.returncode==expected,'log':log.name,'log_sha256':sha(log),'seconds':round(time.time()-start,3)}
+ def invoke(label,out,extra=(),actor=None,archive=None,expected=0,fault=False):
+  log=O/(label+'.log');cmd=[sys.executable,'-B',str(script),'--actor',actor or a.actor,'--session',a.session,'--out',str(out),'--predecessor-archive',str(archive or A),*extra]
+  if fault:
+   cmd=[sys.executable,'-B',str(Path(__file__).resolve()),'--action3-fault-runner',str(script),str(a.fault_at),str(O/'FAULT_READY.json'),str(a.fault_timeout),str(a.fault_ready_timeout),str(a.fault_startup_delay),*cmd[3:]]
+  start=time.monotonic()
+  with log.open('wb') as f:r=subprocess.run(cmd,stdout=f,stderr=subprocess.STDOUT,timeout=a.runner_timeout)
+  record={'id':label,'exit_code':r.returncode,'expected_exit_code':expected,'pass':r.returncode==expected,'log':log.name,'log_sha256':sha(log),'seconds':round(time.monotonic()-start,3)}
   results.append(record);write(O/'CHECKS.json',results);print(json.dumps(record),flush=True)
   if not record['pass']:raise AssertionError(label+' returned unexpected exit code')
   return log
  if a.timeout_only:
-  invoke('pause_after_2',run,['--stop-after','2'],expected=75)
-  invoke('forced_timeout',run,['--resume','--command-timeout','1'],expected=1)
-  failure=json.loads((run/'REVIEWER_REPRODUCTION_RECEIPT.json').read_text());assert failure['result']=='FAIL'
-  journal=json.loads((run/'COMMAND_PROGRESS.json').read_text());assert len(journal['commands'])==2 and journal['attempts'][-1]['exit_code']==124
-  failure_hash=sha(run/'REVIEWER_REPRODUCTION_RECEIPT.json')
+  checkpoint=a.fault_at-1
+  invoke('pause_after_'+str(checkpoint),run,['--stop-after',str(checkpoint)],expected=75)
+  seed=json.loads((run/'COMMAND_PROGRESS.json').read_text())
+  assert len(seed['commands'])==checkpoint
+  invoke('forced_timeout',run,['--resume'],expected=1,fault=True)
+  failure_path=run/'REVIEWER_REPRODUCTION_RECEIPT.json'
+  failure=json.loads(failure_path.read_text())
+  journal=json.loads((run/'COMMAND_PROGRESS.json').read_text())
+  # A failed attempt must not advance the verified checkpoint or invent a PASS.
+  failed_attempt=validate_timeout_checkpoint(seed,journal,failure,a.fault_at)
+  ready=json.loads((O/'FAULT_READY.json').read_text())
+  target=Path(ready['target']);assert target.name==seed['plan'][a.fault_at-1][0]
+  assert ready['target_sha256']==sha(C/'runner'/target.name)
+  failure_bytes=failure_path.read_bytes();failure_hash=sha(failure_path)
   invoke('resume_after_timeout',run,['--resume'],expected=0)
-  receipt=json.loads((run/'REVIEWER_REPRODUCTION_RECEIPT.json').read_text())
-  assert (run/'receipt_history'/f'{failure_hash}.json').is_file()
-  journal=json.loads((run/'COMMAND_PROGRESS.json').read_text());assert any(x.get('exit_code')==124 for x in journal['attempts'])
-  results.append({'id':'failed_attempt_and_receipt_preserved','pass':True,'failed_receipt_sha256':failure_hash,'completed_commands_restored':receipt['resumptions'][-1]['completed_commands_restored']})
+  receipt=json.loads(failure_path.read_text())
+  assert (run/'receipt_history'/f'{failure_hash}.json').read_bytes()==failure_bytes
+  journal=json.loads((run/'COMMAND_PROGRESS.json').read_text())
+  assert journal['commands'][:checkpoint]==seed['commands']
+  assert failed_attempt in journal['attempts']
+  assert len(journal['attempts'])==len(seed['plan'])+1
+  assert [row['index'] for row in journal['commands']]==list(range(1,len(seed['plan'])+1))
+  assert receipt['resumptions'][-1]['completed_commands_restored']==checkpoint
+  results.append({'id':'failed_attempt_and_receipt_preserved','pass':True,
+                  'failed_receipt_sha256':failure_hash,'fault_at_command':a.fault_at,
+                  'completed_commands_restored':checkpoint,
+                  'fault_mode':'test-only source-frame stall; real subprocess timeout',
+                  'fault_timeout_seconds':a.fault_timeout,
+                  'startup_handshake_timeout_seconds':a.fault_ready_timeout,
+                  'configured_startup_delay_seconds':a.fault_startup_delay,
+                  'fault_ready_sha256':sha(O/'FAULT_READY.json'),
+                  'resume_mode':'unmodified real runner; no injection'})
  else:
   invoke('pause_after_9',run,['--stop-after','9'],expected=75)
   seed=json.loads((run/'COMMAND_PROGRESS.json').read_text());assert len(seed['commands'])==9
@@ -71,4 +221,7 @@
  write(O/'CHECKS.json',results)
  report={'kind':'T01_FORCED_INTERRUPTION_CONFIRMATION' if a.timeout_only else 'T01_REAL_RUNNER_RESUME_CONFIRMATION','result':'PASS','actor':a.actor,'session':a.session,'at_utc':datetime.now(timezone.utc).isoformat(),'source_files':len(initial),'source_unchanged':True,'state_sha256':sha(C/'VPL_V5_CURRENT_STATE.json'),'reproduction_receipt_sha256':sha(run/'REVIEWER_REPRODUCTION_RECEIPT.json'),'commands':len(receipt['commands']),'recounted':receipt['recounted_tests'],'reports':exact,'checks':results,'boundary':'Executing actor evidence only. Not independent reviewer acceptance, authenticated identity, provider or production certification.'}
  write(O/'SUMMARY.json',report);print(json.dumps({'result':report['result'],'recounted':report['recounted'],'reports':len(exact)}),flush=True)
-if __name__=='__main__':main()
+if __name__=='__main__':
+ if len(sys.argv)>1 and sys.argv[1]=='--action3-gated-child':gated_child(sys.argv[2:])
+ elif len(sys.argv)>1 and sys.argv[1]=='--action3-fault-runner':sys.exit(fault_runner(sys.argv[2:]))
+ else:main()
action4/dedup_ledger.py

16,536 bytes · SHA-256 8fd6fbe4d62dae365051ecabbabcfafc03508a93ec584d47bf790bb7d5fcec3f

Download exact source file

#!/usr/bin/env python3
"""Deterministic, preservation-first pre-ingestion gate for the VPL R05 intake.

Standard-library only. No model, network, scoring, semantic matching or source edits.
Exact payload equality is NOT proof of shared authorship or independent execution.
Original IDs/rows/provenance remain in every emitted ledger. Nothing is deleted.
"""
from __future__ import annotations
import argparse
import copy
import hashlib
import json
import re
import sys
from collections import defaultdict
from pathlib import Path
from typing import Any

POLICY_ID = 'ACTION4_EXACT_PAYLOAD_PREINGEST_R01'
SLOTS = frozenset({'CLAUDE', 'GEMINI', 'GROK', 'DEEPSEEK', 'GLM', 'KIMI'})
COLLECTIONS = {
    'new_findings': 'NEW_FINDING',
    'prior_finding_dispositions': 'PRIOR_DISPOSITION',
    'prior_dispositions': 'PRIOR_DISPOSITION',
    'prior_n_rows': 'PRIOR_DISPOSITION',
    'independently_confirmed_peer_limitations': 'PEER_CONFIRMATION',
}
CATEGORIES = ('NEW_FINDING', 'PRIOR_DISPOSITION', 'PEER_CONFIRMATION')
# For NEW findings only, the identifier is excluded from grouping. Prior/peer
# reference identities remain part of the group key. In particular: retain
# severity, disposition, evidence, location, stage, all prose and list ordering.
ID_FIELDS = frozenset({'id', 'finding_id'})

class AdmissionError(ValueError):
    """Malformed/ambiguous input must not create a publishable derived ledger."""


def require(condition: bool, message: str) -> None:
    if not condition:
        raise AdmissionError(message)


def canonical(value: Any) -> bytes:
    """This project's JSON serialization, not a claim of universal JSON canonicalization."""
    try:
        return json.dumps(value, sort_keys=True, ensure_ascii=False,
                          separators=(',', ':'), allow_nan=False).encode('utf-8')
    except (TypeError, ValueError, UnicodeError) as exc:
        raise AdmissionError(f'NON_CANONICAL_JSON: {exc}') from exc


def sha(data: bytes) -> str:
    return hashlib.sha256(data).hexdigest()


def strict_json(data: bytes) -> Any:
    def pairs(items):
        result = {}
        for key, val in items:
            require(key not in result, f'DUPLICATE_JSON_KEY: {key}')
            result[key] = val
        return result
    def bad_constant(value):
        raise AdmissionError(f'NON_FINITE_JSON: {value}')
    try:
        return json.loads(data.decode('utf-8'), object_pairs_hook=pairs,
                          parse_constant=bad_constant)
    except (UnicodeError, json.JSONDecodeError) as exc:
        raise AdmissionError(f'INVALID_JSON: {exc}') from exc


def nonblank(value: Any, field: str) -> str:
    require(isinstance(value, str) and bool(value.strip()), f'INVALID_{field}')
    return value


def row_id(row: dict) -> str:
    present = [row[k] for k in ID_FIELDS if k in row]
    require(bool(present), 'MISSING_FINDING_ID')
    for value in present:
        nonblank(value, 'FINDING_ID')
    require(len(set(present)) == 1, 'CONFLICTING_ID_ALIASES')
    return present[0]


def source_context(intake: dict) -> dict:
    source = intake.get('source')
    require(isinstance(source, dict), 'MISSING_SOURCE_CONTEXT')
    repo = nonblank(source.get('repository'), 'REPOSITORY')
    commit = source.get('commit')
    require(isinstance(commit, str) and re.fullmatch('[0-9a-f]{40}', commit) is not None,
            'INVALID_SOURCE_COMMIT')
    return {'repository': repo, 'commit': commit}


def collect_rows(intake: dict) -> tuple[list[dict], list[dict], dict]:
    require(isinstance(intake, dict), 'INTAKE_NOT_OBJECT')
    require(intake.get('kind') == 'V5_FRESH_R03_CONSOLIDATED_INTAKE', 'WRONG_INTAKE_KIND')
    require(isinstance(intake.get('reviewer_records'), dict), 'MISSING_REVIEWER_RECORDS')
    require(set(intake['reviewer_records']) == SLOTS, 'REVIEWER_COVERAGE_MISMATCH')
    context = source_context(intake)
    raw_records, coverage = [], []
    for slot in sorted(SLOTS):
        record = intake['reviewer_records'][slot]
        require(isinstance(record, dict), f'INVALID_REVIEWER_RECORD: {slot}')
        require('submitted_ledger' in record, f'MISSING_LEDGER_FIELD: {slot}')
        ledger = record['submitted_ledger']
        if ledger is None:
            reason = nonblank(record.get('ledger_availability'), 'MISSING_LEDGER_REASON')
            coverage.append({'slot': slot, 'ledger_state': 'NOT_AVAILABLE',
                             'reason': reason, 'rows': None, 'not_a_clean_review': True})
            continue
        require(isinstance(ledger, dict), f'INVALID_LEDGER: {slot}')
        require(ledger.get('reviewer_slot') == slot, f'REVIEWER_NAMESPACE_MISMATCH: {slot}')
        require('new_findings' in ledger, f'MISSING_NEW_FINDINGS: {slot}')
        target = ledger.get('target')
        if target is not None:
            require(isinstance(target, dict), f'INVALID_TARGET: {slot}')
            if 'source_commit' in target:
                require(target['source_commit'] == context['commit'], f'MIXED_SOURCE_COMMIT: {slot}')
            if 'repository' in target:
                require(target['repository'] == context['repository'], f'MIXED_REPOSITORY: {slot}')
        # Reject unrecognized finding/disposition row arrays, rather than ignore them.
        for name, value in ledger.items():
            if isinstance(value, list) and any(t in name.lower() for t in ('finding', 'disposition')):
                require(name in COLLECTIONS, f'UNSUPPORTED_ROW_COLLECTION: {slot}/{name}')
        counts, seen_identity = defaultdict(int), {}
        for collection, category in COLLECTIONS.items():
            if collection not in ledger:
                continue
            array = ledger[collection]
            require(isinstance(array, list), f'INVALID_ARRAY: {slot}/{collection}')
            for index, row in enumerate(array):
                require(isinstance(row, dict), f'INVALID_ROW: {slot}/{collection}/{index}')
                identifier = row_id(row)
                payload = {k: v for k, v in row.items() if k not in ID_FIELDS}
                require(bool(payload), f'EMPTY_FINDING_PAYLOAD: {slot}/{identifier}')
                if category == 'NEW_FINDING':
                    require(any(isinstance(row.get(k), str) and row[k].strip() for k in ('title', 'finding', 'description')),
                            f'MISSING_FINDING_CLAIM: {slot}/{identifier}')
                payload_bytes = canonical(payload)
                identity = (category, identifier)
                if identity in seen_identity:
                    require(seen_identity[identity] == payload_bytes,
                            f'CONFLICTING_ID_WITHIN_REVIEWER: {slot}/{identifier}')
                seen_identity[identity] = payload_bytes
                pointer = f'/reviewer_records/{slot}/submitted_ledger/{collection}/{index}'
                raw_records.append({
                    'occurrence_ref': pointer, 'slot': slot, 'category': category,
                    'collection': collection, 'original_id': identifier,
                    'original_row': copy.deepcopy(row),
                    'original_row_canonical_sha256': sha(canonical(row)),
                    'payload_sha256': sha(payload_bytes),
                    'source_context': context.copy(),
                    'provenance': {
                        'round': record.get('round'),
                        'source_review_commit': record.get('source_review_commit'),
                        'stage1_commit': record.get('stage1_commit'),
                        'declared_session': ledger.get('session', ledger.get('audit_run_id')),
                        'remote_ledger_sha256_as_recorded': record.get('ledger_sha256', record.get('ledger_git_sha256')),
                        'embedded_ledger_canonical_sha256': sha(canonical(ledger)),
                        'assurance': 'BOUND_TO_INPUT_SNAPSHOT_NOT_NEW_PROVIDER_ATTESTATION',
                    },
                })
                counts[category] += 1
        coverage.append({'slot': slot, 'ledger_state': 'PRESENT',
                         'rows': sum(counts.values()), 'by_category': dict(sorted(counts.items())),
                         'intake_status_as_recorded': record.get('intake_status')})
    require(bool(raw_records), 'NO_ROWS_TO_INGEST')
    return raw_records, coverage, context


def deduplicate_before_ingestion(raw_records: list[dict]) -> tuple[list[dict], list[dict]]:
    """Group before counting. Compare actual bytes as well as their digest.

    Never merge by title/topic, reviewer name, source ID alone, supplied duplicate
    flags, or inferred meaning. A different evidence reference changes the payload.
    """
    buckets = defaultdict(list)
    for item in raw_records:
        payload = {k: v for k, v in item['original_row'].items() if k not in ID_FIELDS}
        # A generic 'OPEN' disposition on N01 is not the disposition on N02.
        # Ignore ID only for substantive NEW_FINDING payload copies, never for
        # references/dispositions about an identified pre-existing finding.
        key = canonical({'category': item['category'], 'source': item['source_context'],
                         'referenced_id': None if item['category'] == 'NEW_FINDING' else item['original_id'],
                         'payload': payload})
        buckets[key].append(item)
    groups, crosswalk = [], []
    for key in sorted(buckets):
        members = sorted(buckets[key], key=lambda x: x['occurrence_ref'])
        group_id = 'A4-' + sha(key)
        # Representative is a storage choice, explicitly not a human authorship claim.
        rep = members[0]
        ids = sorted({x['original_id'] for x in members})
        group = {
            'group_id': group_id, 'category': rep['category'],
            'payload_sha256': rep['payload_sha256'],
            'payload': {k: v for k, v in rep['original_row'].items() if k not in ID_FIELDS},
            'representative_ref': rep['occurrence_ref'],
            'representative_is_not_authorship_claim': True,
            'occurrences': [x['occurrence_ref'] for x in members],
            'source_ids': ids, 'reviewer_slots': sorted({x['slot'] for x in members}),
            'duplicate_occurrences_excluded_from_new_content_count': len(members) - 1,
            'additional_independent_votes_from_repetition': 0,
            'independent_reproduction_status': 'NOT_ESTABLISHED_BY_DEDUPLICATION',
            'content_admission_only': True,
        }
        groups.append(group)
        for i, row in enumerate(members):
            crosswalk.append({
                'occurrence_ref': row['occurrence_ref'], 'slot': row['slot'],
                'original_id': row['original_id'], 'category': row['category'],
                'group_id': group_id,
                'content_count_contribution': 1 if i == 0 else 0,
                'classification': 'REPRESENTATIVE_CONTENT' if i == 0 else 'EXACT_PAYLOAD_REPEAT',
                'duplicate_additional_independent_vote_credit': 0,
                'raw_record_retained': True,
            })
    return sorted(groups, key=lambda x: x['group_id']), sorted(crosswalk, key=lambda x: x['occurrence_ref'])


def build_ledger(intake: dict, input_sha256: str) -> dict:
    require(isinstance(input_sha256, str) and re.fullmatch('[0-9a-f]{64}', input_sha256) is not None,
            'INVALID_INPUT_HASH')
    # Validate the entire preserved JSON tree, including otherwise uncounted metadata.
    canonical(intake)
    raw, coverage, context = collect_rows(intake)
    groups, crosswalk = deduplicate_before_ingestion(raw)
    # No tally is accepted before the gate: counts come ONLY from admitted groups.
    counts = {}
    for category in CATEGORIES:
        rows_n = sum(r['category'] == category for r in raw)
        groups_n = sum(g['category'] == category for g in groups)
        counts[category] = {'submitted_rows': rows_n, 'distinct_payload_groups': groups_n,
                            'repeat_occurrences_not_added_to_content_count': rows_n - groups_n}
    require(len(crosswalk) == len(raw), 'CROSSWALK_COVERAGE_ERROR')
    require(sum(x['content_count_contribution'] for x in crosswalk) == len(groups), 'COUNT_ERROR')
    # Same IDs with different conclusions across reviewers are retained as variants.
    variants = defaultdict(list)
    for item in raw:
        variants[(item['category'], item['original_id'])].append(item)
    id_variants = []
    for (category, identifier), members in sorted(variants.items()):
        if len({x['payload_sha256'] for x in members}) > 1:
            id_variants.append({'category': category, 'source_id': identifier,
                                'status': 'DISTINCT_PAYLOADS_PRESERVED_NOT_ADJUDICATED',
                                'occurrences': sorted(x['occurrence_ref'] for x in members)})
    return {
        'kind': 'VPL_ACTION4_PREINGESTED_LEDGER', 'policy_id': POLICY_ID,
        'input_sha256': input_sha256, 'input_revision': intake.get('revision'),
        'source_context': context,
        'scope': 'Reprocess historical FRESH_R03 inputs that fed HF03; no findings re-reviewed or closed.',
        'gate': 'EXACT_PAYLOAD_DEDUPLICATION_BEFORE_DERIVED_LEDGER_COUNTS',
        'rules': {
            'new_finding_id_fields_excluded_from_payload_comparison': sorted(ID_FIELDS),
            'prior_and_peer_reference_ids_included_in_group_key': True,
            'canonicalization': 'JSON sorted object keys, UTF-8, compact separators; no prose/list normalization',
            'all_other_payload_fields_compared': True,
            'supplied_duplicate_flags_used_as_proof': False,
            'similarity_or_id_only_merge': False,
            'source_truth_or_authorship_verified': False,
            'automatic_independent_corroboration_award': False,
        },
        'counts': counts, 'reviewer_coverage': coverage,
        'raw_records': raw, 'admitted_groups': groups, 'duplicate_crosswalk': crosswalk,
        'same_id_distinct_payload_variants': id_variants,
        'original_intake': copy.deepcopy(intake),
        'status': 'DERIVED_CONTENT_LEDGER_NOT_REVIEW_VERDICT_OR_SCORE',
        'limitations': [
            'Exact payload comparison does not detect paraphrase/semantic duplicates.',
            'Distinct payloads are not necessarily distinct underlying defects.',
            'Distinct evidence references remain separate; their truth/independence requires evidence review.',
            'Repeated identical payloads supply zero additional independent votes automatically.',
            'The bound consolidated intake is the input; no fresh Git/remote reviewer revalidation is implied.',
            'Missing ledger is recorded as unavailable, never as a clean review.',
            'No frozen candidate, historical disposition, assessment, or live pipeline is overwritten.',
        ],
    }


def serialize(value: Any) -> bytes:
    return (json.dumps(value, sort_keys=True, ensure_ascii=False, indent=2, allow_nan=False) + '\n').encode('utf-8')


def main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--input', type=Path, required=True)
    parser.add_argument('--expected-input-sha256', required=True)
    parser.add_argument('--output', type=Path, required=True,
                        help='New output file only; existing files are never overwritten.')
    args = parser.parse_args(argv)
    try:
        require(not args.input.is_symlink(), 'INPUT_SYMLINK_NOT_ALLOWED')
        data = args.input.read_bytes()
        require(len(data) <= 20_000_000, 'INPUT_TOO_LARGE')
        require(sha(data) == args.expected_input_sha256, 'INPUT_HASH_MISMATCH')
        document = build_ledger(strict_json(data), sha(data))
        require(args.output.resolve() != args.input.resolve(), 'OUTPUT_IS_INPUT')
        require(args.output.parent.is_dir(), 'OUTPUT_PARENT_MISSING')
        encoded = serialize(document)  # finish serialization before creating any output
        # Exclusive create prevents accidental replacement of prior evidence.
        with args.output.open('xb') as stream:
            stream.write(encoded)
        print(json.dumps({'status': 'DERIVED_LEDGER_WRITTEN', 'counts': document['counts'],
                          'output_sha256': sha(args.output.read_bytes()), 'policy': POLICY_ID}, sort_keys=True))
        return 0
    except (AdmissionError, OSError, RecursionError) as exc:
        print(f'ADMISSION_STOP: {exc}', file=sys.stderr)
        return 2

if __name__ == '__main__':
    raise SystemExit(main())

Download original source manifest

These source artifacts support bounded specification review, test-only timeout/recovery checks and exact-payload grouping. Their presence does not establish production safety, unmocked Guard 2, autonomous state transport or an installed CURRENT state.

Read Final Assessment · Gemini report correction R02

The evaluator-issued report below retains the accepted 95.00 / 99.50 scores and corrects their reasoning and comparability statements. It is preserved as an assessment record, not a new test run or an operating instruction.

Download original assessment report

# GEMINI_REPORT_CORRECTION_ONLY_R02

**Delivery and arithmetic:** VERIFIED.  
**Evaluator-issued successor scores:** 95.00 / 99.50 (Retained unchanged).

## 1. Rubric, Evidence, and Traceability Corrections

This report amends the justifications, classifications, and traceability of the R01 final grading to strictly align with the `GRADING_READSET_R01.md` evidence boundaries. No scoring formulas or totals have been altered.

### A. Track 2, Dimension E (Product/System Integration) Correction
*   **Original R01 Flaw:** Incorrectly labeled Dimension E as "production execution" and justified the score retention (9.5/10) based purely on the lack of MySmartRouter production evidence.
*   **Corrected Judgment:** The V3 authority defines Dimension E as "Product / System Integration," expressly excluding deployment status from direct scoring weight. The 9.5/10 score stands *not* because of a deployment gap, but because the new HF03/T01 evidence (Actions 1, 3, 4) is entirely framework-focused. It introduces test-only fault harnesses and ledger scripts but does not provide new architectural evidence regarding product integration design for MySmartRouter or MyFlightWatcher. The score is carried forward accurately; the rationale is corrected to reflect the V3 rubric's scope.

### B. Track 1, Dimension 8 (QA/Debugging/Recovery) Correction
*   **Original R01 Flaw:** Assumed 97/100 was a mathematical ceiling and that the +0.50 score cap was forced by "strict points limits."
*   **Corrected Judgment:** A score of 97/100 is not a hard cap. The retention of 97 is an evidence-based judgment. Action 3 introduced 13 focused test methods utilizing a test-only deterministic timeout harness. While this proves advanced diagnostic isolation (a local subprocess proxy for fault injection), it does *not* prove unmocked Guard 2 execution or live production recovery. A score of 97 already reflects elite QA/Debugging capability. Retaining it acknowledges that Action 3 was a diagnostic sidecar repair that restored local state exactly, but it did not fundamentally expand the architecture's QA scope beyond what the 97 already captured.

### C. Track 2, Dimensions B & D Correction
*   **Original R01 Flaw:** Awarded the remaining +0.5 headroom without addressing the original historical deductions (synchronous HTTP vs. event streaming; sequential dispatch vs. autonomous collaboration).
*   **Corrected Judgment:** The original product architectures (HTTP, sequential dispatch) were not altered by HF03/T01. However, the +0.5 gains are still warranted under the V3 rubric because V3 scores *applied-AI architect capability*, not just specific product feature implementation. Action 1 (mechanically mapped semantics and owner amendments) demonstrates mastery over deterministic state enforcement (System Architecture, Dim B), mitigating risks inherent in synchronous patterns. Action 4 (exact-payload duplicate pruning before ingestion) demonstrates elite control over multi-model outputs (Agent Orchestration, Dim D), proving advanced boundary management despite the lack of fully autonomous collaboration. The score gains are affirmed based on framework maturation demonstrating high-level architectural judgment.

### D. Action 1 & Action 4 Evidence Boundaries Corrected
*   **Action 1:** The R01 report overstated Action 1's effect. Action 1 yields `ADEQUATE_WITH_STATED_LIMITATIONS`. It mechanically mapped spans and applied explicit A01/M26 owner amendments, but it does *not* constitute unqualified R2-M01 closure or establish a runtime CURRENT state. It proves bounded specification acceptance, leaving owner judgment as an active necessity.
*   **Action 4:** The R01 report falsely claimed the baseline suffered from "finding-count inflation." The evidence shows Action 4 processed 210 *mixed* records (including dispositions and peer confirmations), intentionally grouping content without awarding independent votes to duplicates. The score gain reflects the sophisticated mechanical handling of these payloads, not the correction of an inflated previous score.
*   **Live Connectors:** The assertion "No live API, Git, or Drive connectors" is corrected. The bounded sidecar tests (Actions 1, 3, 4) did not require or verify *new* connector operations. A coordinator Drive transfer occurred, but this does not prove automated state transport or grant new integration score credit.

---

## 2. Track 1: HF03/T01 10-Dimension Assessment (Corrected)

| Dimension | Baseline | Successor | Delta | New Supporting Evidence | Limiting Evidence |
| :--- | :---: | :---: | :---: | :--- | :--- |
| **1. AI/System Architecture** | 95 | 96 | +1 | Action 1: Mechanical verification of 328 spans and A01/M26 explicit owner amendment. | Action 1 yields ADEQUATE_WITH_STATED_LIMITATIONS; Q1 M26 encoding limits remain. |
| **2. Problem Decomposition** | 95 | 96 | +1 | Action 4: Exact-payload pre-ingestion sidecar handles 210 mixed rows into 106 groups. | Duplicate identification previously existed manually; this is mechanical grouping. |
| **3. Multi-Model Orchestration** | 94 | 95 | +1 | Action 4: Retains exact provenance while grouping multi-model output without independent vote inflation. | Continued manual courier overhead limits orchestration fluidity. |
| **4. Product/System Integration** | 92 | 92 | 0 | (Carry Forward) | No new MySmartRouter product integration evidence provided. |
| **5. API/Data/Tool Integration** | 92 | 92 | 0 | (Carry Forward) | No new live Drive/Git connector operation verified in these sidecars. |
| **6. Workflow & State Architecture** | 95 | 96 | +1 | Action 3: Deterministic timeout harness decouples state checks from machine speed. | State transport still requires human courier execution. |
| **7. Governance & Change Control** | 93 | 94 | +1 | Action 1: R04 adjudication replaces manual trust with mechanically verified specification models. | Guard 2 unmocked execution remains unverified; cooperative identity binding. |
| **8. QA/Debugging/Recovery** | 97 | 97 | 0 | Action 3: 13 focused tests successfully restored exact states via local subprocess proxy. | Test-only fault injection; does not constitute live production recovery. |
| **9. Operational Problem Translation** | 95 | 95 | 0 | (Carry Forward) | No new evidence specific to operational business translation. |
| **10. Individual AI Leverage** | 97 | 97 | 0 | (Carry Forward) | Leverage bounded by lack of live agent autonomous execution. |

**Track 1 Total:** 950 / 10 = **95.00**

---

## 3. Track 2: V3 9-Dimension Weighted Assessment (Corrected)

| Dimension | Baseline | Successor | Delta | Reason for Change |
| :--- | :---: | :---: | :---: | :--- |
| **A. Problem Decomposition & Op Translation** | 14.5 | 15.0 | +0.5 | Action 4: Mechanical handling of 210 mixed records into grouped architectures demonstrates elite decomposition capability. |
| **B. AI / System Architecture** | 14.5 | 15.0 | +0.5 | Action 1: Mechanical verification of semantic spans proves deterministic control, mitigating risks of original synchronous HTTP deductions. |
| **C. Human Architectural Judgment & Control** | 14.5 | 15.0 | +0.5 | Action 1: R04 adjudication and explicit owner amendments demonstrate precise human governance over AI models. |
| **D. AI Agent Orchestration & Leverage** | 11.5 | 12.0 | +0.5 | Action 4: Grouping cross-model outputs without vote inflation proves advanced boundary management, offsetting original sequential dispatch deductions. |
| **E. Product / System Integration** | 9.5 | 9.5 | 0 | Unchanged: No new evidence provided for product-level (MySmartRouter) system integration. |
| **F. Workflow, State & Recovery Architecture** | 9.5 | 10.0 | +0.5 | Action 3: Deterministic timeout harness proves resilient local state resumption independent of environmental variance. |
| **G. QA / Validation / Debugging Architecture** | 10.0 | 10.0 | 0 | Unchanged (Max). |
| **H. Governance & Change Control** | 8.0 | 8.0 | 0 | Unchanged (Max). |
| **I. Scope Expansion via AI** | 5.0 | 5.0 | 0 | Unchanged (Max). |

**Track 2 Total:** **99.50 / 100**

---

## 4. Traceability & Comparability Verdict

*   **Track 1 Comparability:** VALID. Evaluated against the exact 10 dimensions/scale of the HF03/T01 frozen state.
*   **Track 2 Comparability:** PARTIAL / ADMISSIBLE WITH CONDITIONS. Evaluated against the V3 rubric. Framework engineering was deemed admissible as applied-AI capability evidence for dimensions A-D and F, supplementing rather than replacing original product audits.
*   **Evaluator Identity/Date:** GEMINI/MAGAI, September 28, 2026.
*   **Input Binding:** `VPL_DUAL_SCORE_FINAL_EVIDENCE_R01.zip` (SHA-256: 7bd8eacbc506414292e80849521317184b219eb1667530f6ef861c52dbca6512).
*   **Current Action:** Report Correction Only (R02). No tests rerun, no public HTML touched, no scores altered from R01.
V6 · October 3, 2026

MySmartRouter V6 · deliberate pause.

The source checkpoint is preserved while framework adoption and protected persistence are completed.

Pause checkpoint · October 3, 2026. V6 architecture is FINAL. Persistence requirements are locked; production persistence is not qualified. The build remains at stage 1 of 7. The signer is unprovisioned and fail-closed; runtime Attempt 1 has not been issued. No merge or deployment is authorized by this website update.

EvidenceRecorded resultLimit
HF5.1 candidatef360929bd7cd2abe2b08b8cde0673586c462a5b9Current source candidate, not an installed release.
Recorded CI24 authority + 66 pilot = 90 distinct cases; seven HF5.1 results are within the pilot total.Source/fixture evidence; not 97 tests and not runtime acceptance.
Independent source reviewClaude R53: PASS_WITH_LIMITATIONS; GPT R54 accepted the source checkpoint.Independent PHP execution was not performed; production installation was not certified.
Findings and regression38 findings retained; full two-baseline application/data/configuration/environment regression is not established.Preserve unresolved findings and prior failures; do not convert retained evidence into PASS.
Hosting qualificationR57 A3 retrieved metadata; required isolation, durable service and recovery checks remain unresolved for the exact target.Other sites’ support answers cannot qualify this product’s account. Shared-hosting libraries cannot establish a missing trust boundary.
Master stageStatusExit evidence
1 · Persistence / runtime proofCURRENT · PAUSEDLocked requirements; protected custody, actual host/runtime, delivered-context proof and WORK continuity remain unqualified.
2 · Draft-only email / dual outputWAITINGApproved read scope, once-generated output, private Git and Drive saves with exact readbacks; no send or mailbox mutation.
3 · Integrations / routing / catalogWAITINGExact model/dispatcher identity, current catalog and actor-specific capability evidence.
4 · Product UATWAITINGReal owner workflows, failure/recovery, responsive/accessibility checks on the exact runnable candidate.
5 · Final regression / evidence closureWAITINGBoth protected baseline and last accepted checkpoint; all required cases, findings and independent evidence reconciled.
6 · Packaging / installation / rollbackWAITINGClean install, cache/version behavior, migration gates and proven environment recovery.
7 · Production releaseWAITINGOwner-approved exact source, qualified deployment route and authenticated live verification.

MySmartRouter source and integration context · no activation implied

sqlite logoSQLite · signer state

Security and persistence

Source-defined private replay/challenge ledger used by the MySmartRouter runtime signer. Its presence in source and CI does not establish an installed signer or persistent CURRENT state.

mariadb logoMariaDB · PHP/PDO integration tests

Database verification

Database service exercised by the isolated exact-head MySmartRouter CI record. Existing MySQL architecture remains relevant; the MariaDB test environment is identified separately from a production database.

libsodium logoPHP sodium / libsodium · Ed25519

Signature verification

PHP sodium functions provide the source-defined signature verification used by the signer/verifier path. This describes the extension and primitive, not a security certification or a newly installed service.

openssl logoPHP OpenSSL · AES-256-GCM

Private configuration

The inspected Google-authentication and connection-service source uses OpenSSL encryption for private token/configuration material. No tokens are published and no new production key or connection is created by this documentation update.

curl logoPHP cURL / libcurl

Provider and Google transport

Source-level HTTP transport for provider calls and Google services. A configured route or callable transport is not evidence that every provider or account is authenticated and working.

github actions logoGitHub Actions · PHP / MariaDB CI

Source-controlled verification

The September 25 R69 record binds candidate source to isolated CI: 291 baseline blobs preserved plus 52 additions, with failing-first evidence and corrected pilot tests. Independent exact-head acceptance and installed/runtime verification remain separate.

google drive logoGoogle Drive · OAuth 2.0 / PKCE

Evidence and Google integration

Versioned review packets and authority handoffs use Drive. MySmartRouter source also contains the Google authorization/PKCE boundary. Public website evidence uses same-site resources, never a visitor’s access to private Drive.

nodejs logoTelegram · external Node.js relay boundary

Notifications and integration

The documented relay lies outside the inspected PHP package. Its Node.js runtime is an integration boundary, not a claim that the relay was installed, tested or activated by the V5 review.

meta-llama logoMeta / Llama · provider catalog

Configured routing

Provider artwork and catalog references are retained as source-configured routing context. Catalog presence is not proof of a live, authenticated model execution.

qwen logoQwen · provider catalog

Configured routing

Source catalog/provider references identify this model family without claiming a new direct connection, live route or independent assessment.

Named roles are source-, contract- or test-evidenced as stated—not blanket claims of installed production services. JSON, Markdown, YAML, CSV, ZIP and SHA-256 support interchange, test workflows, provenance and byte identity; they are formats or mechanisms, not additional vendor endorsements.

Preserved earlier reference · historical wording and evidence

History only. The earlier text below retains its original scope and dates. The V6 requirements and October 3 checkpoint above govern this page’s current description. Earlier modes, retry allowances, timer-only refresh and startup paths do not redefine V6.

11 · Flagship Adoption

MySmartRouter is the flagship consumer—not an already-promoted V5 runtime.

The September 25 R69 record is source/CI evidence for an unaccepted candidate built on preserved R59 lineage, not installed-runtime acceptance. MySmartRouter remains paused. A later separately authorized handoff must reread the newest durable product record, retain accepted signer/SQLite/separate-user decisions, complete the applicable V5 promotion gates and begin with persistence before draft-only email.

Project control package

Recommended project-control tree
/MySmartRouter_Control/
  PROJECT.md
  STATE.yaml
  DECISIONS.md
  ESCALATIONS.md
  ACTIVE_DIRECTIVE.md
  SOURCE_MANIFEST.yaml
  GATE_READINESS_PACKET.json
  ACCEPTANCE_EVIDENCE_MATRIX.md
  HUMAN_DECISION_TRACE.md
  /evidence/
  /releases/
  /incidents/

Mandatory inherited behaviors

  • Bootstrap master-control refresh
  • authority + environment freshness
  • source freeze before material work
  • GPT Scheduled Tasks governance scheduling; runtime capability verified per role
  • specialized QA/review/release/database/deploy agents
  • historical 20–30 scenario target, expanded by risk and protected requirements; counts alone never establish PASS
  • real provider/DB/runtime proof
  • cold state/recovery/rollback proof
  • independent review
  • live deploy verification
  • banked architecture traceability
Reusable principle: future apps follow the same bootstrap, state, automation, readiness, QA, review, release/deploy and evidence architecture. Only the product-specific acceptance criteria, domain architecture, integrations and risk profile change.
Framework Improvement · September 12, 2026

What MySmartRouter V5.1 changed in the VPL Build Framework

Historical September 12, 2026 checkpoint: MySmartRouter V5.1 was described then as the feature-complete staging baseline for a bounded defect-remediation and verification cycle. These lessons remain useful; they are not the current V6 stage or permission to restart that historical hotfix. Product V5.1 and Framework V5 are different version lines.

1. One mutable authority, explicit supersession

Long-running builds accumulate stale instructions. V5.1 proved that appending new decisions is not enough: superseded rules must be explicitly marked as superseded, and downstream test plans must be regenerated from the current authority. A continuation model must read the current locked specification before issuing tests or code changes.

2. Bugs + UX in one governed hotfix

User-facing defects and functional defects are tracked together when they affect the same release. Severity still distinguishes blockers from polish, but a cosmetic-only “later wave” is not allowed to leave obvious product drift in a release candidate.

3. Grouped test blocks, individual adjudication

Testing should be fast enough for a human operator. Related controls are exercised in compact blocks, while each result still receives its own PASS / DEFECT / BLOCKED adjudication and evidence.

4. Live evidence outranks inherited certification

Prior PASS evidence never substitutes for source-matched staging evidence after bytes change. Preserve the visible build ID, failing scenario, runtime result, bounded regression and original qualification before closure.

5. Capability matrices prevent orphaned features

Multi-provider products need an explicit model × provider × modality capability matrix. A provider reference is not a feature until configuration, credential status, model inventory, price/health evidence, telemetry and user-facing controls are all reachable.

6. General settings vs section settings

Cross-application settings belong in one General Settings plane. Mode-specific defaults and provider eligibility belong in the relevant section. This reduces duplicated credentials, hidden prerequisites and inconsistent controls.

7. Persistent shell is a product invariant

Reports, Diagnostics, Help, Settings, history and media remain inside the same branded navigation shell. Secondary utilities should not feel like separate applications.

8. Context is a workflow, not a storage brand

Users should think in terms of reusable context, not internal “Library” implementation details. Session History OPEN becomes a prepared follow-on state, supports multi-source context with provenance, and never auto-submits a provider call.

9. Source-to-package correspondence is mechanical

Production candidates must be byte-correspondent to certified source. Git object identity, SHA-256 reconciliation, secret scan, runtime lint and deterministic manifesting belong in the packaging gate—not in reviewer intuition.

10. Rollback is a complete tree swap

Deployment and rollback use immutable directory/tree replacement. Overlay rollback is prohibited because release-only files can survive as orphans.

11. Runtime boundaries are explicit

A product package documents what it does not own. MySmartRouter PHP runtime, the separate VPL Telegram Node runtime, private configuration, Lovable downstream design work and canonical Git authority remain separately governed.

12. Anti-drift refresh becomes operational control

Framework persistence uses Bootstrap as the control source: use GPT Scheduled Tasks as the default VPL scheduler; retain GitHub Actions for deterministic CI/deployment and Hostinger cron only for product/runtime-specific jobs. Every route surfaces current authority/stage without silently widening scope or mutating production.

New framework gateRequired evidenceFailure prevented
Feature Freeze GateFeature-complete declaration + deferred enhancement registerScope growth during stabilization
Authority Freshness GateCurrent locked spec read + superseded-rule scanInstruction drift
Provider Capability GateConfig + inventory + pricing/health + model mappingOrphaned integrations
UX Consistency GatePersistent shell, global controls, responsive parityFragmented product experience
Package Correspondence GateGit blob/object evidence + exact package hash reconciliationCheckout/line-ending/source drift
Rollback GateImmutable pre-deploy tree + atomic swap instructionsOrphaned release files
Independent Review ChainClaude engineering review → Cursor implementation → Claude verification → Gemini → DeepSeekSelf-certification bias

Technology patterns now formalized

VPL products can use multi-model inference routes, media-specific PAYG providers, Google Drive persistence, Telegram/Pushover notifications, Hostinger cron, GitHub/GitHub Actions and Lovable as downstream design execution—provided each integration is bounded by configuration, telemetry, provenance and independent review.

OpenRouterMulti-model routing
API MartAPI marketplace
TelnyxVoice / communications
RunwareImage generation
ReplicateModel execution
RunwayVideo / media AI
Stability AIGenerative media
Google DriveGovernance / evidence
TelegramMobile control
PushoverLegacy attention routing
GitHub ActionsCI / scheduled automation
HostingerHosting / runtime services
LovableDesign / app execution

V6 adoption boundary · October 3, 2026. The detailed inherited controls below remain provenance and engineering requirements subject to the finalized V6 contract above. V6 supersedes timer-only persistence, automatic retry allowances, exclusive-store assumptions and competing startup authority. Activation requires the exact release manifest and completed cutover gates.

12 · Portable Framework Kit

Frozen integrity artifacts + pre-extracted inspection trees.

Complete ZIP directory structure
VPL_BUILD_FRAMEWORK_MASTER_REV_0_2_2026-09-07/
├── 00_MASTER/
│   ├── VPL_BUILD_FRAMEWORK_CONSOLIDATED_REFERENCE.html
│   ├── VPL_BUILD_FRAMEWORK_MASTER_REFERENCE.md
│   ├── LIVE_AUTHORITY_PACKAGE_REGISTRY.md
│   └── PACKAGE_MANIFEST.json
├── 01_AUTHORITY/
├── 02_STARTUP_READINESS/
├── 03_AUTOMATION_AGENTS/
├── 04_MODULES/
├── 05_DIRECTIVES/
├── 06_STATE_EVIDENCE/
├── 07_BUILD_CREATE_TEMPLATES/
│   ├── Build - Create Templates.zip
│   └── PRE_EXTRACTED/
├── 08_ASSESSMENT_EVIDENCE/
│   ├── Assessment_Evidence_Assets.zip
│   └── PRE_EXTRACTED/
├── 09_MYSMARTROUTER_ADOPTION/
├── 10_SCHEMAS_TEMPLATES/
└── 11_LINEAGE_POINTERS/
Why both ZIP + pre-extracted? The assessment explicitly identified evaluator/access friction as an evidence problem. The master package preserves frozen source packages for integrity while also carrying pre-extracted trees so humans and agents can inspect content without an extraction dependency.
13 · Historical portable package and current public evidence

Preserve the old handoff without mistaking it for current authority.

The Revision 0.3 package below is a historical snapshot with its original package paths and status labels. It does not contain the later V4/V5 authority or authorize today’s execution. The September 28 public assessment, rubrics and scoped source selection are linked separately above; no visitor access to private Drive is required.

Historical Enterprise Package · Revision 0.3

Revision 0.3 preserves the then-operative V3 authority, Bootstrap/readiness controls, agent portfolio, modules, schemas, templates and original assessment evidence. It is a historical handoff snapshot, not the V4/V5 operating package.

Download Master Rev 0.3 ZIP
The historical Revision 0.3 Markdown authorities, modules, path/location registry data, assessment evidence and manifests were packaged in the single master ZIP. No secure-folder access is required to use the portable framework package.
PackagePurposeIncluded in ZIPStatus in the historical snapshot
Master Launch Authority Historical Revision 0.3 master HTML + Markdown + portable ZIP 00_MASTER/ MASTER
V3 Architecture Plane separation, Git-first, persistence-first, deployment/recovery architecture 01_AUTHORITY/VPL_BUILD_ARCHITECTURE.md CURRENT
V3 Final Operating Manual Executive operating law, authority, risk, autonomy, refresh, production gates 01_AUTHORITY/VPL_BUILD_FRAMEWORK_V3_FINAL_OPERATING_MANUAL.md CURRENT
V3 CONTROL Mandatory load order and locked control-plane rules 01_AUTHORITY/VPL_BUILD_FRAMEWORK_CONTROL_V3.0.md CURRENT
V3 Baseline Full inherited V3 baseline and operational lineage 01_AUTHORITY/VPL_BUILD_FRAMEWORK_V3_BASELINE.md CURRENT
V3 Errata / Transition / Regression Risk clarifications, transition gates, QA/lineage 01_AUTHORITY CURRENT
Cursor Automation Control Historical Cursor-exclusive preference; superseded for V4 by GPT scheduled-agent default 03_AUTOMATION_AGENTS/VPL_V3_CURSOR_AUTOMATION_AGENT_CONTROL_AMENDMENT_V1.md CURRENT
Autonomous Agent Control NEXT/REVIEW ownership, event schema, no-self-certification, bounded repair 03_AUTOMATION_AGENTS/AUTONOMOUS_AGENT_CONTROL_MODULE_V3_FINAL.md FINAL
Bootstrap / V3.2 pragmatic recovery lineage Source-before-memory, path/environment reconciliation, strategy pivot, frustration controls 02_STARTUP_READINESS CURRENT
Engineering Gate Readiness 18-field readiness packet and no-unprepared-gate law 02_STARTUP_READINESS/ENGINEERING_OVERSIGHT_GATE_READINESS_MODULE_V3_1.md ACTIVE
Permission / Capability Preflight Actor-resource-operation access proof and PA readiness states 02_STARTUP_READINESS/STARTUP_PERMISSION_CAPABILITY_PREFLIGHT_PA_MODULE_V3_1.md ACTIVE
Project Bootstrap Create V3-ready project control/state/source/evidence structure 04_MODULES/PROJECT_BOOTSTRAP_MODULE_V3_1.md APPROVED
GitHub Governance Durable source, branch, commit, PR/cloud handoff rules 04_MODULES/GITHUB_GOVERNANCE_MODULE_V3_1.md APPROVED
Hostinger Deployment Production target/deployment contract and validation lineage 04_MODULES/HOSTINGER_DEPLOYMENT_MODULE_V3_1.md APPROVED
Evidence Banking Durable evidence/state banking 04_MODULES/EVIDENCE_BANKING_MODULE_V3_1.md APPROVED
Rollback / Recovery Last-known-good and controlled recovery 04_MODULES/ROLLBACK_RECOVERY_MODULE_V3_1.md APPROVED
Health / Monitoring Health checks and transition alerts 04_MODULES/HEALTH_MONITORING_MODULE_V3_1.md APPROVED
Secrets / Credentials Least-privilege secret lifecycle and non-disclosure 04_MODULES/SECRETS_CREDENTIALS_MODULE_V3_1.md APPROVED
Executor Routing Route GPT/Cursor/Claude/provider work to correct logical role 04_MODULES/EXECUTOR_ROUTING_MODULE_V3_1.md APPROVED
Design Precise Change Surgical change / render QA / overwrite controls 04_MODULES/DESIGN_PRECISE_CHANGE_MODULE_V3_1.md ACTIVE
Delicate Work Preservation-first high-risk artifact editing controls 04_MODULES/DELICATE_WORK_MODULE.md ACTIVE
Static Asset Publishing HTML/CSS/JS/image publishing controls 04_MODULES/STATIC_ASSET_PUBLISHING_MODULE_V3_1.md APPROVED
Case Study Publishing Frequent lightweight HTML edit/publish/rollback 04_MODULES/CASE_STUDY_PUBLISHING_MODULE_V3_1.md APPROVED
Guided / I Never Did This Before First-party-doc-first guided UI support 04_MODULES/I_NEVER_DID_THIS_BEFORE_MODULE_V3_1.md MANDATORY
Telegram + Mobile Operations Exception/query/status transport and safe phone operations 04_MODULES ACTIVE
Remote Access / Tailscale Private mobile-to-persistent-Windows recovery/interactive path 04_MODULES/REMOTE_ACCESS_TAILSCALE_MODULE_V3_1.md APPROVED
Notification Low-noise exception/status event notifications 04_MODULES/NOTIFICATION_MODULE_V3_1.md APPROVED
Build / Create / Certification Templates Portable prompt SDK, manifesto, sprint, mockup and certification assets 07_BUILD_CREATE_TEMPLATES TEMPLATE AUTHORITY
Assessment Evidence Frozen assessment ZIP + pre-extracted evaluator evidence tree 08_ASSESSMENT_EVIDENCE SUPPORTING EVIDENCE
MySmartRouter Adoption Blueprint Product-specific inheritance blueprint for flagship architecture proof 09_MYSMARTROUTER_ADOPTION ADOPTION
Authority rule: the portable ZIP preserves the complete Revision 0.3 handoff snapshot and its then-current status labels. Current published work follows V4 FINAL / REV 006; REV007 R4 was recorded as candidate/HOLD in the September 23 history; V3/V3.2 records remain historical. Refresh the applicable V4 controls before reuse. This table is retained for lineage and does not reactivate a candidate or superseded module.

V6 adoption boundary · October 3, 2026. The detailed inherited controls below remain provenance and engineering requirements subject to the finalized V6 contract above. V6 supersedes timer-only persistence, automatic retry allowances, exclusive-store assumptions and competing startup authority. Activation requires the exact release manifest and completed cutover gates.

V4 maturation · continuous engineering control

Every wave leaves a safer next step.

The V4 FINAL revision turns preservation, feedback and progression into explicit operating contracts, while retaining the historical architecture and evidence below.

V4.0 FINAL · REV 006 · current published operating authority

Build on accepted work. Prove each next step.

V4 carries forward the portfolio’s engineering lessons into one go-forward framework: three evidence-selected build paths, seven progressive checkpoints, two-baseline regression comparison, earlier owner feedback and independent-model challenge throughout material work. The intent is faster learning without losing what already works.

Choose the right execution path

Manual, Light Build and MySmartRouter are peer options. Select by actual capability, risk and coordination value; escalate only the component that needs it.

Make preservation measurable

Compare each candidate with both the last accepted checkpoint and the locked baseline. Keep requirements, visual behavior, source identity and untested cases visible.

Connect tools to accountable outcomes

Git and Drive, Hostinger API and Git deployment, membership, payment and marketing each have a defined responsibility, proof requirement and recovery boundary.

FINAL identifies owner-directed operating guidelines. Historical assessments retain their original scope and dates; independent framework assurance and each product’s runtime acceptance remain separately evidenced.

Three routes. One quality standard.

PathChoose from evidenceOperating contract
ManualA real native interaction, local toolchain or specialist capability is needed; persistent orchestration adds little value.Exact prepared session and pinned directive → bounded executor wave → independent review and GPT adjudication. Owner-paced transport stays owner-paced.
Light BuildA contained application or component can be inspected, changed, tested and packaged directly with equal or lower risk.GPT-direct work, early real BETA/UAT, bounded repair, generalization and the same release evidence. A repository or a large corpus alone does not require another executor.
MySmartRouterMultiple actors, services or stages gain enough from durable coordination to justify its added operational complexity.Current authority, safe dispatch, source-matched handoffs, restart/duplicate protection, independent gates and mandatory VPL conformance.

Record path, cadence and location separately: Manual / Light Build / MySmartRouter; owner-paced / bounded automatic; local / remote / hybrid. New identity, payment, regulated-data, complex-migration or worker requirements trigger component assessment—not automatic approval because a module exists.

G0–G6: checkpoint and release progression

GateRequired evidenceProgression boundary
G0 · Re-anchorCurrent V4 authority; exact accepted source, data and configuration; locked behaviors; selected path and rollback.Unknown or mixed source stops mutation. Completed work stays preserved.
G1 · Bound the changeRequirement IDs; touched and untouched surfaces; risk; executable test plan; reviewer and return destination.Prepare the actual environment before implementation; do not discover predictable access gaps downstream.
G2 · Freeze the candidateExact diff and candidate identity; smoke, lint, security and failing-first defect evidence where applicable.A working BETA can be shared early. It is not yet an accepted checkpoint.
G3 · Compare and challengeLast checkpoint → candidate and locked baseline → candidate; invariant tests; affected integrations; required owner UAT and independent review.Any mandatory failed, skipped or unverified case holds the affected promotion.
G4 · Accept and bankSource-matched tests and reviews; closed blockers; accepted known gaps; verified durable readback.Advance only the accepted checkpoint. Preserve the prior checkpoint and an exact restore target.
G5 · Prove the release candidateCumulative regression, real loader and integration contracts, clean extraction/staging, independent release review and required owner acceptance.Mock-only evidence, a stale review or a different candidate cannot certify this release.
G6 · Validate productionOne selected API or Git deployment route; exact approved candidate; provider receipt; ordinary and cache-aware live checks; recovery evidence.Deployment passes only when observed public behavior agrees; otherwise stop and recover.

Two baselines, not one

Compare the candidate against the last accepted checkpoint for the immediate change, and against the locked release or UX baseline for cumulative preservation. Reuse a reproducible harness, environment and test data. Track each protected requirement as preserved, improved, added, explicitly changed, regressed or unverified.

Feedback during the build

Actively solicit qualified independent-model review at architecture decisions, material checkpoints, recurring defects and release. Reviewers inspect the same frozen source and report evidence, severity and gaps. Executor self-review, a prepared prompt or a favorable score is not independent acceptance.

Early UAT; honest promotion

Return a real working BETA as soon as a coherent journey exists. Owner-observed failures override the affected automated PASS. Keep failed, blocked and not-run cases visible; never rebase tests or screenshots merely to turn a regression green.

A working candidate, an accepted checkpoint and a Recovery Anchor are different evidence states. A mandatory unresolved review or test holds dependent promotion; useful discovery and clearly labeled early UAT can continue. No numeric score overrides a critical/high release blocker.

V6 adoption boundary · October 3, 2026. The detailed inherited controls below remain provenance and engineering requirements subject to the finalized V6 contract above. V6 supersedes timer-only persistence, automatic retry allowances, exclusive-store assumptions and competing startup authority. Activation requires the exact release manifest and completed cutover gates.

V4 maturation · complete module consideration

One framework. Explicit responsibilities.

Bootstrap considers 21 inherited module families, three commercial contracts and one proposed support extension. Applicable controls are loaded before action; excluded or conditional families receive a reasoned disposition.

Control familyRetained and expanded coverage
Bootstrap & governanceBootstrap and executive communication; project Bootstrap; executor environment/access; executor routing; autonomous-agent control; GitHub governance.
Assurance & operationsEvidence and banking; health and monitoring; rollback/recovery; secrets/credentials; technical deep-dive recalibration.
Delivery & communicationHostinger deployment; case-study publishing; static-asset publishing; guided support; mobile operations; notifications; Telegram control; remote access/Tailscale.
Preserved candidatesDelicate Work and Design Precise Change remain explicitly considered candidates. Existing preservation obligations continue; a candidate label is not silent activation.
V4 commercial contractsaMember membership; Stripe payments; GetResponse lifecycle. These are first-class contracts with product-specific installation, acceptance and activation gates.
Proposed extensionSupport-email automation is retained as a proposed, separately authorized capability, with customer isolation, draft-first scope, loop prevention and escalation.

Hostinger API + Git

Both are established VPL connection routes. Git provides repeatable source-led promotion; API/MCP operations provide a separately authenticated hosting route when the required action is exposed. Select one release path, verify the target, preserve rollback and reconcile direct patches to Git before the next automatic deployment.

Cursor + Claude: Git and Drive

Both have Git and Google Drive connections. Git carries implementation identity; Drive carries control and evidence. Verify the exact actor, session, permission and operation instead of denying a known connection or inheriting another actor’s PASS.

Evidence before activation

Fourteen logical agent roles remain preserved. A role contract, created task, executed pilot and verified active service are separate states. Scheduling never expands scope, certifies a deployment or installs universal memory across unrelated chats.

V4 expansion · membership, payments & scheduled orchestration

From a collection of tools to reusable operating contracts.

V4 connects the existing development stack to a governed customer lifecycle: lead capture in GetResponse, payment through Stripe, account and entitlement control in aMember, and product access backed by explicit evidence. These are reusable framework contracts; implementation and activation are verified separately for each product.

aMember

Reusable account, membership and protected-access integration. V4 defines entitlement checks, payment-to-membership mapping, safe return-to-app behavior and recovery tests.

Stripe

Payment and checkout integration with verified server-side outcomes, existing product/price reuse, authenticated events and duplicate-safe fulfillment.

ChatGPT Scheduled Tasks

Capability-gated scheduled orchestration and read-only readiness pilots. Current authority is reloaded on each invocation; defined roles, created tasks and verified runtime remain distinct.

The aMember and Stripe marks are embedded from their official websites; the scheduled-task card reuses this portfolio’s existing OpenAI identification mark. No new external logo dependency is required. Technology inclusion identifies its role in the portfolio or framework, not a claim that every service is live in every application.

Customer lifecycle: visitor → optional lead capture → offer and checkout → server-verified payment → idempotent membership provisioning → authorized onboarding → authenticated login and entitlement validation → protected product access.

Stripe establishes payment outcomes; aMember establishes membership access; GetResponse manages approved marketing lifecycle. Test the full journey and partial-failure recovery, not only isolated vendor screens.

MySmartRouter · binding operating guidance

VPL conformance is required, not optional.

MySmartRouter and its reviewers must respect the locked VPL-GL-01–15 requirements: current authority; correct project and source; preserved accepted work; evidence-based routing; complete module consideration; actor-specific readiness; continuous regression; early UAT; independent review; gated banking; bounded repair and safe concurrency; secret and owner boundaries; governed deployment/recovery; freshness with truthful communication; and GL-15 persistence assurance. The complete inherited GL-15 safeguards remain retained in the reviewed V5 effective specification. The adopted A01/M26 amendment makes persistence proof invocation-bound; a model recap or scheduled heartbeat does not establish CURRENT. Product implementation and behavioral proof remain separate gates.

Before dispatch or promotion, map every applicable requirement to current implementation, tests and evidence. Missing required conformance holds the affected action. Product-specific architecture stays in the product; applying the framework does not imply every planned runtime adaptation is already implemented.

V6 · October 3, 2026

October 3, 2026 · V6 reference update

Revision VPL-WEB-V6-20261003-R01. Current narrative reconciled to the final V6 architecture and the reviewed MySmartRouter pause.

UpdateResult
Architecture / processOne manifest-driven framework; GPT WORK participation, coordination, cadence and execution qualification.
Persistence / recoveryFull refresh, per-turn binding, protected broker, immutable state, reservations and unknown-outcome hold.
Product checkpointR57 pause; HF5.1 source/fixture evidence; full seven-stage schedule and remaining regression.
Historical recordsOriginal assessment scores, source evidence, dates, founder/technology content and visual assets retained. No new score, runtime acceptance, framework activation or deployment is claimed.
Framework lineage & revision record

From inherited controls to reviewed V5 improvements.

Keep the history, the evidence and the development investment together—without turning a newer score into retroactive acceptance of every earlier stage.

Estimated cumulative engineering effort: 240–400 hours. This is one low-confidence, unlogged reconstruction of framework architecture and its review/evidence system—not Peter’s measured personal time, elapsed time, AI processing time, billable effort or savings. The six workstreams below sum to that single range; their placement illustrates the chronology, not the measured duration of each milestone. Future MySmartRouter completion and live deployment are excluded.

Milestone / versionDevelopment and evidenceCumulative workstream estimate
September 6 · V3 assessmentHistorical nine-dimension result 97.00, retaining the original method, classification and product evidence. Establish the problem, boundaries and human decision responsibility.40–64 h · architecture framing, authority and decision boundaries.
V4 FINAL / REV006 foundationBootstrap-first authority, three peer paths, G0–G6, independent review, Recovery Anchors and comparison to both the locked baseline and last accepted checkpoint. V4 remains published authority.48–80 h · workflow, persistence, source identity and recovery design.
September 25 · MySmartRouter R69Source/CI illustration: 291 R59 blobs retained plus 52 additions; failing-first gate followed by the recorded 16/16 corrected pilot cases. Prepared delivery is not proof of provider receipt, new-head independent acceptance or installation.40–72 h · verification tooling, fixtures and negative-path tests; not a separate product-completion estimate.
V5 HF03/T01 · review, reconciliation and repairPreserve the 451-file candidate; make Manual/Light inheritance, tree/registry, typed applicability, BUILD EDIT and recap behavior inspectable; reconcile findings and bound repairs.56–88 h · independent challenge, triage and bounded remediation.
September 28 · source-bound decisions and replayAction 1: 328 spans / 35 sources, adopted amendment and verbatim GL-15, adequate with stated limitations. Action 3: 13 focused tests and test-only replay. Action 4: 42 focused tests, 210 mixed records / 106 groups, original provenance retained.32–56 h · evidence packaging, provenance and reproducibility.
September 28 · accepted assessmentsGemini/Magai issued 95.00 and 99.50 under different instruments. Corrected R02 rationale retains both scores and the informed/non-blind, partial-comparability limit. Product integration scores were not raised by framework-only sidecars.24–40 h · technical documentation and assessment preparation.
Continuous improvement: define → develop → challenge independently → reconcile findings → make a bounded repair → test/replay → retain evidence and limitations → assess → carry accepted lessons into the next authorized step. Failed attempts and incomplete evidence remain part of that record; iteration count is not proof of production readiness.

Preserved earlier reference revisions

Historical referenceRetained contribution
V4.0 RC1 · Historical audit candidateGPT scheduled-agent default, every-invocation Bootstrap, preserved V3 architecture, sequential migration of fourteen roles, and independent Claude/DeepSeek/Gemini review. The historical record noted a created Bootstrap pilot and pending migrations; this is not a September 28 runtime status assertion.
Version 2.5 · Historical predecessorBalanced operating-path presentation: Manual, Light Build, and MySmartRouter are explicit peer paths selected by a neutral Build Path Assessment. Human-in-the-loop is promoted to a first-class governance principle, while NEXT/REVIEW remain routine system events. Historical change detail remains in the V3 changelog rather than dominating this operating reference.
Version 2.1 · 2026-09-13Bootstrap-first enterprise refresh: BOOTSTRAP becomes the first/master control; the live tree manifest and shorthand registry are explicit; edit framework routes changes to the correct owner; provider-currentness and actor-specific environment prep are mandatory; manual stage naming ties 1:1 across recap/directive/returns; the public structure map reflects current V3 controls, candidates and reference boundaries.
Revision 0.1 · 2026-09-07Initial consolidated launch reference. Corrected the major Cursor Automation/Hostinger plane distinction but remained too abbreviated for enterprise product handoff.
Revision 0.3 · 2026-09-07Enterprise master rebuild: full package registry, current authorities, agent contracts/portfolio, schemas/code blocks, readiness, autonomy, precise/delicate work, QA/recovery, release/database/deploy, traceability, MySmartRouter adoption, certification templates, assessment evidence and one complete ZIP.

Framework reference revision record

RevisionChange in this public referenceAuthority / acceptance boundary
September 28 · R03Reconciled V4 foundation, V5 reviewed evidence, technology roles and current dual assessments.Website reference update; not a product release or authority promotion.
September 28 · R04Dedicated Human-in-the-Loop and three build-path sections; detailed V5 controls and evidence limits; embedded rubric/source/report; reconciled dated status and bottom chronology.V4 FINAL / REV006 remains the published foundation. The reviewed V5 work and its adopted amendment retain their bounded scope. MySmartRouter stays paused until separately authorized.

Source basis: Preserved reference milestones; V5 Execution Bible R10 and Bootstrap R02; Action 1/3/4 closeout records; corrected Gemini R02; ARCHITECTURE_EFFORT_ESTIMATE.json (scope-based reconstruction, not actual hours).

September 21, 2026 · E1 / REV004 presentation history

The E1 edition expanded build-path decisions, checkpoint progression, two-baseline regression, independent feedback and connected delivery/commerce contracts. Its publication label is historical; the published V4 REV006 foundation and reviewed V5 evidence are distinguished above.

September 21, 2026 · E2 display history

The E2 refinement retained the navigation, section structure and existing visual language. The later R03 reference reconciliation and this R04 build-path/V5 detail update are recorded in the revision table above; neither is a product-runtime acceptance.

V6 · October 3, 2026

Authority and publication boundary

Updated October 3, 2026.

V6 is the sole go-forward architectural design. Historical operating releases remain pinned until controlled activation. This public reference update does not change Bootstrap, project-state pointers, archives or deployed product code.

Historical assessment trace

The September 23 94.50 record and historical V3 97.00 result remain dated evidence. The accepted September 28 results and their separate methods are shown in Current Assessments.

V2 candidate · 24 October 2026 · evidence-led expansion · for Claude independent evaluation

Current VPL operating framework: portfolio expansion, governed execution and verified boundaries

Purpose. This is a dated, evidence-graded addendum to the historical V6 consolidated reference. It explains how VPL's practical delivery system has matured through October 2026; it does not amend the operative SRV6 Bootstrap, promote a candidate release, approve production deployments, or replace the underlying project recaps.

Governance evolutionV6 architectural reference (Oct 3) → later SRV6 Bootstrap governance. Only the current operative Bootstrap and its required reading sequence control live builds.
Build executionLight = GPT-direct bounded execution; Manual = NEXT → assigned actor work → GPT REVIEW. No silent mode switches or acceptance shortcuts.
Evidence maturityHTML recap + UAT + artifacts + explicit actor/status ledger + connected-source verification. Product-specific releases and runtime states remain independent of portfolio labels.

Architecture and operational advances observed

Continuity as a first-class contractRecover saved checkpoint, current stage, owner approvals, active build mode and next permitted action before execution; do not repeat accepted work. Refresh Bootstrap at governed boundaries and after lost context.
Quality gates and handoffsBounded tasks, independent REVIEW, UAT, deployment evidence, explicit PASS/FIX/HOLD statuses, regression checks, controlled rollback and failed/unknown outcome reconciliation.
Publication versus runtimeCase studies and production labels communicate portfolio maturity; actual hosting, authentication, ingestion, payment and provider workflows need their own verification. Never convert a badge into a release attestation.
Model and provider integrationMyTurboGPT R21 and MySmartRouter demonstrate distinct provider/model management and orchestration concerns. Provider selection, credential persistence, artifacts and handoffs need explicit tests.
Constrained editorial automationMyVibeSuite B011 work focuses on template-backed landing pages and bounded section review: preserve placement, layout, typography limits, image swap controls and localized word-count restrictions.
Evidence-rich packaged softwareMyScreenScraper V2.0 R14 adds desktop capture/annotate/record history and a separate Hostinger route review; ResumeRocketPro diagnostic evidence shows ATS scoring, traceability and protected claims.

Portfolio status snapshot — as represented on the homepage

The following labels are copied as portfolio publication status, not independent deployment verification. In particular MySmartRouter is the first flagship card while labeled in dev. B026. Product recaps may carry later or different iteration labels; the homepage label is not the technical latest-build authority.

ProductHomepage badgeLive destination evidence
MySmartRouterin dev. B026Portfolio-listed destination
GuitarFakeBookin productionPortfolio-listed destination
MyFlightWatcherin productionPortfolio-listed destination
MyJamTracksin productionPortfolio-listed destination
MyOfferCountdownin productionPortfolio-listed destination
MyCrockPotin productionPortfolio-listed destination
TriadSoloLabin productionPortfolio-listed destination
MyVoiceVibein productionPortfolio-listed destination
InFlowin productionNo destination supplied / not independently verified
TrueReplyin productionNo destination supplied / not independently verified
ResumeRocketProin dev. B012No destination supplied / not independently verified
RocketFillin dev. B012No destination supplied / not independently verified
MyScreenScraperin dev. B2.0No destination supplied / not independently verified
MyRocketStudioin dev. 09.2No destination supplied / not independently verified
KDP AI Secretsin dev. 0.01No destination supplied / not independently verified
MyIdeaMaxin dev. 04.9No destination supplied / not independently verified
MyVibeSuitein dev. B11No destination supplied / not independently verified

Representative current product development signals

StreamRecent grounded anchorImplications / what still needs verification
ResumeRocketPro / RocketFillV7.2E-B009 diagnostic includes input/evidence separation, role-family analysis, ATS translation audit, scored comparison and PASS outcome; Drive contains later B010/B011 deployment-kit checksum records.Verify version mapping, Alwaysdata deployment and next acceptance in the active project recap. B012 site badge is not sufficient proof of deployed functionality.
MySmartRouterV7.1-B021 UAT R08 surfaced; earlier V6 pilot and independent admission verification remain historical evidence.Clarify operative V7.1 checkpoint, UAT disposition, routing/actor readiness, connector access and persistence. Distinguish UAT from production acceptance.
MyTurboGPTR21 HTML build recap and UAT; R20 design and R21 login preview separately present.Track model-provider settings, one-provider-at-a-time behavior, prompt/session history, local artifact folders and password gate boundaries. A preview is not deployed authentication.
MyIdeaMaxUX 4.8.0 UAT and 4.3.0 candidates found; homepage badge retains dev 04.9.Resolve the product's operative acceptance and version lineage before asserting 04.9 implementation completion.
MyVibeSuiteV2.0 B011 recap and UAT; earlier 1.4–1.6 template and preview work.Verify constrained copy-edit guardrails, image-specific prompts, template fidelity, section length limits and progression/approval behavior.
MyScreenScraperV2.0 R14 Hostinger route-review recap, separate UAT; case study and infographic in website portfolio.Verify install/download packaging, capture workflow, annotation, recording, saved history and hosting route independently.
MyCrockPotNew self-contained HTML recipe companion case study and infographic; production label on homepage.Case study describes offline recipe discovery, filters, favorites and shopping-list flow; production badge is publication status rather than fresh end-to-end UAT.
VPL websiteOptimized index.html 2,342,756 bytes, source index_final.html 2,837,168 bytes (17.4% reduction); latest two case studies and modal infographics integrated.File size and structural checks were reported; real mobile/desktop load and interaction performance benchmarking still requires measured browser/device tests.

Required evidence distinction and independent review questions

Source and traceability register

Primary snapshots and supporting product evidence consulted. Recap/UX files are development evidence; web index badges are portfolio claims. Files newer than the cited anchors may exist and are not silently treated as reviewed.

Current / Done / Required next — document-only handoff

DoneCurrentRequired next
Snapshot and differentiated evidence compiled; original V6 reference retained; production and development labels transcribed.V2 reference and updated Overview Peter prepared as candidate reference material.Submit both to Claude for independent evaluation; reconcile findings with current Bootstrap/project ledgers; owner decides acceptance, then backfill. No product build or prod deployment authorized by this document.

Document boundary: VPL_BUILD_FRAMEWORK_CONSOLIDATED_REFERENCE_V2.html is a dated reference synthesis. The source V6 file remains intact. Overview_Peter.html is complementary background evidence, not a substitute for current Bootstrap or release state.