AI Systems Architecture Capability
95.00Gemini · 10-Dimension Systems Architecture Assessment
Measures the architecture: how well the system is designed, governed, tested, recovered, and controlled.
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.
Peter DeCaro · AI Operations & Solutions Architect. Two instruments, with separate baselines and evidence boundaries.
Gemini · 10-Dimension Systems Architecture Assessment
Measures the architecture: how well the system is designed, governed, tested, recovered, and controlled.
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.
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.
Resolve the manifest, hashes, canonical files, schemas and acceptance references. Folder names such as “v5” and a FINAL filename do not activate a release.
Qualify actor × surface × operation × target × session. Declared connections and observed readiness are separate records; stale PASS never substitutes for current access.
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.
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.
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.
VPL Build Framework/BOOTSTRAP.md → V4/BOOTSTRAP.md → V4 CONTROL + FINAL operating guidelines.
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.
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.
CURRENT_STAGE is copied verbatim from the active Item row and repeated in GPT, Claude, Cursor, directives and evidence.
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 actionedit frameworkLoads 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 shorthandCreates 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 shorthandReads the shorthand registry and displays the active phrase → action → target map. Shorthand is routing only; it never creates deployment, payment, destructive or permission authority.
BuildRuns the Build Path Assessment before implementation. It selects the smallest safe operating path for the work: Manual, Light Build, or MySmartRouter.
Build ReviewReassesses 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.
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.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 readbackUnify the operating contracts while preserving project ownership and exact artifact authority.
| Area | V6 ownership / rule |
|---|---|
| Framework | Canonical framework subtree: VPL/v5/V6. One release manifest governs Bootstrap, controls, schemas, profiles and provenance. |
| MySmartRouter | Product 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 stores | Git and Drive have equal qualified standing. Each artifact has one explicit authoritative revision and exact verified readback; software source still retains repository identity. |
| Migration | Rebind active states and consumers before archiving old trees. Preserve stable IDs where supported and an old-to-new identity/hash map. |
| Coverage | Preserve 26 module IDs, 15 guidelines, 14 roles and 12 inherited shorthand entries, plus WORK, GitHub resources, actor capabilities, CAR, Copy Dictation and Copywriting extensions. |
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.
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.
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.mdBootstrap, Final Manual, CONTROL, authorized errata, module registry, project controls and state determine what is current and permitted.
Governed Git/GitHub carries deployable source identity. Drive governs framework/control/evidence. The two are reconciled, not conflated.
90_REFERENCE/ preserves historical packages, archived modules, scratch and superseded candidates without allowing folder presence to reactivate them.
| Edit type | Primary owner | Required synchronized checks |
|---|---|---|
| General framework behavior | Existing owning control/module resolved through edit framework | Bootstrap, aliases/shorthand, tree, changelog, mirrors, evidence; registry if status changes |
| File/folder topology | V4_TREE_MANIFEST_FINAL.json | Canonical paths/IDs, links, aliases, public reference, rollback |
| Module activation/classification | V4_MODULE_REGISTRY_FINAL.json | Parent authority, independent-review requirement, invoking controls |
| Manual NEXT / REVIEW behavior | 01_MANUAL/MANUAL_CONTROL.md | Stage 1:1, owner routing, return contract, screenshot process |
| New behavior with no owner | Bootstrap recommends smallest new owner | Folder, parent authority, scope, review requirement, manifest + changelog |
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.
Light, Manual and MySmartRouter remain familiar labels for participation and coordination within the same V6 contract.
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.
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.
GPT prepares and adjudicates; a qualified actor executes the bounded directive. Independent review and material owner acceptance remain distinct from executor claims.
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.
All three paths share source integrity, regression, evidence, independent-review and material owner-acceptance requirements.
GPT-led preparation with a genuine native, local or specialist handoff. Preserve owner-paced NEXT and REVIEW.
Read Manual 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 →Durable multi-stage coordination when routing, restart handling, multiple actors or services justify the added complexity.
Read MySmartRouter Build →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.
Use a qualified specialist or native handoff only for the capability the task requires.
Save the exact directive, source revision, scope, tests, return destination and terminal boundary. Owner-paced NEXT/REVIEW remains owner-paced.
PREPARED → LAUNCH_REQUESTED → SESSION_BOUND → EXECUTING → RETURN_SAVED → REVIEW_REQUIRED. Copying a prompt is not an acknowledged launch.
Save the full return, preserve failures, refresh cumulative authority and reconcile evidence against the directive. Independent review cannot be replaced by executor self-certification.
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.
GPT leads preparation and evidence reconciliation; the qualified human/native/specialist route supplies the capability that is actually missing.
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.
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.
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.
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 improvement | What remains explicit |
|---|---|
| Preservation before rewrite | The 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 lineage | Current 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 evidence | Thirteen 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 access | Evidence 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 advancement | Only 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.
GPT-only participation is appropriate when the exact connected surface can execute and verify the bounded task.
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.
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.
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.
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.
Reduce coordination overhead without reducing testing, owner feedback, source preservation or release discipline.
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.
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.
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.
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 improvement | Behavior or evidence boundary |
|---|---|
| Canonical HTML Build Recap | Green path identity plus text; prior accepted iteration, candidate, Recovery Anchor, reversion and nested remediation stay visible. Color never substitutes for status. |
| Manual/Light protection | The 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 work | The 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 reassessment | Identity, 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 boundary | Do 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.
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.
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.
Durable coordination adds value only when state, source, permissions, retries and review results remain inspectable across actors.
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.
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.
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.
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 contribution | Product-runtime limit |
|---|---|
| Invocation-bound persistence | Verify 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 implementation | R59 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 25 | The 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 email | After 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 effects | No 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. |
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.
Preserve intent, consent, material decisions and acceptance while keeping routine engineering with the qualified execution route.
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.
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.
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 boundary | Human responsibility | Machine responsibility / evidence |
|---|---|---|
| Intent, scope and route | Approve the goal, material limits and acceptance criteria. | Assess Manual / Light / MySmartRouter neutrally; record path, cadence and execution location separately. |
| Early UAT | Judge 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 finding | Accept 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 action | Complete 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 / release | Accept the exact candidate when the gate requires owner judgment. | Compare both baselines, retain failures and limitations, verify saved evidence and preserve the restore target. |
ADEQUATE_WITH_STATED_LIMITATIONS at specification level. That decision is not proof of model memory, unmocked Guard 2 or production recovery.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.
The newer work makes inherited controls, state, applicability, review and recovery more explicit and mechanically inspectable. It does not replace product-specific acceptance.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 / LKGGoogle Drive: framework authority, CONTROL, project state, directives, decisions, evidence, banking.
Governed GitHub: source, branch, SHA, PR, diff, version history, cloud handoff.
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.
Executor follows the Build Path Assessment: GPT-direct when capable; Cursor, Claude, local tooling, or another specialist only for a demonstrated capability gap.
Deterministic QA + real contract tests: observable gates, negative evidence, regression.
Separate reviewer role/context. A different agent instance alone is not automatically independent.
Hostinger/provider: production target. Runtime truth is evidence; it is not governance authority.
Evidence + durable state: exact source, events, tests, review, release/deploy, recovery and decisions.
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.
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.
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.
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.
For any proposed specialist handoff, record the exact capability gap, value-add, added handoff risk, and whether only the affected component should be escalated.
Apply the finalized V6 rules during controlled adoption; old retry and timer wording remains historical.
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.
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.
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.
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.
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.
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.
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.
Chats help locate context; durable current authority decides.
Prove the exact operation in the exact intended actor/environment.
Readiness is a gate, not a suggestion.
Refresh every 4 completed exchanges or 30 minutes, plus hard refresh events.
Repo + branch + SHA + changed scope + rollback before material work.
Executor DONE/READY/tests are evidence, not independent PASS.
NEXT/REVIEW/QA/retry are system events; owner is not a routine approval button.
Failures, defects, failed regressions and blocked routes are banked.
2 same-method attempts; 3 cycles/objective failures force a materially different strategy.
Owner for architecture, true consent/identity, incidents and P3—not predictable machine work.
No architecture or enterprise claim outruns directly inspectable proof.
Alignment and framework upgrades do not restart or rewrite known-good product source.
The finalized architecture supplies the design. Compilation, real flow proof, review and pointer migration establish the operational release.
| Order | Required completion |
|---|---|
| A1 · Compile | One compact release, manifest/hashes, schemas, full preservation crosswalk, extension sources and actor-capability registry. |
| A2 · Implement | WORK adapter, full content refresh, response validator, protected broker, durable event/attempt ledger and recovery. |
| A3 · Prove | One Light and one external-actor flow, including interruption and app/chat switching with the same state and no duplicate work. |
| A4 · Review | Independent review of the exact release, finding-level GPT adjudication and owner acceptance. |
| A5 · Rebind | Inventory active consumers and move/repoint project-owned state before archiving old framework trees; verify actual consumer reads. |
| A6 · Activate | Matched Bootstrap, log, state and release manifest; revoke obsolete writers/aliases; cold-start readback and cutover rollback. |
| A7 · Archive / resume | Index preserved history, verify links and identities, then resume the existing product gate without rebuilding accepted work. |
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.
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.
Selected when GPT can safely access, build, test, govern source/Git, package, and control the contained application directly with equal or lower risk.
DEFINED PATH · INVOCATION READINESS REQUIRED
Selected when bounded human/native action or specialist execution is genuinely required, while persistent orchestration would add more overhead than value.
Selected when multi-stage coordination, persistent state/routing, multiple services or specialists, retries, and observability create enough value to justify orchestration overhead.
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 RELEASEBoundaries, interfaces, durable state, configuration/source separation, correlation/event identity, unit + contract tests.
Real provider/API/DB contracts, secrets, retries, fallback, telemetry, health, concurrency/idempotence, recovery.
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.
The readiness packet eliminates predictable mid-wave failures and makes environment/tool access a first-class engineering dependency.
Every required access is resolved as actor + resource + operation + auth route + proof + timestamp + staleness + fallback + human-only approval.
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 requiredV6 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.
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.
Persistent governed execution of bounded implementation work packages.
Maintain source-before-memory framework readiness from the canonical Bootstrap chain while preserving scheduler, tree, provider-currentness, environment-preflight and anti-drift behavior.
VPL/VPL Build Framework/V3/modules/Bootstrap source, BOOTSTRAP_TREE_MANIFEST.md, shorthand registry, scheduler state, project/source locator and runtime health.Independently review, test and validate any assigned VPL artifact with requirement provenance, evidence coverage and strict PASS discipline.
Route a frozen QA-approved candidate and its evidence to a separately governed external reviewer when an additional independent review layer is required.
Converge an approved candidate into an immutable release identity, enforce final freshness/rollback/evidence gates, package exact bytes and issue bounded deploy authorization.
Govern application schema, migration and data-path work with real-contract verification, idempotence, concurrency evidence and rollback proof.
Provision and operationally maintain approved Hostinger MySQL resources without taking ownership of application migration/schema authority.
Deploy one explicitly approved file to one approved Hostinger target with exact-path mapping, immutable deployment evidence and HTTPS verification.
--dest root or explicit subdirectory; secure SFTP references; overwrite authorization when required.--dest root always maps to public_html/<basename>; local parent folders never become remote folders. No whole-site deploy or unrelated Hostinger changes.Package, validate and persist accepted and negative evidence/state without using the owner as a courier, while maintaining durable project state and correlation history.
Restore exact Hostinger file state using immutable Deploy artifacts, exact recorded remote paths and independently auditable recovery receipts.
before/ or payload/ archive; exact remote path; current remote state.before/ reverses a deployment; payload/ recreates one. New-file reversal can delete only the exact recorded file. Database rollback is separate.Provide low-noise human-bound exception notifications, configured milestone delivery and on-demand status with durable cursor semantics.
Generate high-quality brand/domain variants, check real availability through approved providers, score/rank candidates and prepare a registration handoff without purchasing by default.
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.
America/New_York schedule or explicit replay of a daily ingestion window.VPL_Daily_AI_Recap_YYYY-MM-DD.html, Trello handoff JSON, email delivery status, exact Gmail archive receipt and durable ingestion state.Validate the seams between agents so individually correct agents also remain contract-compatible as one end-to-end build system.
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 channelOwner-paced and delegated work share the same state machine and evidence gates.
Routine transitions can proceed within existing scope and cadence. Material scope, architecture and release decisions retain the required owner authority.
App, WORK and authenticated Telegram requests use the same authorization, current-state and idempotency checks. A message cannot bypass a gate.
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.
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 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.
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 pivotTwo 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.
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.
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: RELEASEV6 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.
Bounded product work under project acceptance, readiness, QA, review and banking.
Lock accepted baseline, isolate one requested change, touch the narrowest selector/object, render QA, regression check, overwrite same destination only after PASS.
Read entire artifact, baseline every approved section/style/claim/link, preserve first, make smallest bounded change, run preservation audit. No opportunistic cleanup or compression.
LOCK BASELINE
→ isolate requested change
→ touch narrowest selector/object
→ render / test
→ compare before/after
→ regression check
→ overwrite authoritative destination
→ evidence recordREAD 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 PASSCompare the candidate against both the protected baseline and the last accepted checkpoint; retain application, data, configuration and environment scope.
Requirement → exact source → test → evidence → finding → acceptance. Source fixtures prove only their exercised behavior; early owner UAT and real failure paths remain required.
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.
Sixteen V6 runtime acceptance families remain required. Architecture FINAL is not runtime PASS; missing evidence remains open rather than inferred.
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.
Structured JSON evidence validation in the recorded Action 3 environment. Schema validity is a bounded evidence check, not proof of complete product behavior.
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.
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.
Unit, contract, schema/idempotence, secret guards, lint/static checks, acceptance/regression and repeatable raw outputs.
Provider HTTP behavior, DB persistence/migrations, filesystem paths, concurrency primitives, queue/cron where relevant, deployment/runtime health and recovery.
Cold rehydrate, interrupted execution, stale lock/lease, idempotent retry, failed delivery, rollback/LKG, post-recovery health and incident evidence.
PRODUCT/SOURCE DEFECT
TEST/EVIDENCE DEFECT
PREPARATION DEFECT
PLATFORM LIMITATION
HUMAN-BOUND BLOCKERV6 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.
Hostinger is VPL's current production environment. Browser navigation is not a deployment protocol.
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.
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.
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.
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.
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 / recoverFreezes version/package, hashes, changelog and release manifest after QA/review/adjudication.
Owns schema/migration/data-path proof, idempotence and rollback when a release changes persistent data.
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.
Owner view, GPT view and continuation instructions derive from the same authoritative project-state revision.
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.
Retain locked baseline, last accepted checkpoint, current candidate, Recovery Anchor, original findings and negative returns. Distinguish source, CI, independent review and runtime evidence.
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 schedule | Status | Remaining proof |
|---|---|---|
| 1 · Persistence / runtime proof | CURRENT · PAUSED | Locked requirements; protected custody, actual host/runtime, delivered-context proof and WORK continuity remain unqualified. |
| 2 · Draft-only email / dual output | WAITING | Approved read scope, once-generated output, private Git and Drive saves with exact readbacks; no send or mailbox mutation. |
| 3 · Integrations / routing / catalog | WAITING | Exact model/dispatcher identity, current catalog and actor-specific capability evidence. |
| 4 · Product UAT | WAITING | Real owner workflows, failure/recovery, responsive/accessibility checks on the exact runnable candidate. |
| 5 · Final regression / evidence closure | WAITING | Both protected baseline and last accepted checkpoint; all required cases, findings and independent evidence reconciled. |
| 6 · Packaging / installation / rollback | WAITING | Clean install, cache/version behavior, migration gates and proven environment recovery. |
| 7 · Production release | WAITING | Owner-approved exact source, qualified deployment route and authenticated live verification. |
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.
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.
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)Problem → constraint → authorized wave → acceptance gate → observed result. Every strong claim points to the chain.
Persist orchestrator, automation, executor, reviewer, model/provider route, retries, gate outcomes, adjudication, bank/release and correlation IDs.
Persist material overrides, vetoes, constraints, commercial assumptions, destructive approvals and post-failure strategy changes—with prior agent proposal retained.
/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.mdPREVIOUS 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.
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.
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.
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.
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.
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 CLOSEDelivery 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.
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.
The two scores answer related questions under different instruments. They must not be blended, averaged together or represented as a percentile.
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.
| Dimension | Scale / weight |
|---|---|
| 1. AI / System Architecture | 0–100; equal 1/10 weight |
| 2. Problem Decomposition | 0–100; equal 1/10 weight |
| 3. Multi-Model Orchestration | 0–100; equal 1/10 weight |
| 4. Product / System Integration | 0–100; equal 1/10 weight |
| 5. API / Data / Tool Integration | 0–100; equal 1/10 weight |
| 6. Workflow & State Architecture | 0–100; equal 1/10 weight |
| 7. Governance & Change Control | 0–100; equal 1/10 weight |
| 8. QA / Debugging / Recovery | 0–100; equal 1/10 weight |
| 9. Operational Problem Translation | 0–100; equal 1/10 weight |
| 10. Individual AI Leverage | 0–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.
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.
| Dimension | Maximum points |
|---|---|
| A. Problem Decomposition & Operational Translation | 15 |
| B. AI / System Architecture | 15 |
| C. Human Architectural Judgment & Control | 15 |
| D. AI Agent Orchestration & Leverage | 12 |
| E. Product / System Integration | 10 |
| F. Workflow, State & Recovery Architecture | 10 |
| G. QA / Validation / Debugging Architecture | 10 |
| H. Governance & Change Control | 8 |
| I. Scope Expansion via AI | 5 |
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.
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.
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
15,710 bytes · SHA-256 81a0620364bae8771314b4e8a21010735c9db39a86298f363934b3194305420e
#!/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())
7,827 bytes · SHA-256 b60c542bc0927cec689d347f0f3fa6042953af85dfca4bebeb0970d2d3dbfe8f
#!/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())
31,585 bytes · SHA-256 442d271ee56dade4fe6c4f7e7a002363a0471b1b5bc20b583d9b16d927280547
#!/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())
14,677 bytes · SHA-256 92d436e1ebb17411186d764d81d6883daa35e455264b6096553641c39d45b861
#!/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()
14,311 bytes · SHA-256 effd3dc40d78da47455f65daee188d4c0c45d752f7f8cbc2a08a79db7e33c304
--- 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()
16,536 bytes · SHA-256 8fd6fbe4d62dae365051ecabbabcfafc03508a93ec584d47bf790bb7d5fcec3f
#!/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.
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.
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.
| Evidence | Recorded result | Limit |
|---|---|---|
| HF5.1 candidate | f360929bd7cd2abe2b08b8cde0673586c462a5b9 | Current source candidate, not an installed release. |
| Recorded CI | 24 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 review | Claude R53: PASS_WITH_LIMITATIONS; GPT R54 accepted the source checkpoint. | Independent PHP execution was not performed; production installation was not certified. |
| Findings and regression | 38 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 qualification | R57 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 stage | Status | Exit evidence |
|---|---|---|
| 1 · Persistence / runtime proof | CURRENT · PAUSED | Locked requirements; protected custody, actual host/runtime, delivered-context proof and WORK continuity remain unqualified. |
| 2 · Draft-only email / dual output | WAITING | Approved read scope, once-generated output, private Git and Drive saves with exact readbacks; no send or mailbox mutation. |
| 3 · Integrations / routing / catalog | WAITING | Exact model/dispatcher identity, current catalog and actor-specific capability evidence. |
| 4 · Product UAT | WAITING | Real owner workflows, failure/recovery, responsive/accessibility checks on the exact runnable candidate. |
| 5 · Final regression / evidence closure | WAITING | Both protected baseline and last accepted checkpoint; all required cases, findings and independent evidence reconciled. |
| 6 · Packaging / installation / rollback | WAITING | Clean install, cache/version behavior, migration gates and proven environment recovery. |
| 7 · Production release | WAITING | Owner-approved exact source, qualified deployment route and authenticated live verification. |
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.
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.
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.
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.
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.
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.
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.
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.
Provider artwork and catalog references are retained as source-configured routing context. Catalog presence is not proof of a live, authenticated model execution.
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.
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.
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.
/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/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.
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.
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.
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.
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.
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.
Reports, Diagnostics, Help, Settings, history and media remain inside the same branded navigation shell. Secondary utilities should not feel like separate applications.
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.
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.
Deployment and rollback use immutable directory/tree replacement. Overlay rollback is prohibited because release-only files can survive as orphans.
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.
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 gate | Required evidence | Failure prevented |
|---|---|---|
| Feature Freeze Gate | Feature-complete declaration + deferred enhancement register | Scope growth during stabilization |
| Authority Freshness Gate | Current locked spec read + superseded-rule scan | Instruction drift |
| Provider Capability Gate | Config + inventory + pricing/health + model mapping | Orphaned integrations |
| UX Consistency Gate | Persistent shell, global controls, responsive parity | Fragmented product experience |
| Package Correspondence Gate | Git blob/object evidence + exact package hash reconciliation | Checkout/line-ending/source drift |
| Rollback Gate | Immutable pre-deploy tree + atomic swap instructions | Orphaned release files |
| Independent Review Chain | Claude engineering review → Cursor implementation → Claude verification → Gemini → DeepSeek | Self-certification bias |
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.
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.
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/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.
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.
| Package | Purpose | Included in ZIP | Status 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 |
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.
The V4 FINAL revision turns preservation, feedback and progression into explicit operating contracts, while retaining the historical architecture and evidence below.
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.
Manual, Light Build and MySmartRouter are peer options. Select by actual capability, risk and coordination value; escalate only the component that needs it.
Compare each candidate with both the last accepted checkpoint and the locked baseline. Keep requirements, visual behavior, source identity and untested cases visible.
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.
| Path | Choose from evidence | Operating contract |
|---|---|---|
| Manual | A 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 Build | A 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. |
| MySmartRouter | Multiple 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.
| Gate | Required evidence | Progression boundary |
|---|---|---|
| G0 · Re-anchor | Current 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 change | Requirement 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 candidate | Exact 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 challenge | Last 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 bank | Source-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 candidate | Cumulative 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 production | One 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. |
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.
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.
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.
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 family | Retained and expanded coverage |
|---|---|
| Bootstrap & governance | Bootstrap and executive communication; project Bootstrap; executor environment/access; executor routing; autonomous-agent control; GitHub governance. |
| Assurance & operations | Evidence and banking; health and monitoring; rollback/recovery; secrets/credentials; technical deep-dive recalibration. |
| Delivery & communication | Hostinger deployment; case-study publishing; static-asset publishing; guided support; mobile operations; notifications; Telegram control; remote access/Tailscale. |
| Preserved candidates | Delicate Work and Design Precise Change remain explicitly considered candidates. Existing preservation obligations continue; a candidate label is not silent activation. |
| V4 commercial contracts | aMember membership; Stripe payments; GetResponse lifecycle. These are first-class contracts with product-specific installation, acceptance and activation gates. |
| Proposed extension | Support-email automation is retained as a proposed, separately authorized capability, with customer isolation, draft-first scope, loop prevention and escalation. |
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.
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.
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 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.
Reusable account, membership and protected-access integration. V4 defines entitlement checks, payment-to-membership mapping, safe return-to-app behavior and recovery tests.
Payment and checkout integration with verified server-side outcomes, existing product/price reuse, authenticated events and duplicate-safe fulfillment.
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 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.
Revision VPL-WEB-V6-20261003-R01. Current narrative reconciled to the final V6 architecture and the reviewed MySmartRouter pause.
| Update | Result |
|---|---|
| Architecture / process | One manifest-driven framework; GPT WORK participation, coordination, cadence and execution qualification. |
| Persistence / recovery | Full refresh, per-turn binding, protected broker, immutable state, reservations and unknown-outcome hold. |
| Product checkpoint | R57 pause; HF5.1 source/fixture evidence; full seven-stage schedule and remaining regression. |
| Historical records | Original assessment scores, source evidence, dates, founder/technology content and visual assets retained. No new score, runtime acceptance, framework activation or deployment is claimed. |
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 / version | Development and evidence | Cumulative workstream estimate |
|---|---|---|
| September 6 · V3 assessment | Historical 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 foundation | Bootstrap-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 R69 | Source/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 repair | Preserve 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 replay | Action 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 assessments | Gemini/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. |
| Historical reference | Retained contribution |
|---|---|
| V4.0 RC1 · Historical audit candidate | GPT 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 predecessor | Balanced 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-13 | Bootstrap-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-07 | Initial consolidated launch reference. Corrected the major Cursor Automation/Hostinger plane distinction but remained too abbreviated for enterprise product handoff. |
| Revision 0.3 · 2026-09-07 | Enterprise 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. |
| Revision | Change in this public reference | Authority / acceptance boundary |
|---|---|---|
| September 28 · R03 | Reconciled V4 foundation, V5 reviewed evidence, technology roles and current dual assessments. | Website reference update; not a product release or authority promotion. |
| September 28 · R04 | Dedicated 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).
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.
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.
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.
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.
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.
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.
| Product | Homepage badge | Live destination evidence |
|---|---|---|
| MySmartRouter | in dev. B026 | Portfolio-listed destination |
| GuitarFakeBook | in production | Portfolio-listed destination |
| MyFlightWatcher | in production | Portfolio-listed destination |
| MyJamTracks | in production | Portfolio-listed destination |
| MyOfferCountdown | in production | Portfolio-listed destination |
| MyCrockPot | in production | Portfolio-listed destination |
| TriadSoloLab | in production | Portfolio-listed destination |
| MyVoiceVibe | in production | Portfolio-listed destination |
| InFlow | in production | No destination supplied / not independently verified |
| TrueReply | in production | No destination supplied / not independently verified |
| ResumeRocketPro | in dev. B012 | No destination supplied / not independently verified |
| RocketFill | in dev. B012 | No destination supplied / not independently verified |
| MyScreenScraper | in dev. B2.0 | No destination supplied / not independently verified |
| MyRocketStudio | in dev. 09.2 | No destination supplied / not independently verified |
| KDP AI Secrets | in dev. 0.01 | No destination supplied / not independently verified |
| MyIdeaMax | in dev. 04.9 | No destination supplied / not independently verified |
| MyVibeSuite | in dev. B11 | No destination supplied / not independently verified |
| Stream | Recent grounded anchor | Implications / what still needs verification |
|---|---|---|
| ResumeRocketPro / RocketFill | V7.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. |
| MySmartRouter | V7.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. |
| MyTurboGPT | R21 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. |
| MyIdeaMax | UX 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. |
| MyVibeSuite | V2.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. |
| MyScreenScraper | V2.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. |
| MyCrockPot | New 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 website | Optimized 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. |
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.
| Done | Current | Required 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.