Skip to content

guard: surface signing readiness summary#177

Merged
jazz1x merged 1 commit into
mainfrom
guard/evidence-status-signing-summary
Jul 4, 2026
Merged

guard: surface signing readiness summary#177
jazz1x merged 1 commit into
mainfrom
guard/evidence-status-signing-summary

Conversation

@jazz1x

@jazz1x jazz1x commented Jul 4, 2026

Copy link
Copy Markdown
Owner

When release signing readiness is blocked by missing prerequisites, scripts/evidence-status.sh now 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 contract passes\n- make quality passes\n- make guard passes

@jazz1x jazz1x merged commit 0670882 into main Jul 4, 2026
5 checks passed
@jazz1x jazz1x deleted the guard/evidence-status-signing-summary branch July 4, 2026 12:32
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant