guard: surface signing readiness summary#177
Merged
Merged
Conversation
jazz1x
added a commit
that referenced
this pull request
Jul 5, 2026
Update RELEASE-CANDIDATE.md to reflect the current evidence state after PR #177:\n\n- Screen evidence is now current locally via ./scripts/app-screen-evidence-review.sh.\n- Source-level accessibility contract passes, but manual accessibility review (52 fields across 13 scenarios) and runtime ./scripts/app-accessibility-smoke.sh remain pending on a permissioned Mac session.\n- Split the combined "Screen proof" blocker into separate "Screen proof" and "Accessibility proof" rows for clarity.\n\nNo code changes. Verification:\n- ./scripts/project-contract.sh 1) project goals contract... 2) planning pack contract... 3) CLI interface contract... 4) design system contract... 5) graph workflow contract... 6) verification contract... project contract clean passes\n- ./scripts/quality.sh 1) CLI command inventory drift... 2) state taxonomy docs drift... 3) guardrail docs drift... 4) anti-goal wording drift... 5) workflow drift... 6) project contract drift... 1) project goals contract... 2) planning pack contract... 3) CLI interface contract... 4) design system contract... 5) graph workflow contract... 6) verification contract... project contract clean 7) loop contract drift... 0) import guard matcher... 1) architecture boundary imports... 2) package dependency boundaries... package boundary graph clean 3) loop documentation wiring... 4) app presentation boundary... 5) shell orchestration boundary... loop contract clean 8) CLI smoke scenarios... 1) list reads metadata fixture... 2) where reads metadata fixture... 3) doctor reads metadata fixture... 4) scan config reads config fixture... 5) reminders read expiry notification fixture... cli smoke clean 9) app accessibility contract... 1) required accessibility identifiers... 2) required reusable accessibility identifiers... 3) required accessibility labels... 4) required reusable accessibility labels... app accessibility contract clean 10) app design contract... 1) native Mac utility structure... 2) graph and repair surfaces... 3) design system rules... 4) anti-theater source guard... app design contract clean 11) app UX flow contract... 1) primary user loop docs... 2) orient and narrow flow anchors... 3) inspect and action flow anchors... 4) settings and dismissal flow anchors... 5) repair queue usability anchors... app ux flow contract clean 12) app evidence scenarios contract... app evidence scenarios contract clean 13) app accessibility evidence template contract... app accessibility evidence template contract clean 14) release signing evidence template contract... release signing evidence template contract clean 15) app menubar smoke script contract... quality gate clean passes\n- /Library/Developer/CommandLineTools/usr/bin/swift-format lint --recursive --strict Package.swift Sources Tests Apps swift test Test Suite 'All tests' started at 2026-07-05 22:06:58.700. Test Suite 'All tests' passed at 2026-07-05 22:06:58.701. Executed 0 tests, with 0 failures (0 unexpected) in 0.000 (0.001) seconds ◇ Test run started. ↳ Testing Library Version: 1902 ↳ Target Platform: arm64e-apple-macos14.0 ◇ Test credentialArtworkOverrideResolvesFileNamesInsideArtworkRoot() started. ◇ Test credentialArtworkStoreRemovesPreviousFileWhenReplacingArtwork() started. ◇ Test settingsScrollTargetRawValuesAreStableEvidenceLabels() started. ◇ Test credentialArtworkStoreImportsAndLoadsManifest() started. ◇ Test shellSettingsStoreSavesAndLoadsConfig() started. ◇ Test environmentScannerCreatesPlaintextObservationsWithoutSecretValues() started. ◇ Test sampleSettingsDataUsesUniqueScanSourcePersistenceIDs() started. ◇ Test credentialArtworkStoreRemovesArtworkAndManifestEntry() started. ◇ Test credentialArtworkStoreSurfacesUnreadableManifestAsIssue() started. ◇ Test shellProfileScannerAcceptsDirectAssignmentsAndExportAssignments() started. ◇ Test credentialArtworkStoreKeepsSimilarCredentialIDsInDistinctFiles() started. ◇ Test credentialArtworkStoreRejectsUnsupportedImageTypes() started. ◇ Test environmentScannerKeepsStableServiceNamesForCommonCredentialSuffixes() started. ◇ Test shellProfileScannerCreatesObservationsWithoutSecretValues() started. ◇ Test keychainInventoryScannerCreatesOrphanObservationsWithoutSecretValues() started. ◇ Test keychainItemReferenceRejectsBlankServiceOrAccount() started. ◇ Test credentialStateRawValuesAreStableCliLabels() started. ◇ Test doctorIgnoresRegisteredState() started. ◇ Test reconcilerKeepsUnmatchedKeychainObservationAsOrphan() started. ◇ Test shellSettingsStoreLoadsLegacyFullConfigManifest() started. ◇ Test reconcilerMarksMatchedMetadataKeychainLocationRegistered() started. ◇ Test configFileScannerCreatesObservationsWithoutSecretValues() started. ◇ Test fileMetadataStoreLoadsCredentialRecordsWithoutSecretValues() started. ◇ Test shellSettingsStoreSurfacesUnreadableManifestAsIssue() started. ◇ Test doctorKeepsRecordInspectionAsGraphCompatibilityLayer() started. ◇ Test configFileScannerKeepsStableCredentialOrder() started. ◇ Test fileMetadataStoreRejectsMissingLocationFields() started. ◇ Test fileMetadataStoreRejectsInvalidState() started. ◇ Test reconcilerMarksMissingMetadataKeychainLocation() started. ◇ Test fileMetadataStoreRejectsNegativeNotificationLeadDays() started. ◇ Test nonEmptyTextRejectsBlankInput() started. ◇ Test fileMetadataStoreRejectsNotificationWithoutExpiry() started. ◇ Test doctorFindsUnhealthyStatesFromInventoryGraph() started. ◇ Test doctorClassifiesErrorStates() started. ◇ Test inventoryGraphProjectsRecordsIntoNodesAndEdges() started. ◇ Test fileMetadataStoreDerivesExpiringStateFromExpiryMetadata() started. ◇ Test fileMetadataStoreDerivesExpiredStateFromExpiryMetadata() started. ◇ Test fileMetadataStoreLoadsIgnoredCredentialRefs() started. ◇ Test fileMetadataStoreRejectsInvalidExpiryDate() started. ◇ Test inventoryGraphSummaryCountsGraphProjection() started. ◇ Test expiryReminderPlannerClassifiesReminderStatus() started. ◇ Test reconcilerPreservesNonKeychainMetadataLocations() started. ◇ Test inventoryGraphProjectsCredentialsForListAndWhere() started. ◇ Test fileMetadataStoreLoadsExpiryReminderMetadata() started. ◇ Test nonEmptyTextTrimsInput() started. ◇ Test inventoryGraphProjectsObservationsIntoNodesAndEdges() started. ◇ Test shellSettingsStoreUsesDefaultsWhenManifestIsMissing() started. ◇ Test inventoryGraphDoesNotDuplicateEquivalentEdges() started. ◇ Test doctorIgnoresExplicitlyIgnoredCredentials() started. ✔ Test credentialStateRawValuesAreStableCliLabels() passed after 0.003 seconds. ✔ Test sampleSettingsDataUsesUniqueScanSourcePersistenceIDs() passed after 0.003 seconds. ✔ Test shellProfileScannerAcceptsDirectAssignmentsAndExportAssignments() passed after 0.003 seconds. ✔ Test environmentScannerKeepsStableServiceNamesForCommonCredentialSuffixes() passed after 0.003 seconds. ✔ Test doctorIgnoresRegisteredState() passed after 0.003 seconds. ✔ Test reconcilerKeepsUnmatchedKeychainObservationAsOrphan() passed after 0.003 seconds. ✔ Test settingsScrollTargetRawValuesAreStableEvidenceLabels() passed after 0.003 seconds. ✔ Test configFileScannerKeepsStableCredentialOrder() passed after 0.003 seconds. ✔ Test doctorKeepsRecordInspectionAsGraphCompatibilityLayer() passed after 0.003 seconds. ✔ Test reconcilerMarksMissingMetadataKeychainLocation() passed after 0.003 seconds. ✔ Test reconcilerMarksMatchedMetadataKeychainLocationRegistered() passed after 0.003 seconds. ✔ Test keychainItemReferenceRejectsBlankServiceOrAccount() passed after 0.003 seconds. ✔ Test nonEmptyTextRejectsBlankInput() passed after 0.003 seconds. ✔ Test environmentScannerCreatesPlaintextObservationsWithoutSecretValues() passed after 0.003 seconds. ✔ Test keychainInventoryScannerCreatesOrphanObservationsWithoutSecretValues() passed after 0.003 seconds. ✔ Test configFileScannerCreatesObservationsWithoutSecretValues() passed after 0.003 seconds. ✔ Test shellProfileScannerCreatesObservationsWithoutSecretValues() passed after 0.003 seconds. ✔ Test doctorClassifiesErrorStates() passed after 0.003 seconds. ✔ Test doctorFindsUnhealthyStatesFromInventoryGraph() passed after 0.003 seconds. ✔ Test inventoryGraphSummaryCountsGraphProjection() passed after 0.003 seconds. ✔ Test inventoryGraphProjectsRecordsIntoNodesAndEdges() passed after 0.003 seconds. ✔ Test shellSettingsStoreSurfacesUnreadableManifestAsIssue() passed after 0.003 seconds. ✔ Test reconcilerPreservesNonKeychainMetadataLocations() passed after 0.003 seconds. ✔ Test credentialArtworkOverrideResolvesFileNamesInsideArtworkRoot() passed after 0.003 seconds. ✔ Test inventoryGraphProjectsCredentialsForListAndWhere() passed after 0.003 seconds. ✔ Test credentialArtworkStoreRejectsUnsupportedImageTypes() passed after 0.003 seconds. ✔ Test fileMetadataStoreRejectsInvalidState() passed after 0.003 seconds. ✔ Test fileMetadataStoreRejectsMissingLocationFields() passed after 0.003 seconds. ✔ Test inventoryGraphProjectsObservationsIntoNodesAndEdges() passed after 0.003 seconds. ✔ Test inventoryGraphDoesNotDuplicateEquivalentEdges() passed after 0.003 seconds. ✔ Test nonEmptyTextTrimsInput() passed after 0.003 seconds. ✔ Test fileMetadataStoreRejectsNotificationWithoutExpiry() passed after 0.003 seconds. ✔ Test doctorIgnoresExplicitlyIgnoredCredentials() passed after 0.003 seconds. ✔ Test credentialArtworkStoreSurfacesUnreadableManifestAsIssue() passed after 0.003 seconds. ✔ Test fileMetadataStoreLoadsIgnoredCredentialRefs() passed after 0.003 seconds. ✔ Test fileMetadataStoreLoadsCredentialRecordsWithoutSecretValues() passed after 0.003 seconds. ✔ Test shellSettingsStoreLoadsLegacyFullConfigManifest() passed after 0.003 seconds. ✔ Test shellSettingsStoreUsesDefaultsWhenManifestIsMissing() passed after 0.003 seconds. ✔ Test shellSettingsStoreSavesAndLoadsConfig() passed after 0.004 seconds. ✔ Test credentialArtworkStoreImportsAndLoadsManifest() passed after 0.004 seconds. ✔ Test credentialArtworkStoreRemovesArtworkAndManifestEntry() passed after 0.005 seconds. ✔ Test credentialArtworkStoreKeepsSimilarCredentialIDsInDistinctFiles() passed after 0.005 seconds. ✔ Test credentialArtworkStoreRemovesPreviousFileWhenReplacingArtwork() passed after 0.005 seconds. ✔ Test fileMetadataStoreRejectsInvalidExpiryDate() passed after 0.005 seconds. ✔ Test fileMetadataStoreRejectsNegativeNotificationLeadDays() passed after 0.005 seconds. ✔ Test fileMetadataStoreLoadsExpiryReminderMetadata() passed after 0.005 seconds. ✔ Test fileMetadataStoreDerivesExpiringStateFromExpiryMetadata() passed after 0.006 seconds. ✔ Test fileMetadataStoreDerivesExpiredStateFromExpiryMetadata() passed after 0.006 seconds. ✔ Test expiryReminderPlannerClassifiesReminderStatus() passed after 0.006 seconds. ✔ Test run with 49 tests in 0 suites passed after 0.006 seconds. swift build --product KeydexApp [0/1] Planning build Building for debugging... [0/3] Write swift-version--58304C5D6DBC2206.txt Build of product 'KeydexApp' complete! (0.17s) ./scripts/forbidden-patterns.sh passes\n- ./scripts/evidence-status.sh git_sha=09186f1 git_dirty=clean app_screen_evidence=needs-attention app_screen_evidence_reason=app screen evidence review: tmp/screen-evidence/default-window.manifest is missing expected manifest value: git_sha=09186f1 app_accessibility_manual=needs-attention app_accessibility_manual_reason=app accessibility evidence review: tmp/accessibility-evidence/default-window.manifest is missing expected manifest value: git_sha=09186f1 release_signing_readiness=blocked release_signing_readiness_reason=release signing readiness: missing release signing prerequisites: Developer ID Application signing identity in the local Keychain release_signing_readiness_developer_id_identity=missing release_signing_readiness_notarytool=present release_signing_readiness_stapler=present release_signing_evidence=blocked release_signing_evidence_reason=release signing readiness is blocked; signing evidence cannot be current until readiness passes needs_attention=2 is current
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When release signing readiness is blocked by missing prerequisites,
scripts/evidence-status.shnow emits per-prerequisite status lines:\n\n-release_signing_readiness_developer_id_identity\n-release_signing_readiness_notarytool\n-release_signing_readiness_stapler\n\nThe project contract was updated to verify the implementation shape (parser loop and output format) instead of demanding runtime-generated key literals in source.\n\nVerification:\n-make contractpasses\n-make qualitypasses\n-make guardpasses