vaibify 0.2.2__tar.gz → 0.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vaibify-0.2.3/.claude/skills/reproducibility-lane/SKILL.md +1104 -0
- vaibify-0.2.3/.github/workflows/falsification.yml +413 -0
- vaibify-0.2.3/PKG-INFO +139 -0
- vaibify-0.2.3/README.md +65 -0
- vaibify-0.2.3/docs/agentCouncil.md +422 -0
- vaibify-0.2.3/docs/aiUse.md +251 -0
- vaibify-0.2.3/docs/architecture.md +4295 -0
- vaibify-0.2.3/docs/cli.md +675 -0
- vaibify-0.2.3/docs/developers.md +377 -0
- vaibify-0.2.3/docs/environmentsAndProjects.md +862 -0
- vaibify-0.2.3/docs/externalResources.md +550 -0
- vaibify-0.2.3/docs/forAgents.md +338 -0
- vaibify-0.2.3/docs/install.md +486 -0
- vaibify-0.2.3/docs/lessons.md +720 -0
- vaibify-0.2.3/docs/proofLadder.md +423 -0
- vaibify-0.2.3/docs/quickStart.md +219 -0
- vaibify-0.2.3/docs/reproducibility.md +528 -0
- vaibify-0.2.3/docs/security.md +547 -0
- vaibify-0.2.3/docs/systemPrompt.md +32 -0
- vaibify-0.2.3/tests/assessedRerunLaneHarness.py +120 -0
- vaibify-0.2.3/tests/browser/conftest.py +772 -0
- vaibify-0.2.3/tests/browser/fakeDockerAdapter.py +975 -0
- vaibify-0.2.3/tests/browser/testAProjectIsRenamedFromItsCard.py +128 -0
- vaibify-0.2.3/tests/browser/testAnEnvironmentIsRenamedFromItsTile.py +142 -0
- vaibify-0.2.3/tests/browser/testProjectBlockShowsItCanBeOpened.py +95 -0
- vaibify-0.2.3/tests/browser/testQuitVaibify.py +128 -0
- vaibify-0.2.3/tests/browser/testRemoteBindingDialogIsTheServers.py +411 -0
- vaibify-0.2.3/tests/browser/testStepReorderUsesAPrivateDragType.py +119 -0
- vaibify-0.2.3/tests/browser/testTheImageTrustModalAsksBeforeAnUnbuiltImageRuns.py +334 -0
- vaibify-0.2.3/tests/browser/testTheLaneNeverResolvesTheResearchersSecretRoot.py +37 -0
- vaibify-0.2.3/tests/browser/testTheLevelColorHasOneHome.py +324 -0
- vaibify-0.2.3/tests/browser/testTheLevelMarksRenderTheLevelsHue.py +170 -0
- vaibify-0.2.3/tests/browser/testTheLevelTwoRemoteRowsRenderTheirState.py +277 -0
- vaibify-0.2.3/tests/browser/testThePromptRecordViewerShowsAGeminiRewind.py +131 -0
- vaibify-0.2.3/tests/browser/testThePromptRecordViewerShowsTheRecord.py +137 -0
- vaibify-0.2.3/tests/browser/testTheX11OptInIsOffByDefaultAndExcludesIsolation.py +183 -0
- vaibify-0.2.3/tests/browser/testTheZenodoRowSaysWhichReceiptItCarries.py +139 -0
- vaibify-0.2.3/tests/browser/testTheZenodoTokenBannerIsTheServers.py +220 -0
- vaibify-0.2.3/tests/browser/testVisibleTextIsLegible.py +241 -0
- vaibify-0.2.3/tests/conftest.py +838 -0
- vaibify-0.2.3/tests/falsificationRegistry.py +39884 -0
- vaibify-0.2.3/tests/guardCoverageSeed.json +233 -0
- vaibify-0.2.3/tests/homeVisibleTempRoot.py +46 -0
- vaibify-0.2.3/tests/hostCapabilityInventory.json +192 -0
- vaibify-0.2.3/tests/lifecycleLockHolder.py +49 -0
- vaibify-0.2.3/tests/mutationInventory.json +709 -0
- vaibify-0.2.3/tests/quitChildHub.py +90 -0
- vaibify-0.2.3/tests/remoteAccessServer.py +148 -0
- vaibify-0.2.3/tests/remoteBindingFixtures.py +74 -0
- vaibify-0.2.3/tests/styleInventory.json +338 -0
- vaibify-0.2.3/tests/syncStatusFixtures.py +190 -0
- vaibify-0.2.3/tests/testAdvancingALevelNeverLowersOne.py +865 -0
- vaibify-0.2.3/tests/testAgentLaneEnforcement.py +821 -0
- vaibify-0.2.3/tests/testAiDeclarationFileLive.py +264 -0
- vaibify-0.2.3/tests/testAllowHostRoute.py +158 -0
- vaibify-0.2.3/tests/testArchitecturalInvariants.py +9193 -0
- vaibify-0.2.3/tests/testArchiveReadNamesAMissingMount.py +315 -0
- vaibify-0.2.3/tests/testArchiveReadNamesAMissingMountLive.py +145 -0
- vaibify-0.2.3/tests/testAssessedRerunLane.py +562 -0
- vaibify-0.2.3/tests/testAutoArchive.py +401 -0
- vaibify-0.2.3/tests/testBasenameCollisionBlocksLevelTwo.py +103 -0
- vaibify-0.2.3/tests/testBatchedSmallFileRead.py +239 -0
- vaibify-0.2.3/tests/testBindMountDenyListReadsTheFilesystem.py +134 -0
- vaibify-0.2.3/tests/testBindMountReadOnlyDefault.py +339 -0
- vaibify-0.2.3/tests/testBindMountValidator.py +744 -0
- vaibify-0.2.3/tests/testBindingConfirmation.py +407 -0
- vaibify-0.2.3/tests/testBlindSpotDispositions.py +595 -0
- vaibify-0.2.3/tests/testBlockersExplainEveryRefusal.py +145 -0
- vaibify-0.2.3/tests/testBroadHandlersPassControlPlaneRefusals.py +468 -0
- vaibify-0.2.3/tests/testBrowserLaneContract.py +192 -0
- vaibify-0.2.3/tests/testCapabilityAuthorities.py +1162 -0
- vaibify-0.2.3/tests/testCarrierMigratedRoutes.py +8449 -0
- vaibify-0.2.3/tests/testClaimSurvivesTheDisclosure.py +276 -0
- vaibify-0.2.3/tests/testCliMessagesPointTheRightWay.py +159 -0
- vaibify-0.2.3/tests/testCommandRevoke.py +208 -0
- vaibify-0.2.3/tests/testConcurrentProjectRuns.py +408 -0
- vaibify-0.2.3/tests/testConfinedContainerWrite.py +449 -0
- vaibify-0.2.3/tests/testConfinedTreeWriteLive.py +432 -0
- vaibify-0.2.3/tests/testConfinedWriteLive.py +174 -0
- vaibify-0.2.3/tests/testConfinedWriteParity.py +143 -0
- vaibify-0.2.3/tests/testConftestManagerVersioning.py +627 -0
- vaibify-0.2.3/tests/testContainerGit.py +357 -0
- vaibify-0.2.3/tests/testContainerManager.py +731 -0
- vaibify-0.2.3/tests/testContainerManagerFull.py +457 -0
- vaibify-0.2.3/tests/testConversionLifecycle.py +743 -0
- vaibify-0.2.3/tests/testCopyDirectoryLive.py +101 -0
- vaibify-0.2.3/tests/testCouncilCampaignIdentity.py +249 -0
- vaibify-0.2.3/tests/testCouncilControllerIntegration.py +569 -0
- vaibify-0.2.3/tests/testCouncilControllerLive.py +212 -0
- vaibify-0.2.3/tests/testCouncilCredentialGate.py +301 -0
- vaibify-0.2.3/tests/testCouncilCredentialRoutes.py +326 -0
- vaibify-0.2.3/tests/testCouncilReadiness.py +511 -0
- vaibify-0.2.3/tests/testCouncilRoutes.py +2251 -0
- vaibify-0.2.3/tests/testCoverageBoost.py +1217 -0
- vaibify-0.2.3/tests/testCoverageCliBuildStartReproduce.py +571 -0
- vaibify-0.2.3/tests/testCoverageCoreTerminalSession.py +331 -0
- vaibify-0.2.3/tests/testCoverageCouncilGatewayLifecycle.py +1887 -0
- vaibify-0.2.3/tests/testCoverageDockerConnectionTransfers.py +817 -0
- vaibify-0.2.3/tests/testCoverageDockerConnectionTypedReads.py +839 -0
- vaibify-0.2.3/tests/testCoverageGaps.py +1768 -0
- vaibify-0.2.3/tests/testCoverageReproducibilityOverleafSync.py +324 -0
- vaibify-0.2.3/tests/testCoverageReproducibilityScheduledReverify.py +434 -0
- vaibify-0.2.3/tests/testCoverageRoutesAEnvironmentArchive.py +878 -0
- vaibify-0.2.3/tests/testCoverageRoutesAPromotionRecovery.py +586 -0
- vaibify-0.2.3/tests/testCoverageRoutesBAppFactory.py +360 -0
- vaibify-0.2.3/tests/testCoverageRoutesBReproducibility.py +877 -0
- vaibify-0.2.3/tests/testCoverageRoutesBSync.py +701 -0
- vaibify-0.2.3/tests/testCredentialIsolation.py +214 -0
- vaibify-0.2.3/tests/testDeleteEnvironmentRoute.py +361 -0
- vaibify-0.2.3/tests/testDependencyPinning.py +546 -0
- vaibify-0.2.3/tests/testDependencyScan.py +219 -0
- vaibify-0.2.3/tests/testDependencyScanRoutes.py +243 -0
- vaibify-0.2.3/tests/testDockerConnection.py +1248 -0
- vaibify-0.2.3/tests/testDraftRoutes.py +473 -0
- vaibify-0.2.3/tests/testEgressProxy.py +248 -0
- vaibify-0.2.3/tests/testEnvelopeSnapshot.py +276 -0
- vaibify-0.2.3/tests/testEnvironmentArchivePromotion.py +275 -0
- vaibify-0.2.3/tests/testEnvironmentArchiveRoutes.py +393 -0
- vaibify-0.2.3/tests/testEnvironmentInfoRoute.py +149 -0
- vaibify-0.2.3/tests/testEnvironmentRename.py +748 -0
- vaibify-0.2.3/tests/testEnvironmentRenameLive.py +195 -0
- vaibify-0.2.3/tests/testEveryVerifyLaneSettlesItsBadge.py +231 -0
- vaibify-0.2.3/tests/testExecArgumentBudget.py +213 -0
- vaibify-0.2.3/tests/testExecLane.py +516 -0
- vaibify-0.2.3/tests/testExecLaneInvariant.py +264 -0
- vaibify-0.2.3/tests/testExecLaneLive.py +283 -0
- vaibify-0.2.3/tests/testExitedContainerEvidence.py +197 -0
- vaibify-0.2.3/tests/testFalsificationRoutesMutationCoverage.py +160 -0
- vaibify-0.2.3/tests/testFileEdgesAreSafe.py +91 -0
- vaibify-0.2.3/tests/testGithubBadgeMeansAgreementNotCleanliness.py +227 -0
- vaibify-0.2.3/tests/testGuiSignalsItsCategory.py +80 -0
- vaibify-0.2.3/tests/testHostCancel.py +504 -0
- vaibify-0.2.3/tests/testHostConfinedWrite.py +164 -0
- vaibify-0.2.3/tests/testHostCpuAccounting.py +122 -0
- vaibify-0.2.3/tests/testHostDeterminismEnvironment.py +232 -0
- vaibify-0.2.3/tests/testHostGitAndReposPanel.py +744 -0
- vaibify-0.2.3/tests/testHostModeContainerOnlyRefusals.py +469 -0
- vaibify-0.2.3/tests/testHostModeHonestyGates.py +364 -0
- vaibify-0.2.3/tests/testHostPathGuardCorpus.py +355 -0
- vaibify-0.2.3/tests/testHostQuarantineSurface.py +289 -0
- vaibify-0.2.3/tests/testHubQuit.py +489 -0
- vaibify-0.2.3/tests/testHubQuitChildren.py +237 -0
- vaibify-0.2.3/tests/testImageTrustGuardsTheLaunch.py +324 -0
- vaibify-0.2.3/tests/testImageTrustLive.py +173 -0
- vaibify-0.2.3/tests/testIsolationGating.py +472 -0
- vaibify-0.2.3/tests/testL3Attestation.py +278 -0
- vaibify-0.2.3/tests/testLevelGateL2Arxiv.py +533 -0
- vaibify-0.2.3/tests/testLevelGateL3EndToEnd.py +323 -0
- vaibify-0.2.3/tests/testLevelGates.py +495 -0
- vaibify-0.2.3/tests/testLevelGatesMutationCoverage.py +381 -0
- vaibify-0.2.3/tests/testLevelGatesRefusalPropagation.py +312 -0
- vaibify-0.2.3/tests/testLevelTwoAsksWhatAReaderIsServed.py +579 -0
- vaibify-0.2.3/tests/testLevelTwoGapsAgreeWithTheGate.py +78 -0
- vaibify-0.2.3/tests/testLifecycleLock.py +573 -0
- vaibify-0.2.3/tests/testLifecycleRouteAuthority.py +454 -0
- vaibify-0.2.3/tests/testLockInputFallsBackToVaibifyRequirements.py +200 -0
- vaibify-0.2.3/tests/testLockedJsonRecord.py +211 -0
- vaibify-0.2.3/tests/testLoggingHygiene.py +131 -0
- vaibify-0.2.3/tests/testMissingFileBadges.py +199 -0
- vaibify-0.2.3/tests/testMutationBoundary.py +422 -0
- vaibify-0.2.3/tests/testMutationInventory.py +2187 -0
- vaibify-0.2.3/tests/testNarrowLlmFallback.py +314 -0
- vaibify-0.2.3/tests/testNetworkMode.py +360 -0
- vaibify-0.2.3/tests/testOverleafPullLive.py +129 -0
- vaibify-0.2.3/tests/testOverleafSync.py +296 -0
- vaibify-0.2.3/tests/testOverleafSyncExtended.py +956 -0
- vaibify-0.2.3/tests/testOverleafTokenStaysOffTheCommandLine.py +248 -0
- vaibify-0.2.3/tests/testPaletteContrast.py +199 -0
- vaibify-0.2.3/tests/testPerTestMarkerEndToEnd.py +304 -0
- vaibify-0.2.3/tests/testPipelineRoutesCoverage.py +2375 -0
- vaibify-0.2.3/tests/testPipelineRunnerBranches.py +479 -0
- vaibify-0.2.3/tests/testPipelineRunnerFull.py +1164 -0
- vaibify-0.2.3/tests/testPipelineRunnerHeartbeat.py +187 -0
- vaibify-0.2.3/tests/testPipelineRunnerMutationCoverage.py +266 -0
- vaibify-0.2.3/tests/testPipelineServerFull.py +604 -0
- vaibify-0.2.3/tests/testPipelineServerRoutes.py +1243 -0
- vaibify-0.2.3/tests/testPipelineStateHostIncidents.py +275 -0
- vaibify-0.2.3/tests/testPipelineStateLiveness.py +250 -0
- vaibify-0.2.3/tests/testPipelineStateMock.py +178 -0
- vaibify-0.2.3/tests/testPipelineStateWriter.py +391 -0
- vaibify-0.2.3/tests/testPreflightNamesTheCauseNotTheCascade.py +145 -0
- vaibify-0.2.3/tests/testPreflightValidation.py +303 -0
- vaibify-0.2.3/tests/testProjectEgress.py +218 -0
- vaibify-0.2.3/tests/testProjectEgressLive.py +201 -0
- vaibify-0.2.3/tests/testProjectHeaderNeverOutranksItsRows.py +454 -0
- vaibify-0.2.3/tests/testProjectRename.py +399 -0
- vaibify-0.2.3/tests/testProjectRepoDetection.py +602 -0
- vaibify-0.2.3/tests/testPromoteToHostProjectRoute.py +485 -0
- vaibify-0.2.3/tests/testPromptRecordManager.py +734 -0
- vaibify-0.2.3/tests/testProofCatalogAgrees.py +561 -0
- vaibify-0.2.3/tests/testProofLadderUncoveredLines.py +937 -0
- vaibify-0.2.3/tests/testProofObservation.py +415 -0
- vaibify-0.2.3/tests/testProofReceiptCheckpoint.py +240 -0
- vaibify-0.2.3/tests/testProofReceiptCompletion.py +924 -0
- vaibify-0.2.3/tests/testProofReceiptDocument.py +445 -0
- vaibify-0.2.3/tests/testProofReceiptWrite.py +294 -0
- vaibify-0.2.3/tests/testPublicationScopeSeparatesTheLevels.py +897 -0
- vaibify-0.2.3/tests/testPullFileConfinedLive.py +85 -0
- vaibify-0.2.3/tests/testPullManuscriptRoute.py +183 -0
- vaibify-0.2.3/tests/testQuickStartReaderJourneyLive.py +188 -0
- vaibify-0.2.3/tests/testQuitGateCoverage.py +107 -0
- vaibify-0.2.3/tests/testQuitRealProcess.py +191 -0
- vaibify-0.2.3/tests/testReaderAccessIsObservedAnonymously.py +656 -0
- vaibify-0.2.3/tests/testRegistryManager.py +852 -0
- vaibify-0.2.3/tests/testRegistryRoutes.py +1039 -0
- vaibify-0.2.3/tests/testRemnantRoutes.py +305 -0
- vaibify-0.2.3/tests/testRemoteBadgeRefresh.py +709 -0
- vaibify-0.2.3/tests/testRemoteBindings.py +758 -0
- vaibify-0.2.3/tests/testRemoteDataMarker.py +437 -0
- vaibify-0.2.3/tests/testRemoteDataProvenance.py +157 -0
- vaibify-0.2.3/tests/testRemoteHelper.py +225 -0
- vaibify-0.2.3/tests/testRemotesMigration.py +332 -0
- vaibify-0.2.3/tests/testRepoFiles.py +533 -0
- vaibify-0.2.3/tests/testReproducedManifest.py +688 -0
- vaibify-0.2.3/tests/testReproductionReport.py +179 -0
- vaibify-0.2.3/tests/testRerunRegeneratesWhatItGrades.py +678 -0
- vaibify-0.2.3/tests/testRerunVerifiesWhatItRan.py +1042 -0
- vaibify-0.2.3/tests/testResearcherActions.py +291 -0
- vaibify-0.2.3/tests/testResumableDownload.py +1001 -0
- vaibify-0.2.3/tests/testRuntimeSetupFacts.py +328 -0
- vaibify-0.2.3/tests/testScheduledReverify.py +1046 -0
- vaibify-0.2.3/tests/testSecretFilesStayOutOfTheResearchersHome.py +186 -0
- vaibify-0.2.3/tests/testSeededFolderRepositoryList.py +370 -0
- vaibify-0.2.3/tests/testSessionRegistry.py +373 -0
- vaibify-0.2.3/tests/testSetupWizardKeepsWhatItDoesNotShow.py +319 -0
- vaibify-0.2.3/tests/testShadowNamesTheImageGap.py +119 -0
- vaibify-0.2.3/tests/testShadowRerun.py +834 -0
- vaibify-0.2.3/tests/testSmallHardeningItems.py +89 -0
- vaibify-0.2.3/tests/testStartReservation.py +1048 -0
- vaibify-0.2.3/tests/testStateStoresStayInTheTestHome.py +219 -0
- vaibify-0.2.3/tests/testStepLevelStates.py +1135 -0
- vaibify-0.2.3/tests/testStepRoutes.py +604 -0
- vaibify-0.2.3/tests/testStopDoesNotNeedTheSession.py +147 -0
- vaibify-0.2.3/tests/testStyleInvariants.py +1596 -0
- vaibify-0.2.3/tests/testSupervisionAnchor.py +219 -0
- vaibify-0.2.3/tests/testSyncDispatcherCoverage.py +571 -0
- vaibify-0.2.3/tests/testSyncDispatcherExtended.py +301 -0
- vaibify-0.2.3/tests/testSyncDispatcherGaps.py +596 -0
- vaibify-0.2.3/tests/testSyncRoutesCoverage.py +3205 -0
- vaibify-0.2.3/tests/testSyncTestGenFull.py +915 -0
- vaibify-0.2.3/tests/testSyncVerifyRoutes.py +441 -0
- vaibify-0.2.3/tests/testTerminalContainment.py +716 -0
- vaibify-0.2.3/tests/testTerminalSessionExtended.py +222 -0
- vaibify-0.2.3/tests/testTestGenerationIntegrity.py +580 -0
- vaibify-0.2.3/tests/testTestGeneratorExtended.py +304 -0
- vaibify-0.2.3/tests/testTheProjectDepositIsAskedWhatItStored.py +234 -0
- vaibify-0.2.3/tests/testToolkitEndToEnd.py +220 -0
- vaibify-0.2.3/tests/testTrackedReposManager.py +702 -0
- vaibify-0.2.3/tests/testTypedReadFailureIsNeverAbsence.py +207 -0
- vaibify-0.2.3/tests/testVaibifyDoProxyTunnel.py +92 -0
- vaibify-0.2.3/tests/testVersionIdentity.py +340 -0
- vaibify-0.2.3/tests/testVolumeCopy.py +343 -0
- vaibify-0.2.3/tests/testVolumeCopyLive.py +142 -0
- vaibify-0.2.3/tests/testWorkflowManager.py +1269 -0
- vaibify-0.2.3/tests/testWorkflowManagerExtended.py +1724 -0
- vaibify-0.2.3/tests/testWorkflowReloadIntegration.py +464 -0
- vaibify-0.2.3/tests/testWorkspaceRootHandshake.py +203 -0
- vaibify-0.2.3/tests/testWorkspaceSeedPaths.py +190 -0
- vaibify-0.2.3/tests/testX11Authority.py +191 -0
- vaibify-0.2.3/tests/testX11AuthorityLive.py +155 -0
- vaibify-0.2.3/tests/testX11Authorizations.py +288 -0
- vaibify-0.2.3/tests/testX11Findings.py +222 -0
- vaibify-0.2.3/tests/testX11Forwarding.py +551 -0
- vaibify-0.2.3/tests/testX11Lifecycle.py +135 -0
- vaibify-0.2.3/tests/testX11OptIn.py +149 -0
- vaibify-0.2.3/tests/testX11Release.py +94 -0
- vaibify-0.2.3/tests/testZenodoEnvelopeArchive.py +604 -0
- vaibify-0.2.3/tests/testZenodoHostArchive.py +279 -0
- vaibify-0.2.3/tests/testZenodoIntegrationGaps.py +537 -0
- vaibify-0.2.3/tests/testZenodoTokenMigration.py +581 -0
- vaibify-0.2.3/tests/testZenodoTokenMigrationLive.py +134 -0
- vaibify-0.2.3/tests/testZenodoTokenRoutes.py +206 -0
- vaibify-0.2.3/tests/testZenodoTokenSlots.py +351 -0
- vaibify-0.2.3/tests/testZenodoVerifyUsesTheRecordedService.py +100 -0
- vaibify-0.2.3/tests/zenodoObservationFixtures.py +53 -0
- vaibify-0.2.3/tests/zenodoTokenFixtures.py +59 -0
- vaibify-0.2.3/tools/generateMutationInventory.py +2472 -0
- vaibify-0.2.3/vaibify/_version.py +24 -0
- vaibify-0.2.3/vaibify/cli/actionCommands.py +582 -0
- vaibify-0.2.3/vaibify/cli/commandBindings.py +138 -0
- vaibify-0.2.3/vaibify/cli/commandBuild.py +1251 -0
- vaibify-0.2.3/vaibify/cli/commandCredential.py +126 -0
- vaibify-0.2.3/vaibify/cli/commandDestroy.py +108 -0
- vaibify-0.2.3/vaibify/cli/commandDoctor.py +716 -0
- vaibify-0.2.3/vaibify/cli/commandInit.py +317 -0
- vaibify-0.2.3/vaibify/cli/commandReconcile.py +505 -0
- vaibify-0.2.3/vaibify/cli/commandRevoke.py +102 -0
- vaibify-0.2.3/vaibify/cli/commandStart.py +705 -0
- vaibify-0.2.3/vaibify/cli/commandTest.py +155 -0
- vaibify-0.2.3/vaibify/cli/configFieldPreflight.py +160 -0
- vaibify-0.2.3/vaibify/cli/doctorMountChecks.py +51 -0
- vaibify-0.2.3/vaibify/cli/doctorNetwork.py +889 -0
- vaibify-0.2.3/vaibify/cli/doctorX11Checks.py +145 -0
- vaibify-0.2.3/vaibify/cli/hubSession.py +758 -0
- vaibify-0.2.3/vaibify/cli/main.py +604 -0
- vaibify-0.2.3/vaibify/cli/packageShadowGuard.py +52 -0
- vaibify-0.2.3/vaibify/cli/serverLaunch.py +325 -0
- vaibify-0.2.3/vaibify/completions/vaibify.bash +213 -0
- vaibify-0.2.3/vaibify/completions/vaibify.fish +104 -0
- vaibify-0.2.3/vaibify/completions/vaibify.zsh +152 -0
- vaibify-0.2.3/vaibify/config/bindMountValidator.py +682 -0
- vaibify-0.2.3/vaibify/config/containerConfig.py +277 -0
- vaibify-0.2.3/vaibify/config/containerLock.py +715 -0
- vaibify-0.2.3/vaibify/config/ephemeralStore.py +146 -0
- vaibify-0.2.3/vaibify/config/imageOrigins.py +213 -0
- vaibify-0.2.3/vaibify/config/keepAliveManager.py +381 -0
- vaibify-0.2.3/vaibify/config/lockedJsonRecord.py +79 -0
- vaibify-0.2.3/vaibify/config/mutationAdmission.py +748 -0
- vaibify-0.2.3/vaibify/config/pendingRenames.py +152 -0
- vaibify-0.2.3/vaibify/config/projectConfig.py +1040 -0
- vaibify-0.2.3/vaibify/config/registryManager.py +939 -0
- vaibify-0.2.3/vaibify/config/remoteBindings.py +599 -0
- vaibify-0.2.3/vaibify/config/sessionRegistry.py +256 -0
- vaibify-0.2.3/vaibify/config/zenodoMigrationJournal.py +246 -0
- vaibify-0.2.3/vaibify/config/zenodoTokenSlots.py +200 -0
- vaibify-0.2.3/vaibify/containerImage/checkIsolation.sh +169 -0
- vaibify-0.2.3/vaibify/containerImage/entrypoint.sh +1819 -0
- vaibify-0.2.3/vaibify/containerImage/skills/proof-ladder/SKILL.md +399 -0
- vaibify-0.2.3/vaibify/containerImage/skills/read-arxiv/SKILL.md +54 -0
- vaibify-0.2.3/vaibify/containerImage/vaibifyDo.py +1118 -0
- vaibify-0.2.3/vaibify/docker/bindMountDrift.py +66 -0
- vaibify-0.2.3/vaibify/docker/containerLifecycleRepair.py +266 -0
- vaibify-0.2.3/vaibify/docker/containerManager.py +1731 -0
- vaibify-0.2.3/vaibify/docker/disposableContainer.py +1085 -0
- vaibify-0.2.3/vaibify/docker/disposableSpecification.py +577 -0
- vaibify-0.2.3/vaibify/docker/dockerConnection.py +4286 -0
- vaibify-0.2.3/vaibify/docker/dockerContext.py +439 -0
- vaibify-0.2.3/vaibify/docker/dockerErrorDiagnosis.py +629 -0
- vaibify-0.2.3/vaibify/docker/egressAllowlist.py +161 -0
- vaibify-0.2.3/vaibify/docker/egressProxy.py +639 -0
- vaibify-0.2.3/vaibify/docker/execLane.py +173 -0
- vaibify-0.2.3/vaibify/docker/pinnedImageAcquisition.py +682 -0
- vaibify-0.2.3/vaibify/docker/projectEgress.py +382 -0
- vaibify-0.2.3/vaibify/docker/volumeCopy.py +335 -0
- vaibify-0.2.3/vaibify/docker/volumeManager.py +167 -0
- vaibify-0.2.3/vaibify/docker/x11Authorizations.py +357 -0
- vaibify-0.2.3/vaibify/docker/x11Forwarding.py +614 -0
- vaibify-0.2.3/vaibify/docs/agentCouncil.md +422 -0
- vaibify-0.2.3/vaibify/docs/environmentsAndProjects.md +862 -0
- vaibify-0.2.3/vaibify/docs/forAgents.md +338 -0
- vaibify-0.2.3/vaibify/docs/proofLadder.md +423 -0
- vaibify-0.2.3/vaibify/docs/reproducibility.md +528 -0
- vaibify-0.2.3/vaibify/gui/AGENTS.md +277 -0
- vaibify-0.2.3/vaibify/gui/actionCatalog.py +1619 -0
- vaibify-0.2.3/vaibify/gui/agentCouncilContext.py +1471 -0
- vaibify-0.2.3/vaibify/gui/agentCouncilDockerGateway.py +1057 -0
- vaibify-0.2.3/vaibify/gui/agentCouncilEgress.py +155 -0
- vaibify-0.2.3/vaibify/gui/agentCouncilRegistry.py +483 -0
- vaibify-0.2.3/vaibify/gui/appFactory.py +804 -0
- vaibify-0.2.3/vaibify/gui/buildRoutes.py +671 -0
- vaibify-0.2.3/vaibify/gui/commitCarrier.py +1359 -0
- vaibify-0.2.3/vaibify/gui/conftestManager.py +1488 -0
- vaibify-0.2.3/vaibify/gui/containerGit.py +763 -0
- vaibify-0.2.3/vaibify/gui/containerOwnership.py +958 -0
- vaibify-0.2.3/vaibify/gui/conversionLifecycle.py +771 -0
- vaibify-0.2.3/vaibify/gui/dataPreview.py +95 -0
- vaibify-0.2.3/vaibify/gui/environmentDeletion.py +224 -0
- vaibify-0.2.3/vaibify/gui/environmentDeletionRoutes.py +161 -0
- vaibify-0.2.3/vaibify/gui/environmentRename.py +739 -0
- vaibify-0.2.3/vaibify/gui/environmentResources.py +64 -0
- vaibify-0.2.3/vaibify/gui/fileStatusManager.py +2694 -0
- vaibify-0.2.3/vaibify/gui/helperPrograms.py +63 -0
- vaibify-0.2.3/vaibify/gui/hostControlChannel.py +1146 -0
- vaibify-0.2.3/vaibify/gui/hubQuit.py +552 -0
- vaibify-0.2.3/vaibify/gui/llmInvoker.py +441 -0
- vaibify-0.2.3/vaibify/gui/pinnedEnvironmentConversion.py +487 -0
- vaibify-0.2.3/vaibify/gui/pipelineRunner.py +1960 -0
- vaibify-0.2.3/vaibify/gui/pipelineServer.py +3820 -0
- vaibify-0.2.3/vaibify/gui/pipelineValidator.py +144 -0
- vaibify-0.2.3/vaibify/gui/projectEgressLifecycle.py +89 -0
- vaibify-0.2.3/vaibify/gui/projectRename.py +494 -0
- vaibify-0.2.3/vaibify/gui/promptRecordManager.py +728 -0
- vaibify-0.2.3/vaibify/gui/registryRoutes.py +2798 -0
- vaibify-0.2.3/vaibify/gui/remoteBindingContext.py +248 -0
- vaibify-0.2.3/vaibify/gui/researcherActions.py +376 -0
- vaibify-0.2.3/vaibify/gui/routeContext.py +978 -0
- vaibify-0.2.3/vaibify/gui/routeScope.py +1265 -0
- vaibify-0.2.3/vaibify/gui/routes/__init__.py +87 -0
- vaibify-0.2.3/vaibify/gui/routes/bindingRoutes.py +488 -0
- vaibify-0.2.3/vaibify/gui/routes/conversionRoutes.py +195 -0
- vaibify-0.2.3/vaibify/gui/routes/environmentArchiveRoutes.py +1056 -0
- vaibify-0.2.3/vaibify/gui/routes/falsificationRoutes.py +559 -0
- vaibify-0.2.3/vaibify/gui/routes/fileRoutes.py +866 -0
- vaibify-0.2.3/vaibify/gui/routes/pipelineRoutes.py +4386 -0
- vaibify-0.2.3/vaibify/gui/routes/promotionRecoveryRoutes.py +640 -0
- vaibify-0.2.3/vaibify/gui/routes/reproducibilityRoutes.py +2406 -0
- vaibify-0.2.3/vaibify/gui/routes/reproductionRoutes.py +518 -0
- vaibify-0.2.3/vaibify/gui/routes/sessionRoutes.py +402 -0
- vaibify-0.2.3/vaibify/gui/routes/syncRoutes.py +4189 -0
- vaibify-0.2.3/vaibify/gui/routes/systemRoutes.py +859 -0
- vaibify-0.2.3/vaibify/gui/routes/testRoutes.py +1328 -0
- vaibify-0.2.3/vaibify/gui/routes/workflowRoutes.py +710 -0
- vaibify-0.2.3/vaibify/gui/routes/zenodoTokenRoutes.py +165 -0
- vaibify-0.2.3/vaibify/gui/serverLifespan.py +929 -0
- vaibify-0.2.3/vaibify/gui/serverMiddleware.py +504 -0
- vaibify-0.2.3/vaibify/gui/sessionLifecycle.py +1872 -0
- vaibify-0.2.3/vaibify/gui/startReservation.py +1141 -0
- vaibify-0.2.3/vaibify/gui/stateContract.py +415 -0
- vaibify-0.2.3/vaibify/gui/stateManager.py +1318 -0
- vaibify-0.2.3/vaibify/gui/static/AGENTS.md +413 -0
- vaibify-0.2.3/vaibify/gui/static/index.html +1537 -0
- vaibify-0.2.3/vaibify/gui/static/scriptApplication.js +8286 -0
- vaibify-0.2.3/vaibify/gui/static/scriptConnectionMonitor.js +311 -0
- vaibify-0.2.3/vaibify/gui/static/scriptContainerManager.js +3654 -0
- vaibify-0.2.3/vaibify/gui/static/scriptDependencyScanner.js +836 -0
- vaibify-0.2.3/vaibify/gui/static/scriptEventBindings.js +1562 -0
- vaibify-0.2.3/vaibify/gui/static/scriptHubQuit.js +183 -0
- vaibify-0.2.3/vaibify/gui/static/scriptProofTab.js +1575 -0
- vaibify-0.2.3/vaibify/gui/static/scriptRemoteBindings.js +491 -0
- vaibify-0.2.3/vaibify/gui/static/scriptResourceMonitor.js +412 -0
- vaibify-0.2.3/vaibify/gui/static/scriptStepRenderer.js +2193 -0
- vaibify-0.2.3/vaibify/gui/static/scriptSyncManager.js +3293 -0
- vaibify-0.2.3/vaibify/gui/static/scriptWorkflowManager.js +3548 -0
- vaibify-0.2.3/vaibify/gui/static/scriptWorkflowRequirements.js +4125 -0
- vaibify-0.2.3/vaibify/gui/static/scriptZenodoTokens.js +276 -0
- vaibify-0.2.3/vaibify/gui/static/styleMain.css +10210 -0
- vaibify-0.2.3/vaibify/gui/static/styleSetupWizard.css +438 -0
- vaibify-0.2.3/vaibify/gui/static/vaibify_logo_mask.png +0 -0
- vaibify-0.2.3/vaibify/gui/syncDispatcher.py +2574 -0
- vaibify-0.2.3/vaibify/gui/terminalSession.py +394 -0
- vaibify-0.2.3/vaibify/gui/webSocketAuthorization.py +372 -0
- vaibify-0.2.3/vaibify/gui/workflowManager.py +2995 -0
- vaibify-0.2.3/vaibify/gui/x11Lifecycle.py +99 -0
- vaibify-0.2.3/vaibify/gui/zenodoTokenAccess.py +169 -0
- vaibify-0.2.3/vaibify/gui/zenodoTokenMigration.py +530 -0
- vaibify-0.2.3/vaibify/host/hostConfinedRead.py +307 -0
- vaibify-0.2.3/vaibify/host/hostConfinedWrite.py +134 -0
- vaibify-0.2.3/vaibify/host/hostConnection.py +1304 -0
- vaibify-0.2.3/vaibify/host/x11Authority.py +450 -0
- vaibify-0.2.3/vaibify/install/installVaibify.sh +478 -0
- vaibify-0.2.3/vaibify/reproducibility/archivePromotion.py +837 -0
- vaibify-0.2.3/vaibify/reproducibility/dependencyPinning.py +455 -0
- vaibify-0.2.3/vaibify/reproducibility/environmentSnapshot.py +1072 -0
- vaibify-0.2.3/vaibify/reproducibility/githubMirror.py +597 -0
- vaibify-0.2.3/vaibify/reproducibility/l3Attestation.py +670 -0
- vaibify-0.2.3/vaibify/reproducibility/levelGates.py +6004 -0
- vaibify-0.2.3/vaibify/reproducibility/overleafSync.py +907 -0
- vaibify-0.2.3/vaibify/reproducibility/proofCatalog.py +309 -0
- vaibify-0.2.3/vaibify/reproducibility/proofReceipt.py +856 -0
- vaibify-0.2.3/vaibify/reproducibility/publicationScope.py +392 -0
- vaibify-0.2.3/vaibify/reproducibility/repoFiles.py +1359 -0
- vaibify-0.2.3/vaibify/reproducibility/reproductionReport.py +426 -0
- vaibify-0.2.3/vaibify/reproducibility/scheduledReverify.py +1452 -0
- vaibify-0.2.3/vaibify/reproducibility/shadowRerun.py +1108 -0
- vaibify-0.2.3/vaibify/reproducibility/syncBookkeeping.py +524 -0
- vaibify-0.2.3/vaibify/reproducibility/zenodoClient.py +1512 -0
- vaibify-0.2.3/vaibify/versionIdentity.py +438 -0
- vaibify-0.2.3/vaibify.egg-info/PKG-INFO +139 -0
- vaibify-0.2.3/vaibify.egg-info/SOURCES.txt +2014 -0
- vaibify-0.2.3/vaibify.egg-info/scm_file_list.json +2009 -0
- vaibify-0.2.3/vaibify.egg-info/scm_version.json +8 -0
- vaibify-0.2.2/.claude/skills/reproducibility-lane/SKILL.md +0 -1001
- vaibify-0.2.2/.github/workflows/falsification.yml +0 -411
- vaibify-0.2.2/PKG-INFO +0 -139
- vaibify-0.2.2/README.md +0 -65
- vaibify-0.2.2/docs/agentCouncil.md +0 -416
- vaibify-0.2.2/docs/aiUse.md +0 -249
- vaibify-0.2.2/docs/architecture.md +0 -3958
- vaibify-0.2.2/docs/cli.md +0 -618
- vaibify-0.2.2/docs/developers.md +0 -353
- vaibify-0.2.2/docs/environmentsAndProjects.md +0 -794
- vaibify-0.2.2/docs/externalResources.md +0 -416
- vaibify-0.2.2/docs/forAgents.md +0 -337
- vaibify-0.2.2/docs/install.md +0 -465
- vaibify-0.2.2/docs/lessons.md +0 -699
- vaibify-0.2.2/docs/proofLadder.md +0 -390
- vaibify-0.2.2/docs/quickStart.md +0 -224
- vaibify-0.2.2/docs/reproducibility.md +0 -518
- vaibify-0.2.2/docs/security.md +0 -334
- vaibify-0.2.2/docs/systemPrompt.md +0 -31
- vaibify-0.2.2/tests/assessedRerunLaneHarness.py +0 -120
- vaibify-0.2.2/tests/browser/conftest.py +0 -785
- vaibify-0.2.2/tests/browser/fakeDockerAdapter.py +0 -954
- vaibify-0.2.2/tests/browser/testProjectBlockShowsItCanBeOpened.py +0 -87
- vaibify-0.2.2/tests/browser/testStepReorderUsesAPrivateDragType.py +0 -119
- vaibify-0.2.2/tests/browser/testTheImageTrustModalAsksBeforeAnUnbuiltImageRuns.py +0 -334
- vaibify-0.2.2/tests/browser/testThePromptRecordViewerShowsAGeminiRewind.py +0 -131
- vaibify-0.2.2/tests/browser/testThePromptRecordViewerShowsTheRecord.py +0 -137
- vaibify-0.2.2/tests/browser/testTheX11OptInIsOffByDefaultAndExcludesIsolation.py +0 -149
- vaibify-0.2.2/tests/conftest.py +0 -585
- vaibify-0.2.2/tests/falsificationRegistry.py +0 -37327
- vaibify-0.2.2/tests/guardCoverageSeed.json +0 -233
- vaibify-0.2.2/tests/hostCapabilityInventory.json +0 -202
- vaibify-0.2.2/tests/mutationInventory.json +0 -688
- vaibify-0.2.2/tests/styleInventory.json +0 -346
- vaibify-0.2.2/tests/syncStatusFixtures.py +0 -120
- vaibify-0.2.2/tests/testAdvancingALevelNeverLowersOne.py +0 -860
- vaibify-0.2.2/tests/testAgentLaneEnforcement.py +0 -805
- vaibify-0.2.2/tests/testAiDeclarationFileLive.py +0 -262
- vaibify-0.2.2/tests/testArchitecturalInvariants.py +0 -8856
- vaibify-0.2.2/tests/testAssessedRerunLane.py +0 -562
- vaibify-0.2.2/tests/testAutoArchive.py +0 -343
- vaibify-0.2.2/tests/testBasenameCollisionBlocksLevelTwo.py +0 -101
- vaibify-0.2.2/tests/testBatchedSmallFileRead.py +0 -239
- vaibify-0.2.2/tests/testBindMountDenyListReadsTheFilesystem.py +0 -134
- vaibify-0.2.2/tests/testBindMountValidator.py +0 -692
- vaibify-0.2.2/tests/testBlindSpotDispositions.py +0 -584
- vaibify-0.2.2/tests/testBlockersExplainEveryRefusal.py +0 -154
- vaibify-0.2.2/tests/testBroadHandlersPassControlPlaneRefusals.py +0 -471
- vaibify-0.2.2/tests/testBrowserLaneContract.py +0 -170
- vaibify-0.2.2/tests/testCapabilityAuthorities.py +0 -1100
- vaibify-0.2.2/tests/testCarrierMigratedRoutes.py +0 -8364
- vaibify-0.2.2/tests/testClaimSurvivesTheDisclosure.py +0 -272
- vaibify-0.2.2/tests/testCommandRevoke.py +0 -197
- vaibify-0.2.2/tests/testConcurrentProjectRuns.py +0 -408
- vaibify-0.2.2/tests/testConfinedContainerWrite.py +0 -449
- vaibify-0.2.2/tests/testConfinedTreeWriteLive.py +0 -432
- vaibify-0.2.2/tests/testConfinedWriteLive.py +0 -167
- vaibify-0.2.2/tests/testConftestManagerVersioning.py +0 -627
- vaibify-0.2.2/tests/testContainerGit.py +0 -357
- vaibify-0.2.2/tests/testContainerManager.py +0 -672
- vaibify-0.2.2/tests/testContainerManagerFull.py +0 -457
- vaibify-0.2.2/tests/testConversionLifecycle.py +0 -718
- vaibify-0.2.2/tests/testCopyDirectoryLive.py +0 -101
- vaibify-0.2.2/tests/testCouncilCampaignIdentity.py +0 -246
- vaibify-0.2.2/tests/testCouncilControllerIntegration.py +0 -566
- vaibify-0.2.2/tests/testCouncilControllerLive.py +0 -209
- vaibify-0.2.2/tests/testCouncilCredentialGate.py +0 -298
- vaibify-0.2.2/tests/testCouncilCredentialRoutes.py +0 -323
- vaibify-0.2.2/tests/testCouncilReadiness.py +0 -508
- vaibify-0.2.2/tests/testCouncilRoutes.py +0 -2248
- vaibify-0.2.2/tests/testCoverageBoost.py +0 -1217
- vaibify-0.2.2/tests/testCoverageCliBuildStartReproduce.py +0 -568
- vaibify-0.2.2/tests/testCoverageCoreTerminalSession.py +0 -331
- vaibify-0.2.2/tests/testCoverageCouncilGatewayLifecycle.py +0 -1855
- vaibify-0.2.2/tests/testCoverageDockerConnectionTransfers.py +0 -817
- vaibify-0.2.2/tests/testCoverageDockerConnectionTypedReads.py +0 -839
- vaibify-0.2.2/tests/testCoverageGaps.py +0 -1839
- vaibify-0.2.2/tests/testCoverageReproducibilityOverleafSync.py +0 -326
- vaibify-0.2.2/tests/testCoverageReproducibilityScheduledReverify.py +0 -418
- vaibify-0.2.2/tests/testCoverageRoutesAEnvironmentArchive.py +0 -847
- vaibify-0.2.2/tests/testCoverageRoutesAPromotionRecovery.py +0 -578
- vaibify-0.2.2/tests/testCoverageRoutesBAppFactory.py +0 -356
- vaibify-0.2.2/tests/testCoverageRoutesBReproducibility.py +0 -877
- vaibify-0.2.2/tests/testCoverageRoutesBSync.py +0 -732
- vaibify-0.2.2/tests/testCredentialIsolation.py +0 -279
- vaibify-0.2.2/tests/testDeleteEnvironmentRoute.py +0 -357
- vaibify-0.2.2/tests/testDependencyPinning.py +0 -546
- vaibify-0.2.2/tests/testDependencyScan.py +0 -215
- vaibify-0.2.2/tests/testDependencyScanRoutes.py +0 -243
- vaibify-0.2.2/tests/testDockerConnection.py +0 -1237
- vaibify-0.2.2/tests/testDraftRoutes.py +0 -473
- vaibify-0.2.2/tests/testEnvelopeSnapshot.py +0 -276
- vaibify-0.2.2/tests/testEnvironmentArchivePromotion.py +0 -275
- vaibify-0.2.2/tests/testEnvironmentArchiveRoutes.py +0 -396
- vaibify-0.2.2/tests/testEnvironmentInfoRoute.py +0 -137
- vaibify-0.2.2/tests/testExecArgumentBudget.py +0 -213
- vaibify-0.2.2/tests/testExitedContainerEvidence.py +0 -194
- vaibify-0.2.2/tests/testFalsificationRoutesMutationCoverage.py +0 -160
- vaibify-0.2.2/tests/testFileEdgesAreSafe.py +0 -108
- vaibify-0.2.2/tests/testGithubBadgeMeansAgreementNotCleanliness.py +0 -226
- vaibify-0.2.2/tests/testGuiSignalsItsCategory.py +0 -80
- vaibify-0.2.2/tests/testHostCancel.py +0 -500
- vaibify-0.2.2/tests/testHostCpuAccounting.py +0 -122
- vaibify-0.2.2/tests/testHostDeterminismEnvironment.py +0 -232
- vaibify-0.2.2/tests/testHostGitAndReposPanel.py +0 -868
- vaibify-0.2.2/tests/testHostModeContainerOnlyRefusals.py +0 -465
- vaibify-0.2.2/tests/testHostModeHonestyGates.py +0 -360
- vaibify-0.2.2/tests/testHostPathGuardCorpus.py +0 -351
- vaibify-0.2.2/tests/testHostQuarantineSurface.py +0 -285
- vaibify-0.2.2/tests/testImageTrustGuardsTheLaunch.py +0 -321
- vaibify-0.2.2/tests/testImageTrustLive.py +0 -170
- vaibify-0.2.2/tests/testIsolationGating.py +0 -465
- vaibify-0.2.2/tests/testL3Attestation.py +0 -207
- vaibify-0.2.2/tests/testLevelGateL2Arxiv.py +0 -532
- vaibify-0.2.2/tests/testLevelGateL3EndToEnd.py +0 -321
- vaibify-0.2.2/tests/testLevelGates.py +0 -473
- vaibify-0.2.2/tests/testLevelGatesMutationCoverage.py +0 -364
- vaibify-0.2.2/tests/testLevelGatesRefusalPropagation.py +0 -308
- vaibify-0.2.2/tests/testLevelTwoGapsAgreeWithTheGate.py +0 -76
- vaibify-0.2.2/tests/testLifecycleRouteAuthority.py +0 -404
- vaibify-0.2.2/tests/testLockInputFallsBackToVaibifyRequirements.py +0 -200
- vaibify-0.2.2/tests/testLoggingHygiene.py +0 -128
- vaibify-0.2.2/tests/testMissingFileBadges.py +0 -199
- vaibify-0.2.2/tests/testMutationBoundary.py +0 -418
- vaibify-0.2.2/tests/testMutationInventory.py +0 -2134
- vaibify-0.2.2/tests/testNarrowLlmFallback.py +0 -314
- vaibify-0.2.2/tests/testOverleafSync.py +0 -299
- vaibify-0.2.2/tests/testOverleafSyncExtended.py +0 -954
- vaibify-0.2.2/tests/testOverleafTokenStaysOffTheCommandLine.py +0 -202
- vaibify-0.2.2/tests/testPerTestMarkerEndToEnd.py +0 -304
- vaibify-0.2.2/tests/testPipelineRoutesCoverage.py +0 -2365
- vaibify-0.2.2/tests/testPipelineRunnerBranches.py +0 -479
- vaibify-0.2.2/tests/testPipelineRunnerFull.py +0 -1164
- vaibify-0.2.2/tests/testPipelineRunnerHeartbeat.py +0 -187
- vaibify-0.2.2/tests/testPipelineRunnerMutationCoverage.py +0 -266
- vaibify-0.2.2/tests/testPipelineServerFull.py +0 -587
- vaibify-0.2.2/tests/testPipelineServerRoutes.py +0 -1243
- vaibify-0.2.2/tests/testPipelineStateHostIncidents.py +0 -275
- vaibify-0.2.2/tests/testPipelineStateLiveness.py +0 -250
- vaibify-0.2.2/tests/testPipelineStateMock.py +0 -178
- vaibify-0.2.2/tests/testPipelineStateWriter.py +0 -391
- vaibify-0.2.2/tests/testPreflightNamesTheCauseNotTheCascade.py +0 -145
- vaibify-0.2.2/tests/testPreflightValidation.py +0 -303
- vaibify-0.2.2/tests/testProjectHeaderNeverOutranksItsRows.py +0 -258
- vaibify-0.2.2/tests/testProjectRepoDetection.py +0 -602
- vaibify-0.2.2/tests/testPromoteToHostProjectRoute.py +0 -481
- vaibify-0.2.2/tests/testPromptRecordManager.py +0 -734
- vaibify-0.2.2/tests/testProofLadderUncoveredLines.py +0 -934
- vaibify-0.2.2/tests/testPublicationScopeSeparatesTheLevels.py +0 -804
- vaibify-0.2.2/tests/testPullManuscriptRoute.py +0 -155
- vaibify-0.2.2/tests/testQuickStartReaderJourneyLive.py +0 -185
- vaibify-0.2.2/tests/testRegistryManager.py +0 -846
- vaibify-0.2.2/tests/testRegistryRoutes.py +0 -1036
- vaibify-0.2.2/tests/testRemnantRoutes.py +0 -297
- vaibify-0.2.2/tests/testRemoteBadgeRefresh.py +0 -709
- vaibify-0.2.2/tests/testRemoteDataMarker.py +0 -437
- vaibify-0.2.2/tests/testRemoteDataProvenance.py +0 -157
- vaibify-0.2.2/tests/testRemoteHelper.py +0 -211
- vaibify-0.2.2/tests/testRemotesMigration.py +0 -327
- vaibify-0.2.2/tests/testRepoFiles.py +0 -533
- vaibify-0.2.2/tests/testReproducedManifest.py +0 -687
- vaibify-0.2.2/tests/testReproductionReport.py +0 -161
- vaibify-0.2.2/tests/testRerunRegeneratesWhatItGrades.py +0 -678
- vaibify-0.2.2/tests/testRerunVerifiesWhatItRan.py +0 -1042
- vaibify-0.2.2/tests/testResearcherActions.py +0 -289
- vaibify-0.2.2/tests/testResumableDownload.py +0 -992
- vaibify-0.2.2/tests/testRuntimeSetupFacts.py +0 -326
- vaibify-0.2.2/tests/testScheduledReverify.py +0 -1046
- vaibify-0.2.2/tests/testSeededFolderRepositoryList.py +0 -366
- vaibify-0.2.2/tests/testSessionRegistry.py +0 -357
- vaibify-0.2.2/tests/testSetupWizardKeepsWhatItDoesNotShow.py +0 -316
- vaibify-0.2.2/tests/testShadowNamesTheImageGap.py +0 -119
- vaibify-0.2.2/tests/testShadowRerun.py +0 -834
- vaibify-0.2.2/tests/testStartReservation.py +0 -1044
- vaibify-0.2.2/tests/testStepLevelStates.py +0 -1131
- vaibify-0.2.2/tests/testStepRoutes.py +0 -604
- vaibify-0.2.2/tests/testStopDoesNotNeedTheSession.py +0 -143
- vaibify-0.2.2/tests/testStyleInvariants.py +0 -1590
- vaibify-0.2.2/tests/testSupervisionAnchor.py +0 -218
- vaibify-0.2.2/tests/testSyncDispatcherCoverage.py +0 -571
- vaibify-0.2.2/tests/testSyncDispatcherExtended.py +0 -301
- vaibify-0.2.2/tests/testSyncDispatcherGaps.py +0 -832
- vaibify-0.2.2/tests/testSyncRoutesCoverage.py +0 -3172
- vaibify-0.2.2/tests/testSyncTestGenFull.py +0 -1296
- vaibify-0.2.2/tests/testSyncVerifyRoutes.py +0 -434
- vaibify-0.2.2/tests/testTerminalContainment.py +0 -716
- vaibify-0.2.2/tests/testTerminalSessionExtended.py +0 -220
- vaibify-0.2.2/tests/testTestGenerationIntegrity.py +0 -580
- vaibify-0.2.2/tests/testTestGeneratorExtended.py +0 -304
- vaibify-0.2.2/tests/testTheProjectDepositIsAskedWhatItStored.py +0 -263
- vaibify-0.2.2/tests/testTheStagedClientStaysCurrent.py +0 -103
- vaibify-0.2.2/tests/testToolkitEndToEnd.py +0 -217
- vaibify-0.2.2/tests/testTrackedReposManager.py +0 -702
- vaibify-0.2.2/tests/testTypedReadFailureIsNeverAbsence.py +0 -207
- vaibify-0.2.2/tests/testWorkflowManager.py +0 -1269
- vaibify-0.2.2/tests/testWorkflowManagerExtended.py +0 -1724
- vaibify-0.2.2/tests/testWorkflowReloadIntegration.py +0 -464
- vaibify-0.2.2/tests/testWorkspaceRootHandshake.py +0 -199
- vaibify-0.2.2/tests/testWorkspaceSeedPaths.py +0 -186
- vaibify-0.2.2/tests/testX11Findings.py +0 -201
- vaibify-0.2.2/tests/testX11Forwarding.py +0 -479
- vaibify-0.2.2/tests/testX11OptIn.py +0 -110
- vaibify-0.2.2/tests/testZenodoEnvelopeArchive.py +0 -603
- vaibify-0.2.2/tests/testZenodoIntegrationGaps.py +0 -655
- vaibify-0.2.2/tests/testZenodoVerifyUsesTheRecordedService.py +0 -100
- vaibify-0.2.2/tools/generateMutationInventory.py +0 -2463
- vaibify-0.2.2/vaibify/_version.py +0 -24
- vaibify-0.2.2/vaibify/cli/actionCommands.py +0 -581
- vaibify-0.2.2/vaibify/cli/commandBuild.py +0 -1240
- vaibify-0.2.2/vaibify/cli/commandCredential.py +0 -120
- vaibify-0.2.2/vaibify/cli/commandDestroy.py +0 -97
- vaibify-0.2.2/vaibify/cli/commandDoctor.py +0 -715
- vaibify-0.2.2/vaibify/cli/commandInit.py +0 -313
- vaibify-0.2.2/vaibify/cli/commandReconcile.py +0 -473
- vaibify-0.2.2/vaibify/cli/commandRevoke.py +0 -84
- vaibify-0.2.2/vaibify/cli/commandStart.py +0 -621
- vaibify-0.2.2/vaibify/cli/commandTest.py +0 -152
- vaibify-0.2.2/vaibify/cli/configFieldPreflight.py +0 -148
- vaibify-0.2.2/vaibify/cli/doctorNetwork.py +0 -856
- vaibify-0.2.2/vaibify/cli/doctorX11Checks.py +0 -78
- vaibify-0.2.2/vaibify/cli/hubSession.py +0 -744
- vaibify-0.2.2/vaibify/cli/main.py +0 -572
- vaibify-0.2.2/vaibify/cli/serverLaunch.py +0 -298
- vaibify-0.2.2/vaibify/completions/vaibify.bash +0 -213
- vaibify-0.2.2/vaibify/completions/vaibify.fish +0 -104
- vaibify-0.2.2/vaibify/completions/vaibify.zsh +0 -152
- vaibify-0.2.2/vaibify/config/bindMountValidator.py +0 -594
- vaibify-0.2.2/vaibify/config/containerConfig.py +0 -272
- vaibify-0.2.2/vaibify/config/containerLock.py +0 -575
- vaibify-0.2.2/vaibify/config/ephemeralStore.py +0 -122
- vaibify-0.2.2/vaibify/config/imageOrigins.py +0 -207
- vaibify-0.2.2/vaibify/config/keepAliveManager.py +0 -376
- vaibify-0.2.2/vaibify/config/mutationAdmission.py +0 -612
- vaibify-0.2.2/vaibify/config/projectConfig.py +0 -883
- vaibify-0.2.2/vaibify/config/registryManager.py +0 -868
- vaibify-0.2.2/vaibify/config/sessionRegistry.py +0 -255
- vaibify-0.2.2/vaibify/containerImage/checkIsolation.sh +0 -160
- vaibify-0.2.2/vaibify/containerImage/entrypoint.sh +0 -1819
- vaibify-0.2.2/vaibify/containerImage/skills/proof-ladder/SKILL.md +0 -369
- vaibify-0.2.2/vaibify/containerImage/skills/read-arxiv/SKILL.md +0 -54
- vaibify-0.2.2/vaibify/containerImage/vaibifyDo.py +0 -1079
- vaibify-0.2.2/vaibify/docker/containerLifecycleRepair.py +0 -263
- vaibify-0.2.2/vaibify/docker/containerManager.py +0 -1589
- vaibify-0.2.2/vaibify/docker/disposableContainer.py +0 -1046
- vaibify-0.2.2/vaibify/docker/disposableSpecification.py +0 -503
- vaibify-0.2.2/vaibify/docker/dockerConnection.py +0 -4001
- vaibify-0.2.2/vaibify/docker/dockerContext.py +0 -415
- vaibify-0.2.2/vaibify/docker/dockerErrorDiagnosis.py +0 -585
- vaibify-0.2.2/vaibify/docker/pinnedImageAcquisition.py +0 -680
- vaibify-0.2.2/vaibify/docker/volumeManager.py +0 -111
- vaibify-0.2.2/vaibify/docker/x11Forwarding.py +0 -542
- vaibify-0.2.2/vaibify/docs/agentCouncil.md +0 -416
- vaibify-0.2.2/vaibify/docs/environmentsAndProjects.md +0 -794
- vaibify-0.2.2/vaibify/docs/forAgents.md +0 -337
- vaibify-0.2.2/vaibify/docs/proofLadder.md +0 -390
- vaibify-0.2.2/vaibify/docs/reproducibility.md +0 -518
- vaibify-0.2.2/vaibify/gui/AGENTS.md +0 -274
- vaibify-0.2.2/vaibify/gui/actionCatalog.py +0 -1553
- vaibify-0.2.2/vaibify/gui/agentCouncilContext.py +0 -1437
- vaibify-0.2.2/vaibify/gui/agentCouncilDockerGateway.py +0 -1029
- vaibify-0.2.2/vaibify/gui/agentCouncilEgress.py +0 -431
- vaibify-0.2.2/vaibify/gui/agentCouncilRegistry.py +0 -481
- vaibify-0.2.2/vaibify/gui/appFactory.py +0 -800
- vaibify-0.2.2/vaibify/gui/buildRoutes.py +0 -667
- vaibify-0.2.2/vaibify/gui/commitCarrier.py +0 -1321
- vaibify-0.2.2/vaibify/gui/conftestManager.py +0 -1487
- vaibify-0.2.2/vaibify/gui/containerGit.py +0 -760
- vaibify-0.2.2/vaibify/gui/containerOwnership.py +0 -958
- vaibify-0.2.2/vaibify/gui/conversionLifecycle.py +0 -744
- vaibify-0.2.2/vaibify/gui/dataPreview.py +0 -93
- vaibify-0.2.2/vaibify/gui/environmentDeletion.py +0 -216
- vaibify-0.2.2/vaibify/gui/environmentDeletionRoutes.py +0 -157
- vaibify-0.2.2/vaibify/gui/fileStatusManager.py +0 -2657
- vaibify-0.2.2/vaibify/gui/helperPrograms.py +0 -55
- vaibify-0.2.2/vaibify/gui/hostControlChannel.py +0 -1070
- vaibify-0.2.2/vaibify/gui/llmInvoker.py +0 -438
- vaibify-0.2.2/vaibify/gui/pinnedEnvironmentConversion.py +0 -486
- vaibify-0.2.2/vaibify/gui/pipelineRunner.py +0 -1955
- vaibify-0.2.2/vaibify/gui/pipelineServer.py +0 -3781
- vaibify-0.2.2/vaibify/gui/pipelineValidator.py +0 -142
- vaibify-0.2.2/vaibify/gui/promptRecordManager.py +0 -720
- vaibify-0.2.2/vaibify/gui/registryRoutes.py +0 -2544
- vaibify-0.2.2/vaibify/gui/researcherActions.py +0 -359
- vaibify-0.2.2/vaibify/gui/routeContext.py +0 -956
- vaibify-0.2.2/vaibify/gui/routeScope.py +0 -1198
- vaibify-0.2.2/vaibify/gui/routes/__init__.py +0 -83
- vaibify-0.2.2/vaibify/gui/routes/conversionRoutes.py +0 -184
- vaibify-0.2.2/vaibify/gui/routes/environmentArchiveRoutes.py +0 -1041
- vaibify-0.2.2/vaibify/gui/routes/falsificationRoutes.py +0 -555
- vaibify-0.2.2/vaibify/gui/routes/fileRoutes.py +0 -916
- vaibify-0.2.2/vaibify/gui/routes/pipelineRoutes.py +0 -4353
- vaibify-0.2.2/vaibify/gui/routes/promotionRecoveryRoutes.py +0 -435
- vaibify-0.2.2/vaibify/gui/routes/reproducibilityRoutes.py +0 -2404
- vaibify-0.2.2/vaibify/gui/routes/reproductionRoutes.py +0 -512
- vaibify-0.2.2/vaibify/gui/routes/sessionRoutes.py +0 -270
- vaibify-0.2.2/vaibify/gui/routes/syncRoutes.py +0 -3755
- vaibify-0.2.2/vaibify/gui/routes/systemRoutes.py +0 -800
- vaibify-0.2.2/vaibify/gui/routes/testRoutes.py +0 -1327
- vaibify-0.2.2/vaibify/gui/routes/workflowRoutes.py +0 -623
- vaibify-0.2.2/vaibify/gui/serverLifespan.py +0 -892
- vaibify-0.2.2/vaibify/gui/serverMiddleware.py +0 -488
- vaibify-0.2.2/vaibify/gui/sessionLifecycle.py +0 -1870
- vaibify-0.2.2/vaibify/gui/startReservation.py +0 -1136
- vaibify-0.2.2/vaibify/gui/stateContract.py +0 -412
- vaibify-0.2.2/vaibify/gui/stateManager.py +0 -1302
- vaibify-0.2.2/vaibify/gui/static/AGENTS.md +0 -404
- vaibify-0.2.2/vaibify/gui/static/index.html +0 -1506
- vaibify-0.2.2/vaibify/gui/static/scriptApplication.js +0 -8191
- vaibify-0.2.2/vaibify/gui/static/scriptConnectionMonitor.js +0 -281
- vaibify-0.2.2/vaibify/gui/static/scriptContainerManager.js +0 -3424
- vaibify-0.2.2/vaibify/gui/static/scriptDependencyScanner.js +0 -836
- vaibify-0.2.2/vaibify/gui/static/scriptEventBindings.js +0 -1554
- vaibify-0.2.2/vaibify/gui/static/scriptProofTab.js +0 -1505
- vaibify-0.2.2/vaibify/gui/static/scriptResourceMonitor.js +0 -412
- vaibify-0.2.2/vaibify/gui/static/scriptStepRenderer.js +0 -2192
- vaibify-0.2.2/vaibify/gui/static/scriptSyncManager.js +0 -3241
- vaibify-0.2.2/vaibify/gui/static/scriptWorkflowManager.js +0 -3368
- vaibify-0.2.2/vaibify/gui/static/scriptWorkflowRequirements.js +0 -4020
- vaibify-0.2.2/vaibify/gui/static/styleMain.css +0 -10025
- vaibify-0.2.2/vaibify/gui/static/styleSetupWizard.css +0 -438
- vaibify-0.2.2/vaibify/gui/syncDispatcher.py +0 -2141
- vaibify-0.2.2/vaibify/gui/terminalSession.py +0 -390
- vaibify-0.2.2/vaibify/gui/webSocketAuthorization.py +0 -353
- vaibify-0.2.2/vaibify/gui/workflowManager.py +0 -2967
- vaibify-0.2.2/vaibify/host/hostConfinedRead.py +0 -297
- vaibify-0.2.2/vaibify/host/hostConnection.py +0 -1287
- vaibify-0.2.2/vaibify/install/installVaibify.sh +0 -489
- vaibify-0.2.2/vaibify/reproducibility/archivePromotion.py +0 -585
- vaibify-0.2.2/vaibify/reproducibility/dependencyPinning.py +0 -452
- vaibify-0.2.2/vaibify/reproducibility/environmentSnapshot.py +0 -1070
- vaibify-0.2.2/vaibify/reproducibility/githubMirror.py +0 -357
- vaibify-0.2.2/vaibify/reproducibility/l3Attestation.py +0 -644
- vaibify-0.2.2/vaibify/reproducibility/levelGates.py +0 -5513
- vaibify-0.2.2/vaibify/reproducibility/overleafSync.py +0 -879
- vaibify-0.2.2/vaibify/reproducibility/publicationScope.py +0 -370
- vaibify-0.2.2/vaibify/reproducibility/repoFiles.py +0 -1329
- vaibify-0.2.2/vaibify/reproducibility/reproductionReport.py +0 -421
- vaibify-0.2.2/vaibify/reproducibility/scheduledReverify.py +0 -1256
- vaibify-0.2.2/vaibify/reproducibility/shadowRerun.py +0 -1105
- vaibify-0.2.2/vaibify/reproducibility/syncBookkeeping.py +0 -487
- vaibify-0.2.2/vaibify/reproducibility/zenodoClient.py +0 -1319
- vaibify-0.2.2/vaibify.egg-info/PKG-INFO +0 -139
- vaibify-0.2.2/vaibify.egg-info/SOURCES.txt +0 -1908
- vaibify-0.2.2/vaibify.egg-info/scm_file_list.json +0 -1903
- vaibify-0.2.2/vaibify.egg-info/scm_version.json +0 -8
- {vaibify-0.2.2 → vaibify-0.2.3}/.claude/hooks/askSensitiveEdit.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.claude/hooks/blockDestructiveGit.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.claude/settings.json +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.claude/skills/add-data-loader/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.claude/skills/add-route-module/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.claude/skills/container-image-and-packaging/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.claude/skills/container-mutations/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.claude/skills/dashboard-state-honesty/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.claude/skills/host-mode-and-paths/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.claude/skills/monitor-pr/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.claude/skills/terminal-sessions/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.githooks/pre-commit +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/agentDocsPathCheck.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/badges.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/browser-chromium.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/browser-firefox.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/browser-webkit.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/containerAcceptance.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/docs.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/freshImageBuild.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/mutation.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/pip-install.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/publishedReproduction.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/remoteSsh.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/runtimeSetup.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/security.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/styleContract.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/tests-linux.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/tests-macos-nightly.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/tests-macos.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.github/workflows/toolchainEpoch.yml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.gitignore +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/.zenodo.json +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/AGENTS.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/CITATION.cff +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/CLAUDE.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/LICENSE +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/VaibifyIcon.png +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/bin/connect_vc +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/bin/vcTransferCommon.sh +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/bin/vc_pull +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/bin/vc_push +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/cosmic-ray.toml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/docs/_static/.gitkeep +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/docs/_static/custom.css +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/docs/conduct.rst +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/docs/conf.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/docs/index.rst +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/docs/knownDebt.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/docs/skillTesting.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/docs/testing.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/docs/vaibify_logo.png +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/docs/vaibify_screenshot.png +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/docs/vibeCoding.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/pyproject.toml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/pytest.ini +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/setup.cfg +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/__init__.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/agentCouncilHarness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/attributionShapes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/__init__.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/filesLane.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testABadgeOffersTheActionThatResolvesIt.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testABlockedRowStillTeaches.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testABuildRefusalIsNotARunningBuild.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAClickSurvivesAPollRender.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAContainerOffThePinWarnsBesideTheSnapshotRow.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testADragThatLeavesTheWindowKeepsScrolling.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testADropTargetIsATargetInEveryBrowser.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testADroppedBuildRequestAttachesInstead.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAFailedStepExplainsItsExitCode.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAFailureToastOffersADiagnosis.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAFullScreenProgramsLimitIsStated.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAHeldTileOffersRelease.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testALateAnswerNeverRepaintsAViewer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testALevelCrossingWarnsBeforeItWrites.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testALockedTileExplainsOnClick.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testALostClaimRecoversWhereverItIsMet.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAMissingFileIsListedNotJustCounted.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testANewStepRunsItsDataCommands.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAPartlyDivergedEnvelopeReadsPartial.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAPendingSignOffIsNotAWarning.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAPreRunWarningReachesTheScreen.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAProgramsCopyWaitsForTheResearchersClick.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAPromoteRefusalSaysWhy.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAPromotionDoesNotTakeItsOwnClaimBack.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAQuickVerificationIsStillReported.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAReadersVerificationLeavesTheAttestationRowStill.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testARecreateSaysWhatItDiscards.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testARefusedCopyOnSelectSaysHowToRetry.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testARefusedTestRunIsNotAFailure.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAResizeDoesNotStrandOldFrames.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAResizeKeepsThePaneFollowingItsOutput.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testARunMenuCheckSaysItIsWorking.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testARunningRemoteCheckPulsesTheBadge.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testASandboxDepositIsNamedOnTheRow.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testASettledAttestationRechecksTheRemotes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAStaleAiDeclarationSaysWhatChanged.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAStaleVerifyAdmitsIt.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testATierWithNothingToCheckSaysWhy.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAVerificationIsFollowedOnTheProjectBlock.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAVerificationPulsesOnlyWhatItAssesses.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAdoptBarOffersOnlyWhatCanWork.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAnAgentsEditAppearsWithoutNavigation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAnAgentsRunMovesTheStepLights.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAnErrorToastKeepsItsRemedy.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAnExternalRunIsAppliedByCategoryAndAnnouncedOnce.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAnInterruptedPromotionSurvivesAReload.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAnOlderScopeRendersAsVerifyAgain.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAnUncheckedPassIsNeverShownAsPassed.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testAssessedVerdictsOnScreen.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testBadgesRepaintAfterAVerify.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testBlankProjectCanReadAndChangeItsSession.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testBrowserJourneys.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCleanOutputsAppliesWhatTheRouteWrote.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCompareManifests.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testContainerizeFromPinnedImage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testConvertToProjectJourney.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCopyButtonsReportTheRealOutcome.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCopyHasAShortcutTheBrowserCannotTake.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCopySurvivesTheSelectionBeingCleared.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilAcceptCarriesItsDirectory.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilBlockedButtonExplainsItself.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilChairbotChat.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilChooserTasks.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilConveneNeedsAModel.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilCredentialConsent.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilDraftSurvivesAReload.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilFinishedSurface.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilGroupNameCannotInjectMarkup.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilImplementPlanButton.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilLoginCapNotice.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilMaximumRoundsReachesTheRecord.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilNotesAndSummarySurfaces.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilPauseSurface.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilPlanningJourney.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilProvenanceLostGateIsReadOnly.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilRetentionBoundaryIsInTheConsole.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilRetryOffer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilSnapshotScopeModal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testCouncilWorkspaceCloseReturnsToChooser.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testDashboardEdgesTellTheTruth.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testDashboardSkipsAreMarkedStale.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testDeclarationStepClaimsNoRunOutcome.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testDeleteEnvironmentIsTypedNotClicked.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testDestructiveActionsLookDestructive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testDeterminismRowFollowsTheGate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testDockerBannerNamesWhatFailed.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testDownloadDoesNotAskToLeaveThePage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testEnvironmentInfoModalOpens.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testErrorRedaction.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testExpiredWindowSaysSo.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testFailedBadgeRefreshMakesNoClaim.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testFilesTabDownload.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testFilesTabUpload.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testForeignManifestGuard.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testGeneratedTestsSayWhoWroteThem.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testHelpLivesInOnePlace.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testHostCancelSurface.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testHostProjectJourney.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testHostProjectPicker.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testIdleTimeoutSetting.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testInformationalFilesAreNotLevelTwoDefects.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testInlineFailuresCarryTheDiagnosis.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testLostClaimIsRecoverable.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testManifestCheckReportOnScreen.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testOpenInVsCodeAsksTheHostForTheLink.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testOutputContextNoteIsNeutral.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testPausedBadgeIndicator.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testPerFileZenodoSyncOpensTheModal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testPickerScreensScroll.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testProjectBlockBadgesAreActionable.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testProjectSwitchShowsItsProgress.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testPromoteFromInsideJourney.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testPromoteToHostProjectJourney.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testProofTabLedgerFollowsTheGate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testPushRunsTheVerifyThatProvesIt.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testQuarantineChipExplains.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testRegenerateWarnsBeforeItCosts.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testRemnantsGlyphAndPanel.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testRemoteFilesGroupByDisposition.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testRemoteSessionSaysWhere.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testReposPanelIsReachableWithAProjectOpen.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testReproducePublishedCard.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testResizeAndCopyHoldTogether.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testRightClickingTheHighlightCopiesIt.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testSaveFailureNamesItsReason.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testSelectingTextWhileAProgramHoldsTheMouse.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testSessionLifetimeSetting.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testSetUpDockerWizard.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testStartBannersBelongToTheirContainer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testSwitchingProjectsKeepsEachProjectsState.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testSymbolicTokenDependenciesOnScreen.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTerminalPaneSurvivesADrop.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTerminalScrollbackIsReachable.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheAgentMemoryAdviceIsTheServers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheAiBlockCountsOnlyItsGatingRows.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheAiDeclarationEditsInPlace.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheAiDeclarationFileIsChosenOrGenerated.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheArchiveRowNamesWhereADepositGoes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheArchiveRowsCarryTheirOwnConditions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheAttestationNudgeIsActionable.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheAttestationNudgeIsAnEncouragement.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheContainerizingWindowFollowsTheHub.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheDriftBannerHidesForThisVisit.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheEnvelopeMirrorRowRenders.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheEnvironmentArchiveRowTellsItsStatesApart.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheGraphLeavesOtherViewersAlone.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheHelpNamesThisMachinesKey.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheLimitSettingsSayWhatWillHappen.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheLockRowKeepsItsStateAndSaysWhy.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheMemoryWatchTellsAKillOnce.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheMergeModalIsActuallyVisible.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheNextStepArrowPointsAtARealRow.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheOpenTimeReadsAreChained.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testThePickerKeepsItsCardsAcrossAPoll.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testThePinnedEnvironmentNoteIsTheServers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheProjectBlockPaintsOnceAndCorrectly.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheProjectHubDiagnosesItself.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testThePromptRecordNamesWhatItLeftOut.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheReproductionBadgeFollowsTheServer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheResetAndCompareLoopIsReachable.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheResourceHelpDoesNotRecommendACap.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheRunMenuCanStartAnL3Verify.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheSetupWizardKeepsAndReports.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheSetupWizardSignsItselfIn.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheSignOffFollowsTheServer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheTerminalResetGivesTheMouseBack.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheToolbarControlsStayOneCluster.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheVerificationShowsItsOutput.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheVerifyControlsSayTheyAreWorking.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheZenodoRowOffersBothRemedies.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTheZenodoRowOffersVerifyFirst.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testTileTooltipsSayWhatAClickDoes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testUncoveredLibrariesOnScreen.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testUndecidedRepoPrompts.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testUndeclaredTestCategorySaysNotApplicable.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testUnintrospectableToastSaysWhatHappened.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testUnprovenEnvelopeIsNotAnAlarm.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testUnsignedTabSaysSo.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testUploadZoneNamesItsSourceMachine.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testVectorFigureNoteOnScreen.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testVerifyOffersCommittedRestore.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testVerifyRefusesBeforeItWarns.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testVerifyWarnsBeforeCopyingTheProject.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testViewRenderBaseline.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testViewersBelongToTheirProject.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testWizardStartsFromCommittedFiles.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testWorkflowFieldsCannotInjectMarkup.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testWorkspaceRootReachesThePanels.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/browser/testZenodoRecordsModal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/carrierStandDown.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/cliRunnerStreams.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/confinedReadScenarios.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/confinedWriteHarness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/councilCredentialLiveHelpers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/depositFaultServer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/dockerConnectionDoubles.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/dockerRuntimeStub.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/hostGitProbeCalls.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/hostGitProbeHarness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/levelGateStubs.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/liveContainerLabels.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/localGitRemote.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/markerPollHarness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/markerStateSupport.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/perTestMarkerHarness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/reproduceScriptHarness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/reproductionSourceFixtures.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/rerunAssessmentHarness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/sessionTokenTestHelper.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/shellCompletionHarness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/snapshotProgramHarness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testABusyCheckWaitsForATransientRecord.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testADivergedBranchIsOfferedAMerge.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testALockThatDeclaresNothing.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAMissingOutputIsNotAModifiedOne.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testARunKeepsThePassingTestsItRecordedLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testARunsOwnOutputsAreNotModifications.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testASavedTestRunsOnce.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAbandonHostJournal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAcknowledgementKeepsThePollBaseline.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testActionCatalog.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testActionCommandsDispatchCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAdvertisedCommandsExist.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilCharter.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilContext.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilContextLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilEgressLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilEngine.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilLedger.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilMultiProvider.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilProviders.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilProvidersLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilRegistry.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilRunnerLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentCouncilSnapshotScopeLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentEditsReachTheOpenTab.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentLayerSeparation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentRunsItsOwnProject.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentSessionBridge.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAgentUpdateStepAllowlist.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAiDeclarationAddStepAndDeterminismRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAiDeclarationStepKind.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAiModelDeclarationIssues.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAiProvenanceStamp.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAlphaFacingTruthfulness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAlreadyCommittedFileIsNotASyncFailure.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAmericanSpelling.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAnOutputAbsentFromTheManifestIsNeverVouchedFor.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAnalysisStack.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testApiClientContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testArchiveDepositPlan.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testArchiveFeatures.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testArchiveMemberValidatorIsShared.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testArchivePermanence.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testArchiveTestsOptOutLeavesNoUnclearableRows.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testArchivedAttestationIsPublic.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testArxivClient.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testArxivConfigureRoute.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testArxivPathTraversal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAssessedRerunLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAttainingALevelDoesNotLowerAnother.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAttestationRevalidation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAttributionLog.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testAttributionLogConcurrentAppends.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBackgroundTasksAreReferenced.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBadgeState.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBaseImagePin.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBaseImagePinLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBinaryDeclaration.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBinaryDrift.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBinaryStaleWarning.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBindMountRefusesAbsentSource.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBootstrapEndpoint.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBothBuildLanesPreflightAlike.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBoundedPriorHash.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBreachOutcomeDeterminism.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBridgeGateway.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBrowserCredentialPresentation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBrowserLaneParallelSafety.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBrowserSession.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBuildArchiveSnapshot.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBuildCacheInvalidation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBuildErrorClassification.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBuildFailureModalFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBuildInputHash.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBuildKitRequirement.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBuildProgressRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBuildSilenceIsReported.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testBuildTailKeepsTheReason.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCancelledRunLeavesItsLog.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCapabilitiesSurviveMalformedTypedReads.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCarrierIntentAudit.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCarrierModeDeclaration.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCgroupMemory.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testClaimRequiredRefusal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testClaimRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testClaudeCodeRendererLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testClaudeCodeRendererVerdict.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCliActionCommands.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCliApiCommands.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCliCommands.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCliExecIsCleanedUp.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCliExecLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCliHubSessionMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCliMain.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCliPipelineDispatch.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCliStatusDestroy.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCliSubcommands.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCliTemplateProjectTowardLevelThreeLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoherentExport.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoherentExportLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testColimaHostagentLogProbe.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testColimaVersionPreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandBuild.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandBuildBaseImagePin.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandBuildPipFlags.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandBuildPreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandDoctor.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandGenerateStandards.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandReconcile.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandSecret.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandSessions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandSetupDocker.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandStartGui.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandStartPreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandUtilities.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommandUtilsDocker.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommitCarrier.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommittedFileRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCommittedFiles.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testComparisonPolicyNotes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCompletePathCommand.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCompletionIsStateOnly.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConcurrentStateSaves.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConfigFieldPreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConfigLoader.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConfigurationFingerprint.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConfinedRead.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConfinedReadParity.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConfinedStreamingLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConfinedStreamingWrite.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConfinedTreeWrite.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConfinedWriteSignalDeath.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConftestCarriesTheContractVerbatim.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConftestLoaderKeepsCommittedFilesStable.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConftestManagerCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConftestManagerMarker.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConftestPerTestMarker.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConftestRefreshBeforeRun.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConftestRefreshSparesStepsWithoutTests.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConnectHubOwnershipGate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConnectionCheck.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConnectionRouter.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerAcceptance.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerBuildIntegration.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerConfig.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerGuidanceMatchesCatalog.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerLifecycleGating.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerLock.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerMemoryRoute.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerMemoryWatch.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerMemoryWatchLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerOwnership.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerRepairIsLifecycleSafe.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerSessionResolution.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContainerSweepSparesHostProjects.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testContentSecurityPolicy.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConvertConfigRewrite.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testConvertToContainerRoute.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilAdmissionLogIsBounded.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilBaselineOffLoop.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilCampaignName.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilChat.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilControllerSerialization.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilCrashRecovery.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilCredentialAdmission.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilCredentialStore.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilCredentialTestJob.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilCredentialTestJobLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilDurableProvenance.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilEvidenceContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilExecutionPermissionNote.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilGateDecisions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilGatewayAuthority.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilGatewayLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilIdleVeto.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilManifestConfinement.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilNotesAndDeliberationSummary.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilPause.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilPeerHubIsolation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilPeerHubIsolationLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilPhaseAttempts.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilPhaseInFlight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilResume.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilRetry.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilRunnerAccess.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilRunnerExecutableMounts.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilRunnerLimitsFollowTheDaemon.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilShutdownOrder.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilSnapshotCapacity.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilSnapshotCredentialExclusions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilSnapshotRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilSnapshotScope.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilStoppingPoint.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilStorePersistence.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilStoreRetention.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilTurnBudgetsAreEnforced.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCouncilWorkingSpaceReserve.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageBroadGaps.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCliDoctorChecks.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCliDoctorCommand.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCliReconcileRepairOpen.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCliRemote.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCliStandardsAndActions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCliUnreadableProjectFile.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCoreCommitCarrier.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCoreDataLoaders.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCoreEnvironmentDeletion.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCoreFileStatusManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCoreGitStatus.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCoreHostConnection.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCoreOperationJournal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCorePinnedEnvironment.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCoreServerLifespan.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCoreSessionLifecycle.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCoreStartReservation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCoreStateManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCoreTerminalContainment.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCouncilControllerRefusals.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCouncilProviderAdapters.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCouncilStateCampaign.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCouncilStateChat.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCouncilStateCredentialTest.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCouncilStateEngine.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCouncilStateRouteHelpers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCouncilStateRunnerAndEgress.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCouncilStateSnapshotScope.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageCouncilStateStore.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageDockerContainerManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageDockerDisposableContainer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageDockerDisposableSpecification.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageDockerImageBuilder.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageDockerLifecycleRepair.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageDockerPinnedImage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageDockerRuntimeRemedies.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageHostControlHandlers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageHostControlSocket.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageReproducibilityDeterminismAndRerun.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageReproducibilityDockerfileExport.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageReproducibilityEnvironmentSnapshot.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageReproducibilityImageAcquisition.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageReproducibilityImageDeposit.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageReproducibilityLevelGates.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageReproducibilityRepoFiles.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageReproducibilityReproductionSource.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageReproducibilityZenodoArxiv.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageRoutesAFalsification.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageRoutesAFileRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageRoutesAPipelineSideEffects.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageRoutesATerminal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageRoutesBBuild.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageRoutesBGit.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageRoutesBPipelineServer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageRoutesBRegistry.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageRoutesBReplay.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageRoutesBReproduction.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageRoutesBStep.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCoverageTargeted.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCreationWizardRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCredentialRedactionIsBySpan.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCredentialRedactor.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCredentialRedactorMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCredentialTestErrorsStayClean.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCrossMachineUserVerification.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testCrossWorkflowStateErasure.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDaemonCapacity.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDaemonDiskPreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDashboardColumnsFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDataArchiverExtended.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDataArchiverMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDataLoaders.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDataLoadersCsvErrorPaths.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDataLoadersMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDataLoadersStayOutOfTheHub.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDataPreviewInjection.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDeclarationFreshness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDeclarationPushMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDeclarationStepHonorsTheSlugContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDeclaredGuaranteesAreAnchored.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDeclaredPackagesMatchTheImage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDependencyDismissalRoute.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDependencyPinningMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDependencyReconciliationGatesLevelOne.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDependencyScanner.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDepositIsNotDownloadedTwice.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDepositSeams.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDeterminismEnvHonesty.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDeterminismGate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDeterminismRowMatchesItsGate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDeterministicGeneratorIsAgentSafe.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDeterministicTestGenerator.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDigestTimestampNaming.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDirectTestRunsRestoreTheMarkerPlugin.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDirectoryListing.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDiskSpace.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDisposableContainerLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDisposableSurvivorReclaim.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerBinaryIsolation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerBuild.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerConnectionExecResult.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerConnectionLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerContext.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerErrorDiagnosis.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerHostContextRoundTrip.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerLiveDaemonRequirement.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerRuntimeClassification.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerStatusEndpoint.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerfileComposition.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerfileHardening.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerfileLint.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerfileLintMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerfileNetworkRetries.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDockerfileProvenance.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDocsMatchWorkflowTriggers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDocsPublishedLinksResolve.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDoctorFindingsNameACommand.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDoctorInterpreterArchitecture.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDoctorIsReadOnly.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDoctorNetworkGraph.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDoctorNetworkLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDoctorProjectScope.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDoctorScopesAndExitCodes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDoctorShellCompletions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDownloadRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testDurableFile.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointAdvertisedPaths.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointAgentDocLinks.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointAgentSkills.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointBuildBinary.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointCallsOnlyFunctionsItDefines.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointClaudeSettings.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointGitCredentials.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointInstructionPrecedence.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointMigration.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointPipNotAPackage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointReadinessMarker.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointRepairsBrokenDocLinks.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointRepoRefs.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointResourcesGuidance.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEntrypointRootPhasePath.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEnvelopeImageCurrency.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEnvelopeRegenerationReportsItsDelta.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEnvelopeTierResultsAreVisible.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEnvironmentArchive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEnvironmentArchiveStop.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEnvironmentDeletion.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEnvironmentDrift.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEnvironmentSnapshot.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEnvironmentSnapshotMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEphemeralStore.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testEveryLevelTwoSyncRefusalIsNamedByABlocker.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testExecSocketExchange.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testExecutionProfiles.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testExecutionProfilesLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testExhaustiveCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testExitCodesAreExplained.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testExplicitReleaseAuthority.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFailedSaveGroundTruthFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFalsificationAttestation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFalsificationAttestationMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFalsificationRoutesCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFalsificationSharding.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFigureServer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFigureViewerFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFileBrowserEscapingFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFileEndpointsAndMiddleware.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFileStatusManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFileStatusManagerInvalidation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFileStatusManagerProofAdditions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFileStatusManagerStaleness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFileStatusManagerTimestamps.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFileTransfer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFinalCoverageGaps.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testForcePushArgumentOrder.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testForeignManifestGuard.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testForwardedHostPortFree.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFreshnessUncheckedLevelOne.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testFunctionLengthStatement.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGatesRunOnEveryPullRequest.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGenerateReproducibilityEnvelope.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGeneratedFileNamesAreStepNamed.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGitBadgesPartialRenderFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGitRoutesProjectRepoSync.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGitRoutesRemoteUrl.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGitStatus.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGithubAuth.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGithubMirror.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGithubRemoteIsDerivedNotDeclared.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGithubRoutesProjectRepoCwd.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGithubTokenBinding.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGithubTokenResolution.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGithubWorkflow.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGracefulExitsChecker.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGuiBuildWarnsAboutTheMachine.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGuiLaunchHonesty.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testGuiTemplateManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHarnessHookMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHashStaleness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHashStalenessCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHashStalenessIntegration.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHashStalenessManifest.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostBusyOracle.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostCapabilityInventory.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostClaimPath.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostCliRunsThroughTheHub.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostCliSession.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostConfinedRead.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostConnection.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostControlChannel.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostGitSafetyProbes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostHeaderCheck.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostIncidents.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostModeDaemonGate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostModeProjectRoots.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostPrerequisiteReport.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostProjectAsksGitWithoutTimeoutBinary.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostReadNeedsDirectoryRelativeAccess.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostResidueStaysInsideOneProject.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostScratchSweeper.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostSnapshotTwin.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostStreamingWrite.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostSubprocessConfinement.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostTerminal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHostTransfer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHubAppGovernance.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHubDoctorRoute.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHubIdleWatchdog.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHubPortRegistry.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHubSessionCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testHubShutdownSignals.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testIdleWatchdogOffLoop.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testImageAcquisition.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testImageArchiveVersioning.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testImageBuilder.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testImageBuilderExtended.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testImageLocale.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testImageTrustAnsweredForThePin.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testImageTrustCommandLine.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testImageTrustProvenanceRows.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testImageTrustTextHasOneHome.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testInitRegistrationOutcome.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testInitTemplateRepositories.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testInjectionGuards.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testInlineCodeCommandsPassPreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testInputDataStaleness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testInstallScriptAgents.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testInteractivePauseSurvivesReconnect.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testInteractiveSteps.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testIntrospectionScriptGaps.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testIntrospectionTfrecord.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testInventoryRepositoryGitSurface.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testKeepAliveManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testKeepAliveSpawnLedger.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testKeychainIsolationCrossesProcesses.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testL3AttestationMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLatexAnnotation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLatexConnectorExtended.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLeaseSessionBinding.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLedgerFormatIsCanonical.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLegacyBuilderLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLevelBlockers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLevelCellsNeverOverstate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLevelContiguousClimbContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLevelGateL2Blockers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLevelGateL3.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLevelGateL3Blockers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLevelGatesBlockerCache.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLevelGatesCoverage2.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLevelGatesStepClassifiers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLevelReportCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLevelRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLevelTwoRechecksLocalBytes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLifecycleLogging.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLinuxDockerPreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testListModules.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLiveLanesLabelWhatTheyCreate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLiveSessionBoundary.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testLlmInvokerBranches.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMachineAttention.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMakeDirectory.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testManifestCheck.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testManifestCheckReport.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testManifestCompletenessAsksTheWriter.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testManifestOwnershipFromSnapshotFacts.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testManifestPaths.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testManifestVerifyRoute.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testManifestWriter.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testManifestWriterMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMarkerAppliedToUnnecessaryStep.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMarkerBookkeepingIsIgnored.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMarkerDigestVerdicts.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMarkerFreshnessLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMarkerFreshnessPoll.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMarkerHashesTemplatedPlots.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMarkerLevelGate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMarkerNamespaceFromLoadedWorkflow.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMarkerStaleness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMatplotlibSaltIsolation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMatplotlibSaltIsolationLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testModelIdsAreHeldToPlainShapes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testModuleAttributeReferencesResolve.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMtimeCache.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMutationAttribution.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testMutationScannerTypeCheckingExemption.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testNetworkEfficiencyFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testNoProjectOpenRefusal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testNoQuoteBlindEscaperInTheFrontend.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testNoUnforwardedUrlsInRemoteSession.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testObtainedBaseStacksLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOldMarkerReadsAsItAlwaysDid.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOomAttribution.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOperationJournal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOperationJournalMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOrphanTransition.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOrphanedPublishMachinery.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOrphanedTerminalsAreEnded.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOrphanedWriteTemporaries.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOutputFreshnessByContent.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOutputProvenance.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOverlayBannersReadTheStepFirst.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOverleafBehavior.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOverleafChipAgreesWithRows.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOverleafFetchHashes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOverleafMirror.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOverleafPushProvenance.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testOverleafSyncCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPackagedResources.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPathContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPathTraversal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPathValidation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPendingPromotionRecord.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPerContainerStateLifecycle.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPidFileRegistry.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPinnedEnvironmentDrift.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPinnedImageAcquisition.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineLogAppend.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineLoggerCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineLoggerRotation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineRoutesDiagnostics.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineRoutesEtag.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineRoutesManifestText.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineRoutesMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineRoutesShaCache.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineRunnerCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineRunnerErrors.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineRunnerExtended.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineRunnerOffLoop.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineRunnerPure.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineRunnerStepsAndLog.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineRunnerStreamingEmitter.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineServerAgentAuth.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineServerCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineServerGaps.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineServerLifespan.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineServerPure.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineServerTaskEviction.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineState.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineTestRunnerCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPipelineUtilsScaling.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPlotRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPoisonRecord.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPortAllocator.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPostPushVerifyFollowsTheSharedPredicate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPreferencesRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPreferencesStore.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPreflightResult.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProcessLiveness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProjectAdoption.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProjectAdoptionFalsification.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProjectBookkeepingSidecar.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProjectConfigExtended.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProjectContextRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProjectDepositPromotion.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProjectHubRefusals.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProjectScopedAgentActions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProjectScopedRegistries.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProjectSwitchWithinContainer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPromotionRecovery.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPromptRecordAgentsLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPromptRecordPollFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPromptRecordPublishesNoRawDigestOracle.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPromptRecordViewer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProofGateLevel1.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProofLevelInPollResponse.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProvenanceCommitDuringRun.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProvenanceContractMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProvenanceTaint.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProvenanceTracker.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProvenanceTrackerMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testProviderApiTransport.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPublishLogsNameOnlyPublicIdentifiers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPublishedReproductionWorkflow.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPullFromContainer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testPythonPackagePreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testQuarantineDetailRoute.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testQuarantineRefusalNamesItsCause.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testQuickStartJourneyThroughRoutesLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRandomnessLint.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReadOnlyCouncilRunsNoCommands.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReaderRecordIsNeverCommitted.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReaderRunReplaysRecordedEpoch.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReadinessRoute.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReclaimNeverTreatsANameAsAnId.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReconcileNothingToReconcileExitsZero.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReconcileQuarantineRoute.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReconciliation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReconciliationMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReconfirmFalsificationJudgesKills.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReconnectWindowContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRecordedEpochReplay.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRefactoringCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRefreshRemotes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRefuseUnexecutedCommandFields.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRefusedArchiveConversionChangesNothing.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRegistryContainerRecognition.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRegistryIsNotAnL3Requirement.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRegistryRemovalIsLeaseEnforced.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRegistryRouteLockState.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRegistryRoutesCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRemainingGaps.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRemnantReapers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRemnantRemovalLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRemnantScanner.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRemnantScannerLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRemoteClient.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRemoteDataOverwriteGate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRemoteDataRecordIdentity.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRemoteProtocol.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRemoteReattachment.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRemoteSessionLane.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRemoteSshLane.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRenameKeepsPerTestMarkerSections.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReplayGate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReplayRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRepoFilesMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRepoRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRepoStatusTypedRead.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReposPanelFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReposPollingFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRepositoryPreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceCommand.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceCommandAttestation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceFromSnapshot.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceFromSource.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproducePublishedFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceRerunHashCompare.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceScriptContainerHalf.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceScriptDeterminism.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceScriptGateRejectsResidualTokens.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceScriptGenerator.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceScriptParity.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceScriptParityLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceTierParity.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproduceTierThreeRemedy.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproducibilityRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproductionLabelInPollResponse.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproductionLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproductionProgress.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproductionRecordBindsItsEvidence.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproductionRecordPlatform.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproductionRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testReproductionSource.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRequirementsMirrorNamesWhatItDrops.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRerunAssessmentEvidence.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRerunAssessmentImageCheck.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRerunAssessmentPrecedence.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRerunAssessmentStructure.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRerunAssessmentTranscription.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRerunDiagnostics.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRerunHashCompareMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRerunProcedureGuards.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRerunRefusesUnexecutedSteps.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testResourceAdequacy.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testResourceLimitDrift.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testResourceLimitLiveApply.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testResourceLimitLiveApplyLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testResourceLimitRoundTrip.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testResourceLimitSettings.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testResourceLimits.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testResourceMonitor.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRouteContextCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRoutesRefuseCallerPathsOutsideTheirRoot.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRowAndGateAgreeOnManifestFreshness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRunAllRespectsDisabledFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRunFrameWithABadStepIsRefusedNotFatal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRunStateWireCarriesStepResults.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRuntimeSetupPlan.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRuntimeSetupRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testRuntimeSetupRunner.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSafeReaper.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSandboxArchiveWithholdsLevel3.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSecretAvailability.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSecretFilesFollowTheirContainer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSecretManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSecretNamesWithSeparatorsCanBeStagedAndMounted.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSecurityBoundaryInvariants.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSeededFolderRepositoryListLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSemanticWorkflowFingerprint.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testServerLaunchContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testServerMiddlewareCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSessionCapSetting.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSessionCardinality.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSessionEndingNotice.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSessionLaneFollowsClaim.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSessionLifecycleEvaluator.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSessionLifecycleFoundation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSessionRenewalAndWarningBands.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSessionSpawnRoute.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSetupWizard.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSetupWizardIsGuarded.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testShadowContainerAdmission.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testShadowLaneLockFiles.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testShellCompletionInsertion.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testShellCompletionPositions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testShellCompletionWiring.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testShellSetupVersioning.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSignOffCapturesPlotBytes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSignOffIsDatedByTheContainerClock.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSignOffReconciliationByContent.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSkillIntegrity.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSleepPreventionFollowsWork.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSnapshotAnswersBlobShaAndMissing.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSnapshotCacheRacyClean.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSnapshotNamesStayInsideTheRoot.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSpawnedWindowSignsIn.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStaleCapturedWorkflow.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStaleOutputAdvisoryIsNotADeadPayload.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStaleOutputDetector.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStaleReproduceScriptIsNotRunnable.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStandardsGenerator.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStandardsLoader.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStartLaunchCommands.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStartPreflightExtensions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStartReservationFalsification.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStateContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStateDirectoryIsolation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStateLevelHighWater.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStateManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStateRecovery.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStateWriteLock.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStaticAnalysisClean.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStatusContextLine.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepDirectoryValidator.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepEditFingerprintFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepEditorFingerprintLifetimeFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepGateAgreesWithManifestWriter.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepLabels.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepListRenderFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepRename.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepRenameCascadeMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepRenameCascadeReachesEverything.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepRenameMoveCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepRendererBlockerGlyphs.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepSlugContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepSlugMirrorEquivalence.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepTestLogDirectory.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepUpdateDestructiveGuard.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStepVerdictFromRuns.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStochasticDetector.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testStopByRunMarkerLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSupervisionChipFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSupervisionWatchdog.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSymbolicStepReferencesAreChecked.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSyncDispatcherMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSyncDispatcherPure.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSyncEpoch.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSyncEpochReachesTheIdleDashboard.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSyncErrorClassification.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSyncErrors.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSyncProjectionCoversEveryPublishedPath.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSyncRoutesPushHardening.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSyncRoutesPushIdempotency.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSystemPackagePreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testSystemPackageValidation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTemplateManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTemplatedPlotMarkerInAContainerLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTerminalContainmentLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTerminalPromptReset.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTerminalPromptResetLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTerminalRedialContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTerminalResizeOrdering.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTerminalRoutesCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTerminalSelectionContrast.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTerminalSession.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTerminalStartWindowIsDrained.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTerminalTeardownSurvivesShutdownCancellation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTestGeneratorBranches.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTestGeneratorPure.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTestMarkerContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTestMarkerSystem.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTestRoutesCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTestsAndSignOffFollowThePlotBytesLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTextIoNamesItsEncoding.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTheArchiveIsAskedWhatItStored.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTheBlockedMapOutlivesTheArrow.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTheDashboardSettingsReachEveryMode.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTheLockIsCheckedBeforeARerunIsSpent.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTheLockVerdictCarriesItsFingerprint.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTheManifestDescribesTheFilesItShipsWith.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTheNextStepIsNamedOnlyWhenOrderMatters.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testThePollDoesNotRewriteWhatItReads.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTheReadinessRouteAnswersARequest.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTheRerunSaysWhatItCosts.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTheScalarGateHasNoSecondList.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTheSignOffSaveReadsOnlyLevelOne.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTheSnapshotIsADeclaredRead.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTimedCommandComposition.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTimedCommandsLive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testToolchainEpoch.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testToolchainPinDrift.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTopologyCorrectFileActions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTrackedIndexBeyondSymlinkBucket.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTranscriptSanitizer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTranscriptSanitizerCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTranscriptSanitizerJsonRecords.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTranscriptSanitizerParallel.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTranscriptSanitizerSplitSecrets.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTransferResolvesRelativeContainerPaths.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTruthDerivation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testTypeAloneStopsTheSwallow.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testUncoveredLibrariesAreNamed.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testUndiscoveredTerminalRecordSettles.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testUnloadDoesNotReleaseContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testUnseededRandomnessReachesLevelThree.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testUploadRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testVaibifyDoCli.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testVaibifyDoHeadless.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testVaibifyDoUnansweredRequest.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testVaibifyOpen.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testVendoredPdfJs.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testVerificationLiveOutput.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testVerifyRemoteIsBoundToThePush.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testVerifyResolvesPlotPathsWhereTheRunWritesThem.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testVirtiofsRetry.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testVolumeCommandsStayOffTheTerminal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testVolumeManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testVsCodeAttachLink.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWallClockBudget.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWebSocketAuthorization.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWithdrawnTerminalLegacyRecords.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWizardDirectoryPickerContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWizardsShareOneRepositoryAuthority.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowDiscoveryLegacyRoot.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowFieldTypesAreValidatedAtLoad.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowLoadingBannerFrontendContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowManagerMutationCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowManagerScaling.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowMergeGateSplit.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowMigrations.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowMigrationsAICSLevel.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowMigrationsProofLevelRename.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowReloadDetector.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowRoutesCoverage.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowSchemaForwardCompat.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkflowSwitchGenerationContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWorkspacePath.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testWritableLayerLoss.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testX11Settings.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testZenodoCandidatesCoverLevelThree.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testZenodoClient.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testZenodoClientExtended.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testZenodoDatasetDownloadIsWithdrawn.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testZenodoFetchHashes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testZenodoLookupPatience.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testZenodoPublishWhereTheRecordIs.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testZenodoServiceAuthorities.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/testZenodoUploadResilience.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/timingSupport.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tests/typedHashDouble.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/bootstrapAcceptanceContainer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/carrierIntentAudit.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/checkAgentDocsPaths.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/checkAmericanSpelling.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/checkBrowserLaunches.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/checkInstalledDistribution.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/checkToolchainEpoch.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/checkToolchainPinDrift.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/computeBuildInputHash.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/deriveLaneSelection.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/evaluateSkillOutcomes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/evaluateSkillTriggers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/generateHostCapabilityInventory.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/generateStyleInventory.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/inventoryRepositoryGitSurface.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/ledgerFormat.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/listModules.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/mutationAttribution.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/reconfirmFalsification.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/skillEvals/outcomeTasks.json +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/skillEvals/triggerPrompts.json +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/summarizeFalsificationShards.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/tools/syncRequiredChecks.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/__init__.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/__main__.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/__init__.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/baseImagePreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandCat.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandCompletePath.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandConfig.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandGenerateStandards.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandLs.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandOpen.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandPublish.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandRegister.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandRemote.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandRemoteHelper.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandRepair.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandReproduce.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandRun.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandSecret.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandSessions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandSetupDocker.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandStatus.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandUtilsDocker.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandVerifyStep.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/commandWorkflow.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/configLoader.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/daemonDiskPreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/doctorHostChecks.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/doctorProjectChecks.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/imageTrustPrompt.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/levelReport.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/portAllocator.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/preflightChecks.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/preflightResult.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/pythonPackagePreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/remoteProtocol.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/repositoryPreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/cli/systemPackagePreflight.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/__init__.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/abandonmentAudit.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/agentTerminalEnvironment.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/analysisStack.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/configurationFingerprint.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/connectionAvailability.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/durableFile.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/hostResidue.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/hubPortRegistry.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/imageTrust.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/modelIdentity.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/operationJournal.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/pendingConversions.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/pidFileRegistry.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/preferencesStore.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/processLiveness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/reconciliation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/resourceAdequacy.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/resourceLimits.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/secretAvailability.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/secretManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/templateManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/config/workerProcessPool.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.antigravity +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.claude +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.claudeArmOnIntel +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.cline +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.codex +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.gemini +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.julia +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.jupyter +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.node +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.opencode +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.openhands +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.pi +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.rlang +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/Dockerfile.uv +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/overlays/database.dockerfile +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/overlays/dvc.dockerfile +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/overlays/gpu.dockerfile +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/overlays/nestedSampling.dockerfile +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/skills/create-pipeline-step/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/skills/dashboard-map/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/skills/diagnose-failed-run/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/skills/graceful-exits/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/skills/graceful-exits/checkGracefulExits.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/skills/read-manuscript/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/skills/reproducible-analysis/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/skills/running-steps/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/skills/session-budget/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/containerImage/skills/vaibify-doc-map/SKILL.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/__init__.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/bridgeGateway.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/buildKitRequirement.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/cgroupMemory.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/coherentExport.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/confinedRead.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/confinedWrite.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/daemonCapacity.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/daemonDescription.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/execArgumentBudget.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/fileTransfer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/imageBuilder.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/keepAliveManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/pathContainment.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/runtimeRemedies.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docker/writableLayerLoss.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docs/scriptAuthoring.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/docs/testing.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/__init__.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/acquisitionFailure.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentClientFreshness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncil.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilAntigravityProvider.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilCampaign.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilCapacity.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilCharter.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilChat.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilCodexProvider.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilController.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilCredentialGate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilCredentialStore.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilCredentialTest.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilCredentialTestRecords.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilCredentialTestRecovery.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilEvidence.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilEvidenceContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilManifest.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilProviderRegistry.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilProviders.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilReadiness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilResolution.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilRunner.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilSnapshotScope.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilStagedCopies.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentCouncilStore.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentProjectScope.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/agentSessionBridge.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/aiProvenanceCapture.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/archiveProgress.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/attributionLog.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/backgroundTasks.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/badgeState.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/browserSession.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/cliShellContainment.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/commandUtilities.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/connectionRouter.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/containerMemorySampler.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/containerMemoryWatch.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/councilRouteGuards.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/dataLoaders.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/dependencyScan.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/dependencyScanner.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/determinismEnvironment.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/deterministicTestWriter.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/diskSpace.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/dockerStatus.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/draftManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/executionTopology.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/figureServer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/fileIntegrity.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/gitStatus.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/hashStaleness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/hostBusyOracle.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/hostIncidents.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/hostModeReturn.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/interactiveSteps.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/introspectionScript.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/llmTestGeneration.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/machineAttention.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/manifestCheck.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/mtimeCache.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/outputProvenance.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/pathContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/personalLayerManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/pipelineLogger.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/pipelineRunSlots.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/pipelineState.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/pipelineTestRunner.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/pipelineUtils.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/projectAdoption.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/projectContextManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/projectRoots.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/promptRecordViewer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/provenanceCommitter.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/providerApiTransport.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/randomnessLint.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/remnantReapers.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/remnantScanner.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/reproductionProgress.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/rerunEvidence.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/researcherNotices.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/resourceLimitApplication.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/resourceMonitor.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/committedFileRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/connectionCheckRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/councilChatRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/councilCredentialRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/councilRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/councilSnapshotRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/downloadRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/draftRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/figureRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/gitRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/imageTrustRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/levelRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/plotRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/preferencesRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/promptRecordViewerRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/remnantRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/remoteRefreshRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/replayRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/repoRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/runtimeSetupRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/scriptRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/settingsRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/stepRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/terminalRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/routes/uploadRoutes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/runOutputBaseline.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/sleepPrevention.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/staleOutputDetector.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/standardsFiles.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/startResultStore.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/startupObservations.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/stateWriteLock.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/favicon.png +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/favicon.svg +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptAcquisitionWindow.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptAgentCouncil.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptAiModelConfig.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptApiClient.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptArxivConfig.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptBinaryDeclaration.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptCouncilConsent.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptCouncilSnapshotScope.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptDiagnosis.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptDirectoryBrowser.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptDraftManager.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptEnvironmentInfo.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptFigureViewer.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptFileDropWalker.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptFileOperations.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptFileOutcomes.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptFilePull.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptFileRowMenu.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptFileUpload.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptFiles.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptGitBadges.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptImageTrust.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptLegendPanel.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptManifestCheck.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptMemoryWatch.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptModals.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptNewWorkflowWizard.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptOverleafMirror.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptPersonalLayer.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptPipelineRunner.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptPlotStandards.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptPolling.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptProjectContext.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptPromptRecordConfig.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptPromptRecordViewer.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptRemnants.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptReposPanel.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptReproducePublished.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptRuntimeSetup.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptSetupWizard.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptStepEditor.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptTerminal.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptTestManager.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptUtilities.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptWebSocket.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/scriptZenodoDepositCard.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/setupWizard.html +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/vaibify_logo_paleblue.png +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/vaibify_logo_paleblue_dark.png +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/vendor/addon-fit.min.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/vendor/addon-unicode11.min.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/vendor/pdf.min.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/vendor/pdf.worker.min.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/vendor/xterm.min.css +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/static/vendor/xterm.min.js +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/stepDependencyScan.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/stepRename.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/supervisionAnchor.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/templateManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/terminalContainment.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/testGenerator.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/testMarkerContract.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/testParser.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/testStatusManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/trackedReposManager.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/transcriptSanitizer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/truthDerivation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/uploadStaging.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/verificationProgress.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/vscodeAttachLink.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/workflowFieldTypes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/workflowMigrations.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/workflowReloadDetector.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/workspacePath.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/gui/writableLayerPreview.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/host/__init__.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/host/archiveExtraction.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/host/hostCancellation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/host/hostScratch.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/install/__init__.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/install/runtimeSetupFacts.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/install/runtimeSetupPlan.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/install/runtimeSetupRunner.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/install/runtimeSetupSupervisor.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/install/setupServer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/install/shellSetup.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/install/uninstallVaibify.sh +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/__init__.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/_hashing.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/agentLayerSeparation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/aiDeclarationStep.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/aiProvenanceStamp.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/answeredQuestion.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/archiveDepositPlan.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/archivePermanence.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/arxivClient.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/askpassHelper.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/assessmentLane.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/committedFiles.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/comparisonPolicyNotes.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/comparisonPolicyV1.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/connectionCheck.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/credentialRedactor.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/dataArchiver.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/declarationFreshness.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/declaredPackages.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/dependencyFindings.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/determinismGate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/dockerfileComposer.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/dockerfileLint.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/downloadPartial.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/environmentDrift.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/executionProfiles.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/falsificationAttestation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/gitEvidence.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/gitHardening.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/githubAuth.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/githubWorkflow.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/imageAcquisition.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/imageArchive.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/imageDeposit.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/imageDockerfileExport.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/latexConnector.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/levelOrdering.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/lockSatisfaction.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/manifestPaths.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/manifestWriter.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/overleafAuth.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/overleafMirror.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/provenanceTracker.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/rangedHttpTransport.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/remoteCheckState.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/replayGate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/reproduceScriptGenerator.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/reproductionLabel.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/reproductionRecord.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/reproductionSource.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/rerunAssessment.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/rerunDiagnostics.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/rerunEstimate.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/rerunPreparation.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/rerunProcedure.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/rerunVerification.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/resumableDownload.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/reproducibility/stepPredicates.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/resources.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/templates/sandbox/container.conf +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/templates/toolkit/README.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/templates/toolkit/container.conf +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/templates/toolkit/project.json +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/templates/workflow/GenerateSamples/generateSamples.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/templates/workflow/PlotHistogram/plotHistogram.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/templates/workflow/container.conf +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/templates/workflow/project.json +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/templates/workflow.yml.j2 +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/testing/__init__.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/testing/standards.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify/testing/stochasticDetector.py +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify.egg-info/dependency_links.txt +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify.egg-info/entry_points.txt +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify.egg-info/requires.txt +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/vaibify.egg-info/top_level.txt +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/website/.gitignore +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/website/README.md +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/website/public/404.html +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/website/public/_headers +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/website/public/assets/favicon.png +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/website/public/assets/vaibifyDashboard.png +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/website/public/assets/vaibifyLogo.png +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/website/public/index.html +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/website/public/robots.txt +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/website/public/sitemap.xml +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/website/public/styles.css +0 -0
- {vaibify-0.2.2 → vaibify-0.2.3}/website/wrangler.toml +0 -0
|
@@ -0,0 +1,1104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reproducibility-lane
|
|
3
|
+
description: Contracts for vaibify's reproducibility machinery: PROOF levels and their gates, the L3 shadow rerun, attestations, determinism declarations, reproduce.sh, the environment archive, Zenodo deposits, and reproducing a published project. Use when touching anything under vaibify/reproducibility/, the level gates, the PROOF tab, or an attestation lane.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Working on the reproducibility lanes
|
|
7
|
+
|
|
8
|
+
These are the contracts the attestation machinery rests on. Every one
|
|
9
|
+
of them was established by a defect that reached a researcher, and
|
|
10
|
+
most name the test that guards them. A test is kill-confirmed only
|
|
11
|
+
when `tests/falsificationRegistry.py` carries its node id (grep it
|
|
12
|
+
there before calling it so), and several named here have no entry:
|
|
13
|
+
the live legs `tests/testRerunVerifiesWhatItRan.py`,
|
|
14
|
+
`tests/testDisposableContainerLive.py` and
|
|
15
|
+
`tests/testReproductionLive.py`; `testBothLanesGradeOneTreeAlike`,
|
|
16
|
+
`testReproductionSourceNamesNoForgeHostname`,
|
|
17
|
+
`test_no_reader_of_the_record_fetches_a_url_on_trust` and
|
|
18
|
+
`testFnWriteFileDefaultsToContainerUserOwnership`; and the files
|
|
19
|
+
`tests/testRegistryIsNotAnL3Requirement.py`,
|
|
20
|
+
`tests/testDaemonCapacity.py` and
|
|
21
|
+
`tests/browser/testVerifyWarnsBeforeCopyingTheProject.py`. Read the
|
|
22
|
+
sections that cover the lane you are touching before you edit it.
|
|
23
|
+
|
|
24
|
+
The repository-wide rules in `AGENTS.md` still apply; this file is
|
|
25
|
+
the detail for this subsystem.
|
|
26
|
+
|
|
27
|
+
**Determinism is ONE question, and answering is the criterion
|
|
28
|
+
(2026-10-17, superseding the three-question ruling of 2026-08-30).**
|
|
29
|
+
The block asks how much speed vaibify should trade for repeatable
|
|
30
|
+
files. `sRepeatabilityAnswer` is `speed` or `across`; either passes and
|
|
31
|
+
only silence fails, exactly as for Personal AI Configuration. The
|
|
32
|
+
answer changes how steps run, never what Level 3 requires. Four things
|
|
33
|
+
not to undo:
|
|
34
|
+
|
|
35
|
+
- **The researcher never names a profile.** The SERVER writes
|
|
36
|
+
`sExecutionProfile` as the newest table version for the answer
|
|
37
|
+
(`executionProfiles.fsNewestProfileForAnswer`), and a request naming a
|
|
38
|
+
profile or a legacy answer is refused
|
|
39
|
+
(`testACallerCannotNameAProfileOrALegacyAnswer`). An answer without
|
|
40
|
+
its profile is half an answer.
|
|
41
|
+
- **The answer lives in its own key**, because a VALUE cannot express
|
|
42
|
+
consideration — the lesson of the old `bAcceptBlasVariance: false`,
|
|
43
|
+
which meant "unanswered" and "declined" at once. The three legacy
|
|
44
|
+
answers are kept on disk and answer nothing
|
|
45
|
+
(`testTheLegacyAnswersDoNotAnswerTheQuestion`).
|
|
46
|
+
- **The schema-v14 migration is a no-op**: three old answers imply
|
|
47
|
+
neither new one, so the question opens again. It spells no key the
|
|
48
|
+
gate reads (`testTheV14MigratorSpellsNoKeyTheGateReads`); the v13
|
|
49
|
+
migration and its literal-key pin stand as they were.
|
|
50
|
+
- **Researcher-facing wording** (`listChoices`, `sWhy`, `sConsequence`)
|
|
51
|
+
lives in `LIST_DETERMINISM_QUESTIONS` beside the gate, travels on the
|
|
52
|
+
poll, and never carries a schema key. Changing the answer retires
|
|
53
|
+
the current attestation, which stays on file as history
|
|
54
|
+
(`testChangingTheAnswerRetiresTheAttestationAndKeepsIt`).
|
|
55
|
+
|
|
56
|
+
**The answer is ordered (2026-10-27).** `levelOrdering` has edges from
|
|
57
|
+
the Project block's `determinism-repeatability` row to the manifest,
|
|
58
|
+
the rebuild attestation and both published envelopes, judged by the
|
|
59
|
+
gate's own unanswered list, as the poll's row is. Each reason is
|
|
60
|
+
CONDITIONAL, because an unanswered project already runs, records and
|
|
61
|
+
verifies under the speed settings: answering "Prioritize speed"
|
|
62
|
+
afterwards undoes nothing, so no reason may claim an undo for it
|
|
63
|
+
(`test_an_unanswered_determinism_question_is_named_before_the_envelope`).
|
|
64
|
+
The arrow is an endgame device, so the costliest order of all --
|
|
65
|
+
answering before the run that makes the outputs -- is said by the
|
|
66
|
+
in-container proof-ladder skill, not by the arrow.
|
|
67
|
+
|
|
68
|
+
**Only the GitHub sync push records where a push landed (2026-10-27).**
|
|
69
|
+
The GitHub verify is bound to that host-side record, and the sync push
|
|
70
|
+
writes it only after checking that the researcher's token owns the
|
|
71
|
+
remote. The Repos panel runs no such check, and a push's real
|
|
72
|
+
destination can differ from the `origin` url the container wrote, so
|
|
73
|
+
it deliberately records nothing: a binding recorded there would let a
|
|
74
|
+
container agent steer the agent-safe verify, and the researcher's
|
|
75
|
+
token, at a repository of its choosing
|
|
76
|
+
(`testARepoPanelPushOfTheProjectRepoRecordsNoGithubBinding`). The
|
|
77
|
+
verify's binding check is asserted at the shared call site,
|
|
78
|
+
`fdictVerifyRemoteService`, with the fetch rigged to fail if reached
|
|
79
|
+
(`testAnUnboundRemoteIsRefusedBeforeAnyFetchAndTheRefusalIsRelayed`).
|
|
80
|
+
|
|
81
|
+
**Level 2 asks what a READER can retrieve (2026-10-30).** The verify
|
|
82
|
+
observes access with no credentials and records which remote its
|
|
83
|
+
evidence is about; two authorities in `levelGates`
|
|
84
|
+
(`fdictDescribePublicAccess`, `fdictDescribePublishedCopy`) answer
|
|
85
|
+
from that record, and every surface renders their answer.
|
|
86
|
+
`docs/architecture.md` "What a reader can retrieve" has the model. Five
|
|
87
|
+
things not to undo, each kill-confirmed in
|
|
88
|
+
`tests/testReaderAccessIsObservedAnonymously.py` or
|
|
89
|
+
`tests/testLevelTwoAsksWhatAReaderIsServed.py`:
|
|
90
|
+
|
|
91
|
+
- **No token reaches a reader-access request.** The GitHub probe's
|
|
92
|
+
request builder takes no token and its path never asks the keyring;
|
|
93
|
+
every Zenodo reader read goes through the one tokenless client,
|
|
94
|
+
`zenodoClient._fclientAnonymous`.
|
|
95
|
+
- **A restricted record withholds the comparison.** Nothing is hashed
|
|
96
|
+
when any declared record is known not to be public. A sibling's 429
|
|
97
|
+
never erases a known restriction, and an unchecked record with none
|
|
98
|
+
known closed writes nothing.
|
|
99
|
+
- **Each record is observed once.** The comparison and the attestation
|
|
100
|
+
read consume the same observations; a second fetch re-raised 404 and
|
|
101
|
+
aborted the verify before its verdict was saved.
|
|
102
|
+
- **Absent is not public, and evidence names its remote.** A record with
|
|
103
|
+
no `dictPublicAccess` reads unknown, never public, so a project does
|
|
104
|
+
not keep its level by having been verified before the question
|
|
105
|
+
existed, and an unknown verdict always charges a criterion, or the
|
|
106
|
+
header outranks the row. A record whose `dictRemoteIdentity` disagrees
|
|
107
|
+
with the push binding, the declared remote, the branch the next verify
|
|
108
|
+
would read (an omitted branch is the default, never "any") or the
|
|
109
|
+
declared record set is unknown.
|
|
110
|
+
- **The backoff is a deadline, never a sleep.** A 403 or 429 sets an
|
|
111
|
+
in-process deadline before which every probe raises without sending.
|
|
112
|
+
|
|
113
|
+
**The archive is a checkpoint, and carries a PROOF receipt
|
|
114
|
+
(2026-10-31).** GitHub and Zenodo face the same Level 2 gates; their
|
|
115
|
+
roles differ, so every project deposit (the promotion included, never
|
|
116
|
+
the environment image) is published as a PAIR: a checkpoint version,
|
|
117
|
+
then, once one coherent observation attains Level 2, a journaled
|
|
118
|
+
completion version with the same files and one receipt replaced.
|
|
119
|
+
`docs/architecture.md` "The archive is a checkpoint" has the model;
|
|
120
|
+
`proofCatalog` states Level 2 as data and `tests/testProofCatalogAgrees.py`
|
|
121
|
+
holds every copy to it; `proofReceipt` captures the observation and
|
|
122
|
+
builds schema version 1, which is archived and cannot change. Each item
|
|
123
|
+
below was proposed, and refuted, while the design was reviewed. Do not
|
|
124
|
+
reintroduce any of them:
|
|
125
|
+
|
|
126
|
+
- **Building the checkpoint receipt from repository reads.** A file can
|
|
127
|
+
change between the read and staging; the inventory is the STAGED
|
|
128
|
+
bytes, and exactly those bytes are uploaded.
|
|
129
|
+
- **"Level 2 met against the checkpoint."** The Zenodo verify accepts
|
|
130
|
+
any declared record, so the completion claims "met against the
|
|
131
|
+
declared record set" and says separately whether the checkpoint ALONE
|
|
132
|
+
holds every Level 2 file (`listCheckpointLacks`).
|
|
133
|
+
- **Matching inherited files by key.** By MD5 and size, against the
|
|
134
|
+
journaled inventory.
|
|
135
|
+
- **Rebuilding the completion receipt on resume.** Its bytes are stored
|
|
136
|
+
in `.vaibify/pendingReceipts/` before the draft exists; resume
|
|
137
|
+
uploads or compares only those, checked against the journal first.
|
|
138
|
+
- **An inventory without the receipt.** The reconciler ignores files it
|
|
139
|
+
is not told about, so a version holding the checkpoint's receipt would
|
|
140
|
+
read published. On the completion lane an unlisted file is a
|
|
141
|
+
non-match too.
|
|
142
|
+
- **Sending the completion lane through the existing adopt.** It would
|
|
143
|
+
reach the image adopter and stamp `environment.json`.
|
|
144
|
+
- **Putting the pin in `fcontextLevelComputation`'s memo.** Nested
|
|
145
|
+
contexts reset it; `fcontextPinnedEvaluation` saves and restores.
|
|
146
|
+
- **Reading the blocker cache during a capture.** Its key has no instant;
|
|
147
|
+
a pinned evaluation bypasses it. (Since A20 the key carries each
|
|
148
|
+
record's present freshness, so an aged record busts it too.)
|
|
149
|
+
- **Asking arXiv more than once per capture,** errors included: the
|
|
150
|
+
gate, gaps and blockers would each ask, and could disagree.
|
|
151
|
+
- **Accepting `ffilesSnapshotForWorkflow`'s silent fallback.** An
|
|
152
|
+
observation is all-snapshot or all-live, says which, and a snapshot
|
|
153
|
+
miss (even one a gate swallowed) restarts it live.
|
|
154
|
+
- **Letting live reads authorize a completion because they are
|
|
155
|
+
labeled.** Only a coherent observation, every read replayed unchanged,
|
|
156
|
+
may; a checkpoint carries an incoherent one, labeled.
|
|
157
|
+
- **Writing the repository receipt before publication.** A failed
|
|
158
|
+
upload would leave the repository describing a version that does not
|
|
159
|
+
exist; both kinds are written only after their version is published.
|
|
160
|
+
- **Deciding "the code changed" by comparing commits.** A tree goes
|
|
161
|
+
dirty with HEAD unchanged; `versionIdentity` compares source digests.
|
|
162
|
+
- **"Levels never drop."** Publishing the completion changes the
|
|
163
|
+
declared record, so the Zenodo copy reads unknown ("verification
|
|
164
|
+
pending") until a verify of the new record succeeds. The guarantee is
|
|
165
|
+
narrower: completion changes no compared content.
|
|
166
|
+
- **Minting a version to say "not met",** or to chase the working tree.
|
|
167
|
+
- **Fixtures that make exactly one entry fail.** Real failures come
|
|
168
|
+
together; use the expected-state matrix.
|
|
169
|
+
- **Passing authority states through untranslated.** The receipt uses
|
|
170
|
+
requirement states through one fixed table, which raises on an
|
|
171
|
+
unknown answer, and keeps the authority's own answer as evidence.
|
|
172
|
+
|
|
173
|
+
**Two level readings that must not be widened back (2026-10-27).**
|
|
174
|
+
The step save and the test-execution routes detect a crossing of
|
|
175
|
+
Level 1, so they read `fiComputeProofLevelUpToOne` (the marker rule
|
|
176
|
+
plus the Level 1 gate), never `fiProofLevel`: the full ladder hashed
|
|
177
|
+
every published file through the container on each click of a
|
|
178
|
+
researcher's badge (`testASignOffNeverEvaluatesTheLevelTwoOrThreeGate`,
|
|
179
|
+
and `testTheLevelOneReadingEqualsTheLadderCappedAtOne` pins the two
|
|
180
|
+
equal). And `fdictLevel2Gaps["bAtLeastLevel2"]` is the gate's own
|
|
181
|
+
verdict, with keys for the basename-collision and Overleaf conjuncts,
|
|
182
|
+
so every false verdict has a false key beside it
|
|
183
|
+
(`testABasenameCollisionReadsBelowLevelTwoInTheGapsDict`).
|
|
184
|
+
|
|
185
|
+
**`reproduce.sh` carries the SAME determinism guarantees the runner
|
|
186
|
+
does, and it reads the epoch from the ENVELOPE.** The runner prefixes
|
|
187
|
+
every step with `SOURCE_DATE_EPOCH` and a matplotlib `svg.hashsalt`
|
|
188
|
+
derived from it; the generated script exported neither until
|
|
189
|
+
2026-09-05, so the artifact vaibify hands the world rendered every PDF,
|
|
190
|
+
EPS, PS and SVG with the reproducer's wall clock and a fresh per-process
|
|
191
|
+
salt, and its own closing `sha256sum -c MANIFEST.sha256` could not pass
|
|
192
|
+
for any workflow with a vector figure. The shadow rerun was
|
|
193
|
+
determinism-correct throughout, which is why nothing internal noticed:
|
|
194
|
+
the lane vaibify runs for itself passed and the one a stranger runs
|
|
195
|
+
could not. Four things not to undo:
|
|
196
|
+
|
|
197
|
+
- **The epoch is the RECORDED one** — the envelope's
|
|
198
|
+
`iSourceDateEpoch` — never re-derived from HEAD. The commit that
|
|
199
|
+
publishes the manifest moves HEAD, so a re-derivation is
|
|
200
|
+
guaranteed to salt the figures differently from the pinned ones. It is
|
|
201
|
+
read on the reproducing host and passed as a `docker run -e`, because
|
|
202
|
+
a *quoted* heredoc — the thing that keeps workflow-controlled step
|
|
203
|
+
text off the host shell — cannot carry a host value into its body.
|
|
204
|
+
- **The salt comes from the runner's own builder**
|
|
205
|
+
(`determinismEnvironment.fsBuildMatplotlibSaltShell`), which takes two
|
|
206
|
+
shell WORDS, the epoch and the directory, so both lanes can call it.
|
|
207
|
+
A private copy in the generator would drift, and the two lanes
|
|
208
|
+
disagreeing is the defect being fixed. The directory is private to a
|
|
209
|
+
run (the runner mints one per run, `reproduce.sh` uses its own
|
|
210
|
+
temporary one and removes it on exit, naming it literally in the trap
|
|
211
|
+
because a step may export its own `MPLCONFIGDIR`): with one shared
|
|
212
|
+
path, run A wrote salt 111, run B wrote 222 and A then read 222,
|
|
213
|
+
which grades a reproducible SVG as not reproducible. Only the salt
|
|
214
|
+
reaches the figure's bytes, never the path
|
|
215
|
+
(`tests/testMatplotlibSaltIsolationLive.py` measures it).
|
|
216
|
+
- **`--entrypoint bash` is load-bearing.** A vaibify image declares
|
|
217
|
+
`USER researcher`, and its entrypoint's first phase needs root:
|
|
218
|
+
measured, `docker run <image> bash -s` exits 255 on
|
|
219
|
+
`git config --system`. The Dockerfile says as much — invocations that
|
|
220
|
+
must run the entrypoint pass `--user 0`. A reproduction wants none of
|
|
221
|
+
that phase anyway; it clones repos and configures credentials.
|
|
222
|
+
- **An absent epoch is announced, never quietly degraded**, and `0` reads
|
|
223
|
+
as unrecorded (agreeing with `fiCaptureSourceDateEpoch` and
|
|
224
|
+
`fiRecordedSourceDateEpoch`, the other two readers of that field).
|
|
225
|
+
|
|
226
|
+
`tests/testReproduceScriptDeterminism.py` drives the host half through
|
|
227
|
+
real `bash` with the envelope epoch and the repo HEAD epoch made
|
|
228
|
+
DISTINCT, so a re-derivation cannot pass; its `docker_live` leg reads
|
|
229
|
+
the guarantees back out of a real container. A string assertion that
|
|
230
|
+
the preamble mentions `SOURCE_DATE_EPOCH` is necessary and nowhere near
|
|
231
|
+
sufficient — it passes against a script exporting the wrong value.
|
|
232
|
+
|
|
233
|
+
**Since 2026-10-17 `reproduce.sh` runs the same PROCEDURE the shadow
|
|
234
|
+
lane does, and ends in the same assessor.** It no longer closes with
|
|
235
|
+
`sha256sum -c`. Inside the container it runs, in this order:
|
|
236
|
+
`pip install --require-hashes -r requirements.lock` (a lock that does
|
|
237
|
+
not install is "Could not run", exit 4), the assessor's `prepare`
|
|
238
|
+
(checks every published input, sets the
|
|
239
|
+
published figures aside), `clear` (deletes the declared outputs through
|
|
240
|
+
`rerunPreparation`, after listing them and how to restore them, because
|
|
241
|
+
it regenerates in the reader's own directory), `capabilities`, then
|
|
242
|
+
the case-checked unsets of the floor keys Stage A dropped, `probe`, then
|
|
243
|
+
each step as the runner runs it — data, plot, then each test group,
|
|
244
|
+
every command under its invocation ID with its JUnit report, and the
|
|
245
|
+
next step regardless of a failure in this one — and finally
|
|
246
|
+
`assess`, whose exit code becomes the script's once the assessor has
|
|
247
|
+
written its report (no report is "Could not run"). The shadow
|
|
248
|
+
lane passes `--machine`, which adds the report as one machine-readable
|
|
249
|
+
line; the script does not. The lock install is why the shadow, which
|
|
250
|
+
stays HERMETIC and installs nothing (the 2026-09-01 ruling), refuses
|
|
251
|
+
before any step when the pinned image does not satisfy
|
|
252
|
+
`requirements.lock`
|
|
253
|
+
(`shadowRerun._fdictRefusalIfImageLacksLockedPackages`,
|
|
254
|
+
`S_DIVERGENCE_LOCK_UNSATISFIED`): the two procedures converge only
|
|
255
|
+
where that install is a no-op. The diff is
|
|
256
|
+
`lockSatisfaction.flistDescribeLockMismatch`, the one derivation the
|
|
257
|
+
row and the pre-flight also read. Five things not to undo:
|
|
258
|
+
|
|
259
|
+
- **The execution profile is REPLAYED from the envelope's
|
|
260
|
+
`dictExecutionProfile`**, never looked up from the answer, and the
|
|
261
|
+
host half validates every key against the allowlist and every value
|
|
262
|
+
against its pattern in bash, BEFORE anything reaches `docker run -e`
|
|
263
|
+
(`testTheScriptRefusesASettingOutsideTheAllowlist` and its two
|
|
264
|
+
siblings; the Python half has its own). A later vaibify must not
|
|
265
|
+
change what a published profile asked for.
|
|
266
|
+
- **Capabilities come FIRST, in a process that loads no math
|
|
267
|
+
library** (`env -u <allowlist> python3 -I`), because OpenBLAS reads
|
|
268
|
+
its settings once, at load; then the probe runs under the exact
|
|
269
|
+
prefix the steps get. `testEachStageSeesWhatTheOrderPromises`. The
|
|
270
|
+
probe's matrix product runs in a CHILD process
|
|
271
|
+
(`fdictExerciseMatrixProduct`), because OpenBLAS can segfault under
|
|
272
|
+
a forced kernel (design fact 28) and a crash inside the probe would
|
|
273
|
+
leave no record; a crash or a timeout is announced before the steps,
|
|
274
|
+
an exception only recorded.
|
|
275
|
+
`testAMatrixProductThatCrashesIsRecordedAsACrash`.
|
|
276
|
+
- **An empty tests block renders nothing**, never `if … then fi`,
|
|
277
|
+
which bash refuses — found by the live leg, not by a string check.
|
|
278
|
+
- **The image no lane can obtain, and a `docker run` that fails
|
|
279
|
+
itself, are "Could not run" (exit 4)**, never a verdict about the
|
|
280
|
+
project (`tests/testReproduceScriptDeterminism.py`).
|
|
281
|
+
- **Both lanes give one verdict on one tree.**
|
|
282
|
+
`tests/testReproduceScriptParity.py::testBothLanesGradeOneTreeAlike`
|
|
283
|
+
drives five outcomes through both; the `docker_live` copy runs a real
|
|
284
|
+
shadow and a real `reproduce.sh` against one image.
|
|
285
|
+
`testTheLaneAndTheScriptRunTheSameAssessor` kills a generator that
|
|
286
|
+
writes the assessor in any form other than the shadow lane's own
|
|
287
|
+
render of it.
|
|
288
|
+
|
|
289
|
+
**A container registry is a convenience, never a PROOF rung (ruled
|
|
290
|
+
2026-09-05, superseding that morning's ruling that publishing the image
|
|
291
|
+
was an L3 requirement).** Docker Hub and GHCR are commercial services
|
|
292
|
+
with no retention policy, no DOI and no succession plan; grant
|
|
293
|
+
reviewers have declined to accept even GitHub as a long-term
|
|
294
|
+
repository, and a rung resting on one would be a claim vaibify could
|
|
295
|
+
not defend. So they are treated like Overleaf and arXiv: vaibify
|
|
296
|
+
integrates with them because they are useful, and they gate nothing.
|
|
297
|
+
`image-not-published` is emitted by no gate, counted by no tuple and a
|
|
298
|
+
conjunct of nothing. The readiness payload still carries
|
|
299
|
+
`bImagePublished`, because the PROOF tab shows the registry copy as an
|
|
300
|
+
OPTIONAL row (`bOptional: true`, excluded from the met count like the
|
|
301
|
+
project context file), and `reproduce.sh` still tries the registry
|
|
302
|
+
first because it is the fast path — pull, then the archived copy, then
|
|
303
|
+
a copy already on this host, the last with a warning that only the
|
|
304
|
+
author can take that path. The image's only rung is the environment
|
|
305
|
+
archive (`image-not-archived`, below), because Zenodo is the one of
|
|
306
|
+
these with a preservation commitment. The shadow lane still translates
|
|
307
|
+
the SDK's bare `404 ... No such image` into a refusal naming which kind
|
|
308
|
+
of reference it is and what to do — recognized by the SDK's exception
|
|
309
|
+
CLASS, never by matching "404" in a message, because an unreachable
|
|
310
|
+
daemon carries 404s from other causes — and the remedy it names for a
|
|
311
|
+
vanished local-only image is rebuild-or-load-the-deposit, never
|
|
312
|
+
publish. `tests/testRegistryIsNotAnL3Requirement.py`.
|
|
313
|
+
|
|
314
|
+
**The workflow-scope Level 3 criteria are the keys of
|
|
315
|
+
`levelGates._fdictL3WorkflowChecks`; read them there, not from a list
|
|
316
|
+
here.** Several ask about PUBLISHED copies rather than local files: the
|
|
317
|
+
envelope must match the GitHub mirror (`envelope-not-in-github-mirror`)
|
|
318
|
+
AND the Zenodo archive (`envelope-not-in-zenodo-archive`, every
|
|
319
|
+
declared record consulted); the archive must carry a rebuild
|
|
320
|
+
attestation that truthfully describes the archived manifest
|
|
321
|
+
(`attestation-not-in-zenodo-archive`, a semantic check, never byte
|
|
322
|
+
equality with the local file); no archive may be KNOWN to be a Zenodo
|
|
323
|
+
sandbox deposit (`an-archive-is-a-sandbox-deposit`, where unknown
|
|
324
|
+
passes); and `reproduce.sh` with its assessor must be exactly what
|
|
325
|
+
vaibify would render now (`reproduce-script-stale`, apart from
|
|
326
|
+
`reproduce-script-missing`, which owns absence). Because a deposit or a
|
|
327
|
+
regeneration writes files these and the Level 2 criteria compare,
|
|
328
|
+
`tests/testAdvancingALevelNeverLowersOne.py` guards that an action
|
|
329
|
+
offered to reach one rung never moves the bytes another rung compares.
|
|
330
|
+
|
|
331
|
+
**"Reproduce a published project" is an input adapter to the shadow
|
|
332
|
+
lane, and its honest boundary is the source table.** `vaibify
|
|
333
|
+
reproduce --from <source>` stages a git URL or a clean local clone as
|
|
334
|
+
an exact snapshot of ONE commit (`reproductionSource`), validates it
|
|
335
|
+
STRICTLY as reproduction-ready — six rules, the first failure named
|
|
336
|
+
with its file, never advisory the way tiers 1-4 are — and exports it
|
|
337
|
+
in the tar shape `fbufferRepackArchiveStamped` accepts, so every later
|
|
338
|
+
step consumes the staged archive and never a re-clone. The verdict is
|
|
339
|
+
"reproduction-ready", NEVER "Level 3": the six rules are what a rerun
|
|
340
|
+
depends on (a loadable selected workflow, a content-pinned image WITH
|
|
341
|
+
a recorded architecture, a manifest that parses, matches and covers
|
|
342
|
+
the selected workflow), deliberately not `fbL3ReadinessOK` — an
|
|
343
|
+
attestation, a mirror or a lock file are the AUTHOR's claims, and the
|
|
344
|
+
reproduction is the check. A first review read "complete Level 3
|
|
345
|
+
project" in the CLI output, ran the fixture through the real gate, got
|
|
346
|
+
`False`, and was right. Six things not to undo. The accepted source shapes are matched by
|
|
347
|
+
SHAPE, never by forge hostname (`testReproductionSourceNamesNoForgeHostname`
|
|
348
|
+
is the tripwire); a dirty clone is refused, naming the paths, because
|
|
349
|
+
a working tree is not a published project. Every `git` it runs carries
|
|
350
|
+
BOTH `gitHardening` lists, `GIT_TERMINAL_PROMPT=0` AND ssh in batch
|
|
351
|
+
mode (`GIT_TERMINAL_PROMPT` silences git's own prompt only; ssh asks
|
|
352
|
+
for a passphrase or a host key through `/dev/tty` on its own); the one
|
|
353
|
+
exception is the clone of a LOCAL repository, which is itself the file
|
|
354
|
+
transport `protocol.file.allow=never` refuses (measured: a plain path,
|
|
355
|
+
a `file://` URL and a bundle are all refused), so that clone alone
|
|
356
|
+
appends `protocol.file.allow=always` AFTER the list, only after the
|
|
357
|
+
path was admitted under the researcher's home, and asks for no
|
|
358
|
+
submodule. `--from` never enters the tier sequence and never runs
|
|
359
|
+
tier 2's host `pip install`. A report reads source facts from
|
|
360
|
+
`fdictDescribeStagedSource` ONLY — kind, commit, remote with userinfo
|
|
361
|
+
stripped, workflow name, never a host path — because a reproduction
|
|
362
|
+
report is the reproducer's own artifact, never an attestation, never
|
|
363
|
+
written into a repository, and never read by `levelGates`. And the
|
|
364
|
+
platform is THREE facts kept apart by name (the envelope's required
|
|
365
|
+
platform, the obtained image's platform, the daemon's architecture);
|
|
366
|
+
staging records the first from the envelope and announces its absence
|
|
367
|
+
rather than defaulting it. `tests/testReproductionSource.py` drives
|
|
368
|
+
real `git` and a real loopback HTTP remote, and every rule has a
|
|
369
|
+
kill-confirmed entry. The staging sweep skips any directory whose live
|
|
370
|
+
lock is held, whatever its age — the `~/.vaibify/tmp` lesson.
|
|
371
|
+
|
|
372
|
+
**The redaction boundary is wider than the userinfo, and the staged
|
|
373
|
+
`.git` is inside it.** Three leaks, all found by review on 2026-09-07,
|
|
374
|
+
all in code that read as careful. A credential rides in a URL's QUERY
|
|
375
|
+
(`?access_token=`) as readily as in its userinfo, so the classifier
|
|
376
|
+
REFUSES those parameters — pinned to `credentialRedactor`'s own tuple,
|
|
377
|
+
never a second list — the recorded remote is scrubbed through
|
|
378
|
+
`fsRedactUrlCredentials` as a second line, and the refusal does not
|
|
379
|
+
echo the URL it is about. `git clone` records the source it was given
|
|
380
|
+
in TWO places, `.git/config` and the `clone: from …` reflog line, so
|
|
381
|
+
`_fnScrubStagedGitMetadata` rewrites the origin to the redacted remote
|
|
382
|
+
(or removes it) and deletes `.git/logs` before anything reads the
|
|
383
|
+
snapshot: the staged tree, `.git` included, is copied into a container
|
|
384
|
+
built from a stranger's image, and a local clone's source is an
|
|
385
|
+
absolute host path. The guard asserts over EVERY archive member, not
|
|
386
|
+
over `.git/config`, which is how the reflog half was found at all —
|
|
387
|
+
and the URL-clone test carries a USERNAME, because with a bare URL the
|
|
388
|
+
recorded remote and the cloned URL are the same string and the
|
|
389
|
+
assertion is vacuous (it was, and the mutation survived it). And the
|
|
390
|
+
staging size ceiling bounds the DISK: the export is separately bounded
|
|
391
|
+
by `daemonCapacity`'s `iArchiveTotalBytes` and spooled to a private
|
|
392
|
+
file, because what the hub may hold in memory is a different question
|
|
393
|
+
from what a clone may occupy.
|
|
394
|
+
|
|
395
|
+
**A staged job holds the lock that keeps the sweep off its clone, so
|
|
396
|
+
it needs an expiry of its own.** `reproductionProgress` carries TWO
|
|
397
|
+
retentions — a settled job holds a report id, a staged one holds a
|
|
398
|
+
whole repository — plus a concurrency cap, and dismissing the
|
|
399
|
+
confirmation card DELETES the snapshot (`fnDiscardJob`, the
|
|
400
|
+
`/discard` route) rather than merely releasing it. Before that, stage
|
|
401
|
+
and close left a repository per attempt until the hub restarted. A
|
|
402
|
+
RUNNING job is never discarded out from under its shadow. The
|
|
403
|
+
routes — stage, run, `/retry` and `/discard` — are catalog entries
|
|
404
|
+
(the `reproduction` category of `LIST_AGENT_ACTIONS`) with
|
|
405
|
+
`bAgentSafe: False` AND their own agent-lane rejection, because a
|
|
406
|
+
host-filesystem capability is not something the catalog can express.
|
|
407
|
+
The run is NOT in the durable-task
|
|
408
|
+
registry: that registry is keyed on a container with an owner lane
|
|
409
|
+
tuple, and a reproduction has neither — its shadow is created inside
|
|
410
|
+
the worker and destroyed at the end. What "durable" was wanted FOR is
|
|
411
|
+
delivered instead by `fbHubHoldsLiveReproduction`, the idle
|
|
412
|
+
watchdog's veto, on the Agent Council's precedent and for the same
|
|
413
|
+
reason: a reproduction holds no socket and no owned container, so
|
|
414
|
+
without it a closed tab lets the clock go stale and the hub SIGTERMs
|
|
415
|
+
itself mid-run. A poll that meets a 404 DISARMS and says the job is
|
|
416
|
+
gone; jobs live only as long as their hub.
|
|
417
|
+
|
|
418
|
+
**A second review of the same code found five more, and their shapes
|
|
419
|
+
are the lesson.** A refusal that redacts ONE of its branches redacts
|
|
420
|
+
nothing: the query branch was scrubbed and the userinfo branch went on
|
|
421
|
+
echoing the password it refused. A credential parameter name is
|
|
422
|
+
PERCENT-DECODED before it is compared, because a server decodes it —
|
|
423
|
+
`?access%5Ftoken=` and `?access_token=` are the same parameter — and
|
|
424
|
+
the shared redactor's URL regex matches ANY scheme, because
|
|
425
|
+
`ssh://user:key@host` is the same credential in the same place and the
|
|
426
|
+
http-only spelling left every ssh remote unredacted (it also captures
|
|
427
|
+
the scheme and writes it back, so redacting does not silently rename
|
|
428
|
+
the transport). A cap whose count and insert are two critical sections
|
|
429
|
+
is not a cap; twelve registrations released into the gap all pass, and
|
|
430
|
+
the guard for it is STRUCTURAL — a racy test serializes often enough to
|
|
431
|
+
pass against the bug. `fbClaimJobForRun` moves the job into a live
|
|
432
|
+
phase in the SAME acquisition that consumes it, because a job claimed
|
|
433
|
+
but still reading `staged` is one a Discard deletes the snapshot out
|
|
434
|
+
from under, and the card's own running flag is set only when the Run
|
|
435
|
+
request returns. And a status callback handed to a lane that runs in a
|
|
436
|
+
worker thread must be SYNCHRONOUS: an `async def` there returned a
|
|
437
|
+
coroutine nobody awaited, so every step label and both new phases went
|
|
438
|
+
to the floor behind a `RuntimeWarning` — which is also why `comparing`
|
|
439
|
+
and `tearing-down` are emitted from INSIDE the lane, at the moment the
|
|
440
|
+
thing they name begins, rather than set by the caller after the lane
|
|
441
|
+
has returned and the container is already destroyed.
|
|
442
|
+
|
|
443
|
+
**The image is obtained through the chain `reproduce.sh` runs, and
|
|
444
|
+
the two lanes are pinned to agree.** `imageAcquisition` walks registry
|
|
445
|
+
pull, then the archived deposit (hash from the ENVELOPE, checked
|
|
446
|
+
before any load), then a copy on
|
|
447
|
+
this daemon (author-only, and it says so) — the order is a ruling and
|
|
448
|
+
is never reordered or extended. The download RESUMES: a verified
|
|
449
|
+
tarball is removed once the daemon has loaded it, bytes a failure left
|
|
450
|
+
behind are KEPT when another attempt can continue from them (a spent
|
|
451
|
+
retry budget, a full disk, a daemon that would not load), and deleted
|
|
452
|
+
only when nothing could (the deposit changed, the researcher
|
|
453
|
+
canceled); every refusal's `dictFailure` says which. A verified load
|
|
454
|
+
is noted under `~/.vaibify/depositLoads`, so a daemon still holding
|
|
455
|
+
that image ID is served without a second download. `reproduce.sh`
|
|
456
|
+
keeps nothing: it removes its temporary tarball whatever the outcome.
|
|
457
|
+
The three links that touch the daemon
|
|
458
|
+
are SDK calls in `disposableContainer` (`fdictPullImage`,
|
|
459
|
+
`fsLoadImageFromStream`, `fdictInspectImage`,
|
|
460
|
+
`fsReadDaemonArchitecture`), the SDK authority for disposable work;
|
|
461
|
+
the chain module acquires no subprocess and no client, because a
|
|
462
|
+
`docker pull` or `docker load` outside a gateway module is a
|
|
463
|
+
mutation-capable row the ratchet refuses. The generated script now
|
|
464
|
+
passes `--platform` to `docker pull` AND `docker run`, from the
|
|
465
|
+
envelope's architecture normalized in shell, and announces an absent
|
|
466
|
+
architecture on stderr rather than defaulting it — the same treatment
|
|
467
|
+
as an absent epoch; the option rides in a bash array expanded with the
|
|
468
|
+
guarded idiom because an empty array under `set -u` is an error on
|
|
469
|
+
bash 3. `tests/testImageAcquisition.py` drives BOTH lanes against one
|
|
470
|
+
tarball and one envelope. The three platform facts stay apart:
|
|
471
|
+
obtained ≠ required always refuses, required ≠ daemon is emulation
|
|
472
|
+
(refused without `--allow-emulation`, recorded with it), and the
|
|
473
|
+
daemon's architecture is asked of the daemon — an image reports its
|
|
474
|
+
own on any host. `shadowRerun.fdictRerunAndVerifyFromSnapshot` is the
|
|
475
|
+
second seed: image and platform from the acquisition's answer (a
|
|
476
|
+
deposit-loaded image answers to its ID alone), platform requested on
|
|
477
|
+
the create, the loaded-from-archive marker written under the shadow's
|
|
478
|
+
own admission before any step. `reproductionReport` is the
|
|
479
|
+
reproducer's artifact under `~/.vaibify/reproductions/reports/`, apart
|
|
480
|
+
from staging, never read by `levelGates`; its verdicts are
|
|
481
|
+
"reproduced", "reproduced under emulation", "diverged", "no verdict",
|
|
482
|
+
never "attested". `tests/testReproductionLive.py` drives the whole
|
|
483
|
+
lane against a real daemon — registry fails by DNS, the deposit loads,
|
|
484
|
+
the shadow runs the loaded ID — and proves the platform reaches the
|
|
485
|
+
daemon by the daemon's own refusal of a wrong one. Two facts found
|
|
486
|
+
live: a stock base image already owns uid 1000, and the shadow's typed
|
|
487
|
+
reads need a `python3` in the image.
|
|
488
|
+
|
|
489
|
+
**The dashboard's reproduction is a one-shot JOB with no project
|
|
490
|
+
container, and its record is its own.** `POST /api/reproductions/stage`
|
|
491
|
+
and `POST /api/reproductions/{sJobId}/run` (`reproductionRoutes`),
|
|
492
|
+
like `/retry` and `/discard`, are browser-hub control-plane routes,
|
|
493
|
+
registered in the agent catalog with `bAgentSafe: False` (none is
|
|
494
|
+
excluded) AND rejecting the agent lane by name, declared
|
|
495
|
+
`separate-authority` because the only container they touch is the
|
|
496
|
+
shadow `shadowRerun`
|
|
497
|
+
creates, admits and destroys itself — `tests/testCarrierMigratedRoutes.py`
|
|
498
|
+
pins that they reach no project primitive. The job record
|
|
499
|
+
(`reproductionProgress`) is keyed by job, NOT by container: it holds
|
|
500
|
+
the staged snapshot's live lock for exactly the job's life (taken in
|
|
501
|
+
the request that staged it, released from the task that settles it),
|
|
502
|
+
is consumed ONCE (`fbClaimJobForRun` checks and marks under one lock;
|
|
503
|
+
a second Run is a 409 by name), and its client view carries no staging
|
|
504
|
+
token — the token names a directory on this host. Do not key it on
|
|
505
|
+
`archiveProgress`, which is the deposit registry keyed by a container
|
|
506
|
+
the job does not have; only the deposit row's VISUAL shape is borrowed.
|
|
507
|
+
Phases are written from events that happened — the chain's `pulling` /
|
|
508
|
+
`downloading` / `loading`, the pipeline's `stepStarted` — and the
|
|
509
|
+
comparison plus teardown, which the rerun seam performs with no event,
|
|
510
|
+
are reported together as `finishing`, never invented from a timer. The
|
|
511
|
+
card polls only while the hub says `bLive` and disarms on settle
|
|
512
|
+
(`tests/browser/testReproducePublishedCard.py` counts polls after
|
|
513
|
+
settle), and no run request leaves the page before the researcher has
|
|
514
|
+
seen the confirmation and clicked Run (the same file asserts the
|
|
515
|
+
ORDER, not the wording). Both lanes write the same report through the
|
|
516
|
+
same seams, including the shared archive re-check
|
|
517
|
+
`reproductionReport.fdictRecheckObtainedImage`, which moved out of the
|
|
518
|
+
CLI when the dashboard became its second caller.
|
|
519
|
+
|
|
520
|
+
**The environment archive is one question with two blocks, and the L3
|
|
521
|
+
half must never read the L2 answer.** Level 2 asks whether the
|
|
522
|
+
researcher ANSWERED — `archived`, `referenced` and `declined` all pass,
|
|
523
|
+
and only silence fails. Level 3 asks whether a matching archive
|
|
524
|
+
EXISTS. Keeping them apart is what makes declining a decision rather
|
|
525
|
+
than a lock: a decline is an absent archive, so changing the answer and
|
|
526
|
+
depositing opens L3 with nothing to undo. The one sound direction is
|
|
527
|
+
the other one — `fbImageArchiveQuestionSettled` reads the deposit
|
|
528
|
+
record, because having deposited is having decided, and the deposit
|
|
529
|
+
finishes in a durable task holding no commit lane to persist an answer
|
|
530
|
+
through. It reads the LINEAGE note too (`fdictArchiveLineageOf`,
|
|
531
|
+
2026-09-28): a changed image drops the deposit record but keeps a note
|
|
532
|
+
of the record it was archived under, and a rebuild does not unanswer a
|
|
533
|
+
researcher who deposited; whether the NEW image is archived stays
|
|
534
|
+
Level 3's question. Five things not to "simplify", each already pinned by a
|
|
535
|
+
kill-confirmed test in `tests/testEnvironmentArchive.py`:
|
|
536
|
+
|
|
537
|
+
- **The version DOI, never the concept DOI.** Zenodo's concept DOI
|
|
538
|
+
always resolves to the NEWEST version, so recording it repoints every
|
|
539
|
+
earlier paper at whatever image was deposited last — the link
|
|
540
|
+
resolves, nothing errors, and the archived environment is simply not
|
|
541
|
+
the one that produced those numbers.
|
|
542
|
+
- **Architecture is recorded, never inferred from the digest.** A
|
|
543
|
+
manifest-list digest spans several platforms and pins none of them,
|
|
544
|
+
so matching digests do not imply a matching build. This is also why
|
|
545
|
+
the envelope's regeneration carries a deposit record forward only
|
|
546
|
+
when BOTH the digest and the architecture still agree.
|
|
547
|
+
- **Unchecked is never red.** Red means diverged, a claim about the
|
|
548
|
+
deposit; an envelope one side of which is missing was compared with
|
|
549
|
+
nothing. `flistDescribeArchiveMismatch` RAISES `LookupError` for that
|
|
550
|
+
case rather than returning a reason, so a caller cannot accidentally
|
|
551
|
+
render it as a difference.
|
|
552
|
+
- **CLOSED needs positive evidence.** "Declined, and the image is gone,
|
|
553
|
+
so L3 is unreachable for this result" is the strongest statement the
|
|
554
|
+
row makes. The presence probe is three-state and captured at connect
|
|
555
|
+
(the poll makes no daemon call); `None` means nobody looked, and the
|
|
556
|
+
row falls back to the weaker reading.
|
|
557
|
+
- **The attestation re-check can be VACUOUS.** An image obtained by
|
|
558
|
+
loading the deposit hashes to the deposit's own bytes every time.
|
|
559
|
+
`reproduce.sh`'s fallback writes
|
|
560
|
+
`.vaibify/image_loaded_from_archive` — a file beside the envelope,
|
|
561
|
+
never a field inside it, because the envelope is pinned in
|
|
562
|
+
`MANIFEST.sha256` and the script's assessor checks every pinned input
|
|
563
|
+
unchanged (until 2026-10-17 the script ended in `sha256sum -c`) — and
|
|
564
|
+
the check reports vacuous rather than passed.
|
|
565
|
+
|
|
566
|
+
Two hashes ride in the record and neither substitutes for the other:
|
|
567
|
+
`sTarballSha256` binds the bytes UPLOADED (what a downloader verifies)
|
|
568
|
+
and `sImageStreamSha256` binds `docker save`'s uncompressed output
|
|
569
|
+
(what the re-check compares, because zstd and gzip — and two builds of
|
|
570
|
+
one codec — give different bytes for one image). The deposit runs
|
|
571
|
+
host-side and reads the Zenodo token out of the CONTAINER keyring
|
|
572
|
+
through the typed-read seam, because `docker save` can only run on the
|
|
573
|
+
host and the token lives nowhere else; it is held in a local for one
|
|
574
|
+
upload and written to no file and no log.
|
|
575
|
+
`docs/architecture.md` — "The environment archive" — carries the model.
|
|
576
|
+
|
|
577
|
+
**A deposit is fetched from the Zenodo the record NAMES, and no
|
|
578
|
+
redirect is followed before its host is checked (2026-09-11).** The
|
|
579
|
+
record carries `sZenodoService`; readers map it through
|
|
580
|
+
`zenodoClient`'s table (`fsResolveServiceBaseUrl`) and refuse any other
|
|
581
|
+
value, and a record written before the field existed is classified by
|
|
582
|
+
DOI prefix (`fsServiceForDoi`: `10.5072/` is the sandbox — the word
|
|
583
|
+
"sandbox" is in no sandbox DOI, and matching it sent every sandbox
|
|
584
|
+
deposit to production, where the record 404s and the fallback composed
|
|
585
|
+
a download URL from a DataCite error page). Every GET the client makes
|
|
586
|
+
goes through `fresponseGetWithinAllowlist`, which follows redirects BY
|
|
587
|
+
HAND and checks each hop's origin before sending; the shell fallback in
|
|
588
|
+
`reproduce.sh` does the same with `curl` and `%{redirect_url}`, never
|
|
589
|
+
`-L`, and its host table is RENDERED from the client's. Nothing read
|
|
590
|
+
from the envelope (`environment.json`) is ever fetched as a URL: it is
|
|
591
|
+
a file in a cloned repository. `test_no_reader_of_the_record_fetches_a_url_on_trust`
|
|
592
|
+
pins the single transport call, and the decoy-server tests in
|
|
593
|
+
`tests/testImageAcquisition.py` and `tests/testReproduceScriptGenerator.py`
|
|
594
|
+
prove a refused host receives no request. The download is BOUNDED by
|
|
595
|
+
the envelope's recorded size in both lanes (2026-09-12): the script
|
|
596
|
+
passes it to `curl --max-filesize` and measures the bytes that landed
|
|
597
|
+
before hashing them, the client refuses to grow past it, and a record
|
|
598
|
+
with no size is refused rather than fetched without a ceiling.
|
|
599
|
+
|
|
600
|
+
**A project containerized from the author's PINNED image is admitted
|
|
601
|
+
by its origin record, and the baseline is proven against the image
|
|
602
|
+
(2026-09-11).** The Containerize wizard can OBTAIN the image a clone's
|
|
603
|
+
envelope pins instead of rebuilding it (`docker/pinnedImageAcquisition`,
|
|
604
|
+
the published chain). Six things not to undo: the conversion is a
|
|
605
|
+
WHITELIST of runtime fields onto the author's vaibify.yml
|
|
606
|
+
(`pinnedEnvironmentConversion`), never a merge, and the agent install
|
|
607
|
+
keys are written only after the overlays exist; which overlays the
|
|
608
|
+
obtained image holds is PROVEN by its `vaibify-overlays` label (which
|
|
609
|
+
must EQUAL the repository's candidate, additions or not) or by
|
|
610
|
+
recomputing the recipe fingerprint over the shipped texts — a header
|
|
611
|
+
line in a cloned repository is a claim, and unproven never fails open
|
|
612
|
+
(no additions: the base runs as-is; additions: refuse before tagging);
|
|
613
|
+
overlays are stacked on the obtained image ID with
|
|
614
|
+
`vaibify.pinnedBaseImageId`, and a DERIVED running image is reported
|
|
615
|
+
as derived, never as the pin; the origin record
|
|
616
|
+
(`config/imageOrigins`) is written LAST and the launch guard in
|
|
617
|
+
`containerManager.flistBuildRunArgs` refuses a start without a good
|
|
618
|
+
one — a STALE record (tag moved, or running image neither the base
|
|
619
|
+
nor labeled derived) reads as absent, so a `docker build` outside
|
|
620
|
+
vaibify cannot inherit the archive's provenance — and requests the
|
|
621
|
+
recorded platform, refusing a switched daemon's silent emulation; the
|
|
622
|
+
record ends only on switch-to-building (one locked mutation with the
|
|
623
|
+
registry's `dictImageSource`), un-registration or rename, never on
|
|
624
|
+
stop, and plain `/build` answers 409 naming the switch; and the shadow
|
|
625
|
+
runs the record's BASE id on the obtained platform with the
|
|
626
|
+
archive-loaded marker, while `fbEnvironmentWasObtained` is the one
|
|
627
|
+
predicate behind the regenerate refusal. Two new routes read the host
|
|
628
|
+
filesystem (`pinned-environment`, `acquire-image`) and are
|
|
629
|
+
catalog-excluded AND agent-lane rejected. `tests/testPinnedImageAcquisition.py`
|
|
630
|
+
is the kill-confirmed guard.
|
|
631
|
+
|
|
632
|
+
Four more, from a review of that lane (2026-09-12). The overlays
|
|
633
|
+
label is a SET rendered in canonical order (`flistCanonicalizeOverlaySet`),
|
|
634
|
+
never the build order: a differential stack installs `node` after the
|
|
635
|
+
author's `claude`, and a label written in that order is one the
|
|
636
|
+
label's own parser refuses, so the derived image could never be
|
|
637
|
+
acquired again. An unproven baseline with no additions answers `None`,
|
|
638
|
+
not `[]`: an empty PROVEN set would make the differential resolver
|
|
639
|
+
re-stack the author's own overlays onto the image that holds them.
|
|
640
|
+
The unproven-with-additions refusal NAMES its recovery
|
|
641
|
+
(`sAction: reobtain-without-additions`), and `acquire-image` takes
|
|
642
|
+
`bWithoutAdditions`, which drops the added agents from the registry
|
|
643
|
+
entry before obtaining -- a refusal whose remedy has no lane is a dead
|
|
644
|
+
end. And re-obtain and switch-to-building are refused by the server
|
|
645
|
+
while the project's container EXISTS, asked of the daemon
|
|
646
|
+
(`_fnRefuseWhileTheContainerExists`), because the page's stop can
|
|
647
|
+
fail and every transition after a stop reads its answer
|
|
648
|
+
(`fnStopContainer` returns it) -- a stop that failed must never let a
|
|
649
|
+
retag, a cleared origin record or a build through.
|
|
650
|
+
|
|
651
|
+
**The envelope pins the agent-free ENVIRONMENT, never the coding
|
|
652
|
+
agents (ruled 2026-09-28).** Agents write code and compute nothing, so
|
|
653
|
+
the pin -- and with it the shadow rerun, `reproduce.sh`, the deposit
|
|
654
|
+
and a reader's acquisition -- is the build stage below the first agent,
|
|
655
|
+
and a reader brings their own agents. Five things not to undo, each
|
|
656
|
+
kill-confirmed. Every stage's `vaibify-overlays` and recipe labels
|
|
657
|
+
describe THAT stage (`test_each_stage_is_labelled_with_what_it_holds`);
|
|
658
|
+
stamping the whole chain's list on every stage is how `:base` came to
|
|
659
|
+
claim agents it did not hold. Agent and prerequisite stages name the
|
|
660
|
+
agent-free stage in `vaibify-environment-image-id` and every other
|
|
661
|
+
stage stamps it EMPTY, so no stage inherits a value through `FROM`.
|
|
662
|
+
`fsResolveEnvironmentImageId` trusts the label only after the named
|
|
663
|
+
image's layers prove a prefix of the running image's, and an
|
|
664
|
+
environment it cannot vouch for pins NOTHING with `sUnpinnedReason` --
|
|
665
|
+
falling back to the running image would publish the agents while every
|
|
666
|
+
record said otherwise. `agentLayerSeparation` reads the agents' layers
|
|
667
|
+
out of `docker save`, naming blobs by UNCOMPRESSED sha256 (the
|
|
668
|
+
containerd store gzips them and writes the manifest last; tiny empty
|
|
669
|
+
layers are real layers -- a size cut-off reported real images as
|
|
670
|
+
unreadable) and refuses on five rules before a deposit saves a byte
|
|
671
|
+
and before a reader's stacked agents are tagged; an unrun check
|
|
672
|
+
refuses too. And the deposit refuses a pin whose own label names
|
|
673
|
+
agents. Currency reads a pin on the environment below the live image
|
|
674
|
+
as `sRelation: "derived"`, the note obtained images already use.
|
|
675
|
+
`tests/testAgentLayerSeparation.py`,
|
|
676
|
+
`tests/testEnvironmentSnapshot.py`, `tests/testDockerfileProvenance.py`.
|
|
677
|
+
|
|
678
|
+
The pin is agent-FREE, not agent-guidance-free, and that is a known,
|
|
679
|
+
DEFERRED design question with its own plan. The in-container agent
|
|
680
|
+
guidance — the skills, the staged docs, `entrypoint.sh` with the
|
|
681
|
+
instructions it generates, and `vaibify-do` — is `COPY`'d by the base
|
|
682
|
+
`vaibify/containerImage/Dockerfile`, which `imageBuilder.fnBuildImage`
|
|
683
|
+
builds before any overlay, so it lies inside the agent-free stage
|
|
684
|
+
`environmentSnapshot.fsResolveEnvironmentImageId` names. A guidance
|
|
685
|
+
edit therefore changes the environment image ID the envelope pins once
|
|
686
|
+
the image is rebuilt, and the recipe fingerprint, which hashes only the
|
|
687
|
+
Dockerfile texts, does not move with it. Do not answer it here by
|
|
688
|
+
moving the guidance above the pin: that changes every project's pin
|
|
689
|
+
once, which is the deferred plan's decision to make.
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
## A human step's outputs are GIVEN, not reproduced
|
|
693
|
+
|
|
694
|
+
**The rerun carries an interactive step's outputs instead of refusing
|
|
695
|
+
the workflow (2026-08-31 ruling).** Before this, any interactive step
|
|
696
|
+
refused the whole tier-5 rerun. That made Level 3 **unreachable for
|
|
697
|
+
every project vaibify builds**: vaibify creates an interactive AI
|
|
698
|
+
Declaration step, Level 2 blocks on `missing-ai-declaration-step`, so
|
|
699
|
+
reaching L2 the product's own way guaranteed L3 could never pass. The
|
|
700
|
+
researcher found it by clicking Verify; no test combined the two,
|
|
701
|
+
because the refusal tests used generic interactive steps.
|
|
702
|
+
|
|
703
|
+
The model is that a human step's outputs are **input** to the rerun,
|
|
704
|
+
like the repository's source files — data a person produced, which the
|
|
705
|
+
steps below consume. Nothing new carries them: the shadow's coherent
|
|
706
|
+
export already copies everything git can enumerate, so they arrive
|
|
707
|
+
verbatim and the executable steps run against the bytes the original
|
|
708
|
+
run used.
|
|
709
|
+
|
|
710
|
+
**The carve-out is exclusion, and both directions of it are load-bearing.**
|
|
711
|
+
`flistCarriedOutputRepoPaths` drops those paths from the comparison,
|
|
712
|
+
`fdictBuildAttestation` records them in `listCarriedPaths`, and both
|
|
713
|
+
lanes report them. Three ways to break it, each already pinned by a
|
|
714
|
+
kill-confirmed test:
|
|
715
|
+
|
|
716
|
+
- **An exclusion set that matches nothing.** It must resolve paths
|
|
717
|
+
through the SAME `fdictWorkflowTemplateValues` +
|
|
718
|
+
`flistStepOutputRepoPaths` helpers the manifest writer uses. Resolved
|
|
719
|
+
any other way the paths simply fail to match, nothing is excluded,
|
|
720
|
+
nothing says so, and every given file is graded as reproduced.
|
|
721
|
+
- **An exclusion that leaves nothing.** A workflow whose every pinned
|
|
722
|
+
entry is human-made has nothing for a rerun to reproduce, so it fails
|
|
723
|
+
closed on `S_DIVERGENCE_EVERY_ENTRY_GIVEN` rather than passing 0 of 0.
|
|
724
|
+
- **A silent count.** `iOutputHashesTotal` now covers only what
|
|
725
|
+
executed. Displaying that ratio without `listCarriedPaths` beside it
|
|
726
|
+
turns a narrow true statement into a broad false one — the same shape
|
|
727
|
+
as the "Outputs match the GitHub mirror" projection bug.
|
|
728
|
+
|
|
729
|
+
**DISABLED steps still refuse, and the asymmetry is deliberate.** Being
|
|
730
|
+
interactive is a declared property of the workflow; being disabled is a
|
|
731
|
+
switch. Carrying a disabled step's outputs would let anyone silence a
|
|
732
|
+
step and still attest around it. The AI Declaration needs no case of
|
|
733
|
+
its own — it is an interactive step, and the general rule covers it.
|
|
734
|
+
|
|
735
|
+
**The rerun grades only outputs it regenerated (2026-10-01 ruling,
|
|
736
|
+
graded by assessment since 2026-10-17).** The shadow rerun runs every
|
|
737
|
+
executed step's data commands whatever `bPlotOnly` says, and deletes
|
|
738
|
+
every path an executed step produces before running anything, so a file
|
|
739
|
+
left over from the original run can never be graded as reproduced. An
|
|
740
|
+
output the rerun did not write is FAILED (missing), never byte-identical.
|
|
741
|
+
A path that is both carried (human-made) and produced by an executed
|
|
742
|
+
step is an ambiguous overlap, and the rerun is refused by name rather
|
|
743
|
+
than silently keeping the file. Pinned inputs (`reproduce.sh`,
|
|
744
|
+
`Dockerfile`, `requirements.lock`, `environment.json`, scripts, tests,
|
|
745
|
+
their standards, the rendered assessor) are INTEGRITY, checked before
|
|
746
|
+
and after the run, and never graded as outputs.
|
|
747
|
+
|
|
748
|
+
**Level 3 is an assessment, and its contracts are these (design D1–D8,
|
|
749
|
+
I1–I11).** Integrity is exact; agreement is graded per output as
|
|
750
|
+
failed, byte-identical, comparisons passed, or insufficient evidence;
|
|
751
|
+
byte identity is reported whenever it holds and is never the
|
|
752
|
+
criterion. Each of these was built against a falsification test, and
|
|
753
|
+
each is a way to turn a verdict back into a claim nobody earned:
|
|
754
|
+
|
|
755
|
+
- **Two leaf modules, one rendered file.** `rerunProcedure` and the
|
|
756
|
+
frozen `comparisonPolicyV1` import only the standard library, parse
|
|
757
|
+
as Python 3.8, and share no name, because they are concatenated into
|
|
758
|
+
the project's rendered assessor (`S_RERUN_ASSESSMENT_REPO_PATH`)
|
|
759
|
+
(`tests/testRerunAssessmentStructure.py`). Both reproduction lanes
|
|
760
|
+
run the same bytes for the same policy and workflow.
|
|
761
|
+
- **The policy is frozen at its pinned hash.** A fix is a new policy
|
|
762
|
+
version, never an edit
|
|
763
|
+
(`testThePolicyModuleIsFrozenAtItsPinnedBytes`). A reproduction
|
|
764
|
+
grades under the policy the project RECORDED (line 2 of the rendered
|
|
765
|
+
file), using vaibify's own module for it, never the repository's
|
|
766
|
+
copy (`testAProjectGradesUnderTheComparisonPolicyItRecorded`); an ID
|
|
767
|
+
this vaibify lacks is "Could not run", naming the upgrade.
|
|
768
|
+
- **Evidence is JUnit only, bound to its step, its test file and its
|
|
769
|
+
command identity**, and every planned command is accounted for: a
|
|
770
|
+
command with no ledger line never ran, a report with no ledger line
|
|
771
|
+
is never read, a skip and a missing report assert nothing, and one
|
|
772
|
+
step's passing report never satisfies another's absent check
|
|
773
|
+
(`tests/testRerunAssessmentEvidence.py`). The author's committed
|
|
774
|
+
passing markers never stand in for tests that did not run.
|
|
775
|
+
- **A structural check never establishes agreement.** It can fail an
|
|
776
|
+
output; changed bytes with only structural checks are insufficient
|
|
777
|
+
evidence (`testChangedBytesWithOnlyStructuralChecksIsInsufficient`).
|
|
778
|
+
- **The precedence is a table in the policy, worst first**: could not
|
|
779
|
+
run, published inputs changed, not reproduced, insufficient evidence,
|
|
780
|
+
then comparisons passed or byte-identical. A later pass never erases
|
|
781
|
+
an earlier failure (`tests/testRerunAssessmentPrecedence.py`). Every
|
|
782
|
+
verdict ships with its tally, and the dashboard renders the server's
|
|
783
|
+
sentence.
|
|
784
|
+
- **The image check is narrow and labeled as vaibify's**: a single
|
|
785
|
+
frame, at most 8 bits per sample, the same format, size and mode,
|
|
786
|
+
and no RGBA channel moving by more than 2 levels. A higher-precision
|
|
787
|
+
image is never reduced to fit, and a vector figure is never assessed
|
|
788
|
+
by it (`tests/testRerunAssessmentImageCheck.py`).
|
|
789
|
+
- **The host re-derives the verdict from the raw evidence** and never
|
|
790
|
+
trusts the container's report; a self-consistent forgery of an exit
|
|
791
|
+
status or a hash is caught (`tests/testAssessedRerunLane.py`).
|
|
792
|
+
- **A historical attestation stays true and stops counting.** An
|
|
793
|
+
attestation made by the byte-only verifier, or under another policy or
|
|
794
|
+
profile, reads as a previous check and never satisfies the rebuild
|
|
795
|
+
requirement (`testAHistoricalAttestationNeverSatisfiesTheRebuildRequirement`).
|
|
796
|
+
- **The execution profile is frozen in the envelope**, its keys on a
|
|
797
|
+
closed allowlist checked in both languages, and a profile this vaibify
|
|
798
|
+
lacks stops the run before any step
|
|
799
|
+
(`testAProfileThisVaibifyLacksStopsTheRunBeforeAnyStep`).
|
|
800
|
+
- **Provenance is recorded per SECTION, only after it completed.** A
|
|
801
|
+
tests-only run, a failed section and a skipped one relabel nothing;
|
|
802
|
+
an identical rerun leaves the record byte-identical; no processor
|
|
803
|
+
model or computer name is ever recorded
|
|
804
|
+
(`tests/testOutputProvenance.py`). A provenance difference is
|
|
805
|
+
context, never an explanation of the difference; it is information,
|
|
806
|
+
never a failure, and never red.
|
|
807
|
+
- **Ordinary runs are unchanged.** Without `dictRerunEvidence`, no
|
|
808
|
+
command carries an evidence export or an invocation identity
|
|
809
|
+
(`testAnOrdinaryRunCarriesNoEvidenceExportAndNoInvocationIdentity`).
|
|
810
|
+
|
|
811
|
+
**A verification produces a FILE, and the per-file outcomes are the
|
|
812
|
+
authority for it (2026-09-11).** The rerun keeps every observed hash in
|
|
813
|
+
`listFileOutcomes` (one `{sPath, sExpected, sObserved, sStatus, sRole}`
|
|
814
|
+
per FROZEN manifest entry, in the manifest's order; the assessed rerun
|
|
815
|
+
keeps `sStatus` and attaches each entry's graded `sOutcome` and
|
|
816
|
+
`sOutcomeReason` from the assessor's report) and renders them into
|
|
817
|
+
`REPRODUCED.sha256` at the repository root in `MANIFEST.sha256`'s own
|
|
818
|
+
format — ONE header line, same paths, same order, a `# MISSING <path>`
|
|
819
|
+
comment at the same position for a file the shadow did not produce —
|
|
820
|
+
so a person compares the two with their own eyes and `diff` works.
|
|
821
|
+
Every count, path list and the rendered file derive from that list,
|
|
822
|
+
while the pass or fail VERDICT is the assessor's report
|
|
823
|
+
(`dictAssessmentReport`, its `iExitCode` and `sVerdict`), never
|
|
824
|
+
re-derived from the hash statuses; nothing re-hashes after the shadow
|
|
825
|
+
is destroyed or re-reads a manifest the rerun may have mutated. Three
|
|
826
|
+
things not to undo: the write ORDER (timestamped copy under
|
|
827
|
+
`.vaibify/reproducedManifests/`, then the root file, THEN the record
|
|
828
|
+
naming it — a foreign clone's reproduction writes and names the
|
|
829
|
+
timestamped copy alone and never the root file, which in that clone is
|
|
830
|
+
the author's committed one — shared by both lanes in
|
|
831
|
+
`reproductionRecord.flistWriteVerificationOutcome`, so a record never
|
|
832
|
+
points at a manifest that was not written); the manifest NEVER pins
|
|
833
|
+
`REPRODUCED.sha256`, the history directory or `.vaibify/reproductions/`
|
|
834
|
+
(`fbIsReproductionRecordPath`; a reproduced manifest inside the manifest
|
|
835
|
+
grades itself); and the viewers' line colors come from the record's
|
|
836
|
+
per-file `sOutcome` (its `sStatus` in a record written before the
|
|
837
|
+
assessment), never from JavaScript comparing hashes. A clone whose
|
|
838
|
+
attestation was last COMMITTED by another identity (tracked at HEAD,
|
|
839
|
+
`%ce` differs from the receiving repository's `user.email`; an
|
|
840
|
+
unconfigured identity is foreign) records a REPRODUCTION under
|
|
841
|
+
`.vaibify/reproductions/` in the report schema and leaves the author's
|
|
842
|
+
attestation untouched — `fbRepositoryCarriesForeignAttestation` takes a
|
|
843
|
+
git RUNNER because the two lanes ask different repositories (the
|
|
844
|
+
container's checkout, the CLI's `--repo` host checkout), and the
|
|
845
|
+
records are read on the attestation GET only, never on the poll.
|
|
846
|
+
Attestation schema v5 migrates the three new fields to `None`.
|
|
847
|
+
`tests/testReproducedManifest.py` is the kill-confirmed guard.
|
|
848
|
+
Whose attestation the clone carries is THREE-state (2026-09-12): a
|
|
849
|
+
git that cannot answer -- a broken executable, an exec failure, a
|
|
850
|
+
tracked file whose committer cannot be read -- raises
|
|
851
|
+
`RecordKindUndeterminedError`, never "not foreign", because that
|
|
852
|
+
answer is the fail-open that overwrites somebody else's record. Both
|
|
853
|
+
lanes settle the question BEFORE the rerun and refuse by name when it
|
|
854
|
+
is undetermined; readiness answers `undetermined` so the confirm
|
|
855
|
+
dialog says so first. Every step is decided by git's own exit code,
|
|
856
|
+
measured: `rev-parse --verify --quiet HEAD` exits 1 with no commits
|
|
857
|
+
and 128 outside a repository, `ls-tree` exits 0 with empty output for
|
|
858
|
+
an untracked path, `config` exits 1 for an unset key.
|
|
859
|
+
|
|
860
|
+
**A rerun that reached no verdict is NEVER written as an attestation.**
|
|
861
|
+
It used to be: a refusal became `sStatus: "failed"` plus a history
|
|
862
|
+
entry, i.e. a scientific claim keyed to a manifest digest saying the
|
|
863
|
+
project does not reproduce, on the strength of a precondition the run
|
|
864
|
+
could not meet. It also destroyed any earlier passing attestation the
|
|
865
|
+
unchanged manifest still entitled the project to. Both lanes now branch
|
|
866
|
+
on `bRerunAttempted` — `reproducibilityRoutes._fbRecordOutcome` and
|
|
867
|
+
`commandReproduce._fbWriteAttestationFromRun` — and they **must agree,
|
|
868
|
+
because they write the same file**. The hub remembers the reason
|
|
869
|
+
in-process (`_DICT_LAST_NO_VERDICT`) and the PROOF tab renders it; that
|
|
870
|
+
lifetime is the honest one, since nothing was established.
|
|
871
|
+
|
|
872
|
+
**A verification reports progress, or it reads as a hang.** The tab
|
|
873
|
+
polls only while the server says a verification is live, and disarms
|
|
874
|
+
when it settles. Until this existed the "started" toast was the last
|
|
875
|
+
thing a researcher saw — a 2.5 second refusal and a two-hour rerun were
|
|
876
|
+
indistinguishable from the chair. Do not make this a standing cadence,
|
|
877
|
+
and do not let the card pulse over a finished run.
|
|
878
|
+
|
|
879
|
+
**The shadow is destroyed, so the FAILURE RECORD is the only evidence.**
|
|
880
|
+
The rerun's status callback used to be `_fnDiscardStatusEvent`: every
|
|
881
|
+
step result and every line of output went to the floor, so a failed
|
|
882
|
+
rerun produced one sentence — "pipeline rerun exited non-zero" — about
|
|
883
|
+
a container that no longer existed. The researcher could not re-run the
|
|
884
|
+
shadow, could not read its logs, and could not tell a missing
|
|
885
|
+
dependency from a real divergence (researcher-reported, 2026-09-01).
|
|
886
|
+
`rerunDiagnostics.ftBuildRerunDiagnosticsCollector` keeps the first
|
|
887
|
+
failing step's label, name, exit code and a bounded output tail, and
|
|
888
|
+
both lanes persist it as `dictRerunFailure`. Three properties are
|
|
889
|
+
load-bearing: the FIRST failure (later steps fail because the first
|
|
890
|
+
did), a BOUNDED tail (this record is committed and published to Zenodo
|
|
891
|
+
— an unbounded log would put a researcher's whole console into a public
|
|
892
|
+
artifact), and unconditional FORWARDING (the CLI prints the same
|
|
893
|
+
stream; an observer that swallowed events would break the caller it was
|
|
894
|
+
added beside).
|
|
895
|
+
|
|
896
|
+
**Three states, not a boolean — twice over.** The row said "No current
|
|
897
|
+
rebuild attestation. Run this once every other check passes" over a
|
|
898
|
+
rerun that HAD run and reported a failing step, because the poll shipped
|
|
899
|
+
only `bRebuildAttestationCurrent`. "Never run", "ran and failed" and
|
|
900
|
+
"passed but stale" are different things and a researcher acts on them
|
|
901
|
+
differently; the poll now ships `dictRebuildAttestation` so the row can
|
|
902
|
+
tell them apart. Likewise `null` and `{}` in `dictRerunFailure` are
|
|
903
|
+
"this record predates capture" and "no step reported a failure" — the
|
|
904
|
+
migrators write `None` for exactly that reason.
|
|
905
|
+
|
|
906
|
+
**A shared summarizer does not know your new state.**
|
|
907
|
+
`fsSummarizeLevelStates` is shared with the Steps banner, so it counted
|
|
908
|
+
a `running` row as *nothing assessed* and painted a pulsing `?` over a
|
|
909
|
+
rerun plainly under way. `_fdictGroupStateByLevel` maps `running` to
|
|
910
|
+
`partial` before summarizing. When adding a level-cell state, check
|
|
911
|
+
every aggregation it flows into — the row and its banner are computed
|
|
912
|
+
by different code.
|
|
913
|
+
|
|
914
|
+
## The L3 rerun happens in a shadow container, not the researcher's
|
|
915
|
+
|
|
916
|
+
**Tier 5 no longer re-runs the workflow in the live project
|
|
917
|
+
container.** `shadowRerun.fdictRerunAndVerifyThroughShadow` is the one
|
|
918
|
+
entry point both attestation lanes use — the dashboard's
|
|
919
|
+
`/level3/verify` route and `vaibify reproduce --rerun`. It creates a
|
|
920
|
+
fresh container from the image digest the envelope's environment
|
|
921
|
+
snapshot pins,
|
|
922
|
+
copies the repository in, drives the shared `rerunVerification`
|
|
923
|
+
comparison against **the shadow's** filesystem, and destroys the shadow
|
|
924
|
+
with proof.
|
|
925
|
+
|
|
926
|
+
Two reasons, and the second is the one worth remembering. The rerun
|
|
927
|
+
used to overwrite the researcher's real outputs. And it exercised
|
|
928
|
+
whatever the project container had *become* — packages from a debugging
|
|
929
|
+
session, files from an interactive step — rather than the image
|
|
930
|
+
`reproduce.sh` would pull, so it could pass where a stranger's
|
|
931
|
+
reproduction would fail. `docs/architecture.md` carries the full model.
|
|
932
|
+
|
|
933
|
+
**`filesRepoLive` is the source of the image PIN, never the comparison
|
|
934
|
+
root.** The parameter is spelled that way on purpose: the older
|
|
935
|
+
function beside it takes a `filesRepo` that must be rooted on the
|
|
936
|
+
filesystem the rerun writes to, and passing the live adapter into the
|
|
937
|
+
comparison is the substitution that makes a verification grade a tree
|
|
938
|
+
the rerun never touched — every entry clean, every attestation passing.
|
|
939
|
+
`testTheComparisonIsRootedOnTheShadowNeverOnTheLiveRepository` drives
|
|
940
|
+
the lane with the two roots made distinct and is kill-confirmed against
|
|
941
|
+
exactly that swap.
|
|
942
|
+
|
|
943
|
+
**The shadow needs its own mutation admission, and forgetting it breaks
|
|
944
|
+
every rerun.** The rerun drives the ordinary `DockerConnection`, whose
|
|
945
|
+
execs ask the gate about the container id they name. On the dashboard
|
|
946
|
+
lane that runs inside a mode-(c) durable carrier opened for the
|
|
947
|
+
**project** container, so the shadow's execs are refused —
|
|
948
|
+
`MutationNotAdmittedError`, from inside a background task, reported to
|
|
949
|
+
the researcher as an unexplained attestation failure. That is not
|
|
950
|
+
hypothetical: the lane was written without it.
|
|
951
|
+
`commitCarrier.ftOpenDisposableContainerAdmission` is the seam, and it
|
|
952
|
+
is narrow in both directions —
|
|
953
|
+
`tests/testShadowContainerAdmission.py` asserts that the shadow's
|
|
954
|
+
admission reaches nothing but the shadow, and the project's reaches
|
|
955
|
+
nothing of the shadow.
|
|
956
|
+
|
|
957
|
+
**Do not read a green route-test as evidence this lane works.** The
|
|
958
|
+
route tests patch the shadow entry point out, precisely so they do not
|
|
959
|
+
touch a daemon. What exercises the lane is
|
|
960
|
+
`tests/testRerunVerifiesWhatItRan.py`, which builds the host clone, the
|
|
961
|
+
live container repo and the shadow copy as three genuinely distinct
|
|
962
|
+
directories and runs real commands against them, and
|
|
963
|
+
`tests/testDisposableContainerLive.py`, which drives a real daemon.
|
|
964
|
+
|
|
965
|
+
**The archive's parent directories must be stamped, not left to the
|
|
966
|
+
daemon.** A tarball may name `repo/data/file` without naming
|
|
967
|
+
`repo/data`, and both `put_archive` and `tar` then create the gap
|
|
968
|
+
ROOT-owned — so the container user owns its files and cannot create a
|
|
969
|
+
sibling beside them. Verified live: without the synthesized parents the
|
|
970
|
+
first write into the copied repository is refused. `disposableSpecification`
|
|
971
|
+
emits every parent as its own 1000:1000 member, and
|
|
972
|
+
`testFnWriteFileDefaultsToContainerUserOwnership` pins it as the second
|
|
973
|
+
tar-building write path.
|
|
974
|
+
|
|
975
|
+
**The shadow's execs run as the image's declared `USER`.**
|
|
976
|
+
`DockerConnection` resolves every exec's user from the image's
|
|
977
|
+
`Config.User`, falling back to `researcher`. The create specification
|
|
978
|
+
sets the container user numerically (`1000:1000`), which is always
|
|
979
|
+
valid, but the per-exec override is by NAME — so a shadow built from an
|
|
980
|
+
image that declares no `USER` and has no `researcher` account is refused
|
|
981
|
+
by the daemon with "unable to find user", on every step. An L3 envelope
|
|
982
|
+
pins the image vaibify built for the project, which carries the
|
|
983
|
+
directive, so this is a constraint on what a shadow can be built FROM
|
|
984
|
+
rather than a live defect. It was found by pointing the live test at a
|
|
985
|
+
stock base image; do not "fix" it by making the exec numeric without
|
|
986
|
+
working out what that does to the project-container lane, which relies
|
|
987
|
+
on the name.
|
|
988
|
+
|
|
989
|
+
**`/shadow` is not `/workspace`, and that is deliberate.** The shadow
|
|
990
|
+
carries no volumes at all, so borrowing the workspace name would invite
|
|
991
|
+
a reader to assume a mount that is not there. Ask
|
|
992
|
+
`shadowRerun.ftResolveShadowPaths` rather than composing the path.
|
|
993
|
+
|
|
994
|
+
**The repository export is coherence-pinned, and BOTH halves of the
|
|
995
|
+
check are load-bearing.** `coherentExport.fbaExportRepositoryCoherently`
|
|
996
|
+
observes every path git can enumerate immediately before and
|
|
997
|
+
immediately after the archive stream, and refuses unless (a) the two
|
|
998
|
+
observations are exactly equal AND (b) every archive member matches the
|
|
999
|
+
before-observation by an identity recomputed host-side over the
|
|
1000
|
+
archived bytes. Neither implies the other, which is the thing most
|
|
1001
|
+
likely to be "simplified" away:
|
|
1002
|
+
|
|
1003
|
+
- a file changed after the walk passed it leaves the archive perfectly
|
|
1004
|
+
consistent with the before-observation — only (a) sees it;
|
|
1005
|
+
- a file changed and changed back leaves both observations identical —
|
|
1006
|
+
only (b) sees it.
|
|
1007
|
+
|
|
1008
|
+
Two registry entries exist precisely to prove that, one per half:
|
|
1009
|
+
delete either check and exactly one of them survives. Do not collapse
|
|
1010
|
+
them.
|
|
1011
|
+
|
|
1012
|
+
**The exemption is `.git/` only, and its narrowness is a real bug
|
|
1013
|
+
class.** Git enumerates the working tree, not its own internals, so
|
|
1014
|
+
`.git/` is exempt from the member check. Writing that test as
|
|
1015
|
+
`startswith(".git")` instead of `startswith(".git/")` silently exempts
|
|
1016
|
+
`.gitignore`, `.gitattributes` and `.gitmodules` — real,
|
|
1017
|
+
manifest-relevant files — and
|
|
1018
|
+
`testTheGitInternalsExemptionIsNarrow` is the kill-confirmed guard.
|
|
1019
|
+
Any OTHER unobserved member is refused, naming a checked-out submodule
|
|
1020
|
+
as the likely cause, because a submodule's files are listed by no
|
|
1021
|
+
superproject git command.
|
|
1022
|
+
|
|
1023
|
+
**A researcher is warned before the copy, and the warning has one
|
|
1024
|
+
home.** `VaibifyApp.fnConfirmLevel3Verification` is the single opener;
|
|
1025
|
+
both entry points (the Project block's `verify-l3` action and the PROOF
|
|
1026
|
+
tab's own Verify button) call it, because a safety warning maintained
|
|
1027
|
+
in two places is one that drifts. The CLI prints the equivalent notice
|
|
1028
|
+
rather than prompting — a prompt would break every unattended
|
|
1029
|
+
`vaibify reproduce --rerun`. Neither is the safety mechanism: the
|
|
1030
|
+
export refuses a torn copy either way. They exist so a researcher who
|
|
1031
|
+
meets that refusal was already told what causes it, which is the whole
|
|
1032
|
+
premise of vaibify — never a baffling debugging session.
|
|
1033
|
+
`tests/browser/testVerifyWarnsBeforeCopyingTheProject.py` asserts the
|
|
1034
|
+
ORDER (no POST before the confirm), not the wording.
|
|
1035
|
+
|
|
1036
|
+
**Three container facts this lane depends on, all found the hard way.**
|
|
1037
|
+
`get_archive` cannot read out of a **tmpfs** mount — it answers 404 for
|
|
1038
|
+
a directory an exec in the same container lists happily. It reads out
|
|
1039
|
+
of a named **volume** fine, which is what real project repos live in
|
|
1040
|
+
(verified live). And `DockerConnection` execs `/bin/bash`, so an image
|
|
1041
|
+
without bash fails with a non-zero exit and empty stderr, which reads
|
|
1042
|
+
like a broken program rather than a missing shell. Third, and so far
|
|
1043
|
+
measured on ONE runtime (Colima 0.10.3, virtiofs, Docker Engine
|
|
1044
|
+
28.4.0): once the host file behind a `--mount` is deleted, every
|
|
1045
|
+
`get_archive` out of that container fails with "Could not find the
|
|
1046
|
+
file" while `exec` keeps working, so the export behind Verify L3 blames
|
|
1047
|
+
an intact `/workspace/<repo>`. The usual deleted source is a
|
|
1048
|
+
`/run/secrets/<name>` file. A failed directory archive read now names a
|
|
1049
|
+
deleted vaibify-managed secret on positive evidence only, and the remedy
|
|
1050
|
+
it names is Restart Container (`vaibify stop && vaibify start`), never
|
|
1051
|
+
`docker restart`, which reuses the missing file.
|
|
1052
|
+
`tests/testArchiveReadNamesAMissingMountLive.py` records what other
|
|
1053
|
+
runtimes do, and requires the failure only where it was measured.
|
|
1054
|
+
|
|
1055
|
+
**The disposable lifecycle is SHARED with the Agent Council.**
|
|
1056
|
+
`vaibify/docker/disposableContainer.py` (the SDK authority),
|
|
1057
|
+
`disposableSpecification.py` (the pure half) and `daemonCapacity.py`
|
|
1058
|
+
were extracted from the council's gateway so both lanes have one
|
|
1059
|
+
container lifecycle. Changes here reach both. The ledger in the gateway
|
|
1060
|
+
records reservations and outcomes and NOTHING else — admission quotas,
|
|
1061
|
+
per-provider accounting and the idle-watchdog veto belong to whoever is
|
|
1062
|
+
spending the resource, and the council wraps this rather than replacing
|
|
1063
|
+
it. Do not grow those policies into this module.
|
|
1064
|
+
|
|
1065
|
+
**Bound a container from the DAEMON's memory, never the host's.** On
|
|
1066
|
+
Linux they agree and the bug is invisible; on macOS the daemon is a VM
|
|
1067
|
+
with its own allocation (measured: 16 GB host over an 8.3 GB daemon), so
|
|
1068
|
+
a container sized from host RAM is over-provisioned and the kill arrives
|
|
1069
|
+
mid-workflow. `daemonCapacity` keeps the two figures apart by name —
|
|
1070
|
+
`iHostMemoryBytes` bounds what the hub materializes in its own address
|
|
1071
|
+
space, `iDaemonMemoryBytes` bounds the container — and
|
|
1072
|
+
`tests/testDaemonCapacity.py` drives them 16x apart so a test cannot
|
|
1073
|
+
pass while reading the wrong one.
|
|
1074
|
+
|
|
1075
|
+
## Contracts added with the appendix-consistency work
|
|
1076
|
+
|
|
1077
|
+
- **Unseeded randomness** is written by the lint into
|
|
1078
|
+
`dictStep["dictVerification"]["bUnseededRandomnessWarning"]` and read
|
|
1079
|
+
ONLY through `fbStepHasUnseededRandomnessWarning`. Three gates once
|
|
1080
|
+
read it from the step's top level, where nothing writes it, and the
|
|
1081
|
+
Level 3 check never fired.
|
|
1082
|
+
- **Scan-found dependencies** (`dependency-unreconciled`, Level 1): a
|
|
1083
|
+
scan counts only while everything it examined still holds — every
|
|
1084
|
+
script it read (a clean scan included), the scripts the step's
|
|
1085
|
+
commands name, and every step's output declarations in step order.
|
|
1086
|
+
When any of these has moved, a step reorder included, or the scan
|
|
1087
|
+
failed, the step reads "dependency scan not current" — never a pass
|
|
1088
|
+
and never a red verdict drawn from old data. A failed scan clears the
|
|
1089
|
+
step's findings. Findings and dismissals are keyed by step id.
|
|
1090
|
+
- **Context is not cause.** A recorded production/rerun context
|
|
1091
|
+
difference makes possible causes inspectable; it never explains a
|
|
1092
|
+
difference. Messages say "produced under different settings or
|
|
1093
|
+
hardware: <both contexts>". Acceptance rests on published
|
|
1094
|
+
comparisons only.
|
|
1095
|
+
- **Byte identity of regenerated outputs is observed, never an
|
|
1096
|
+
acceptance rule.** No gate and no test may require a rerun's outputs
|
|
1097
|
+
to be byte-identical under either execution profile. Exact integrity
|
|
1098
|
+
checks are NOT relaxed: published inputs, scripts, standards, the
|
|
1099
|
+
manifest and environment records stay byte-exact, and byte-sensitive
|
|
1100
|
+
regression tests remain valid.
|
|
1101
|
+
- **Policy v1 is frozen.** A changed vector figure cannot pass under v1
|
|
1102
|
+
whatever comparisons exist; `S_VECTOR_REMEDY` overstates the options
|
|
1103
|
+
and must not be edited in place. Corrections live outside the frozen
|
|
1104
|
+
file or in a future policy version.
|