Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/release-artifact.yml
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,9 @@ jobs:
)
if grep -q '^Authority=Developer ID Application:' <<<"$SIGNATURE"; then
SIGNING_MODE=developer-id
codesign --force --sign "$SIGN_IDENTITY" --timestamp \
--identifier com.opentype.voiceinput.dmg \
"dist/Utter-$RELEASE_VERSION.dmg"
VERIFY_ARGS+=(--require-developer-id)
elif grep -q '^TeamIdentifier=not set$' <<<"$SIGNATURE"; then
SIGNING_MODE=self-signed
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ Tests use owner modules directly. Construction fixtures under `Tests/OpenTypeTes
- **Every stage requires explicit human approval before the next one starts.** Set the artifact's `Status: pending approval` and stop for the user's decision; never mark a stage `approved` on the user's behalf. `approved` requires `Approved-by` and `Approved-date`. Artifacts without a Status header are legacy merged bundles.
- Begin implementation only after intent has observable acceptance criteria and medium/high-risk design choices have been reviewed.
- Always run `bash scripts/sdlc-checks.sh`, `bash scripts/ci-basic-checks.sh`, and `swift test`. Add release-style build, real-window visual QA, permission/privacy paths, or clean-machine checks in proportion to risk.
- High-risk changes require an independent verifier, explicit rollback, PR approval, and protected production approval.
- High-risk changes require an independent verifier, explicit rollback, the owner's explicit merge authorization, and protected production approval. This single-maintainer repository requires PRs and passing CI, but not a separate GitHub approving reviewer; see `docs/sdlc/github-controls.md`.
- A production incident must link a corrective intent and add a regression test, deterministic guardrail, eval case, or explicit reason automation is impossible.
- Never fall back to ad-hoc signing when configured signing fails. A self-signed release must use the configured identity, pass the same artifact/checksum checks, and be labeled as not Apple-notarized.

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"phase": "configured",
"attempted_secret_names": [
"APPLE_ID",
"APPLE_TEAM_ID",
"APPLE_APP_PASSWORD",
"APPLE_CERTIFICATE_PASSWORD",
"APPLE_CERTIFICATE_P12"
],
"cleanup_errors": [],
"temporary_keychain_deleted": true,
"keychain_search_list_restored": true,
"temporary_private_directory_removed": true,
"configuration_success": true,
"success": true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"total_count": 2,
"branch_policies": [
{
"id": 63176355,
"node_id": "MDE2OkdhdGVCcmFuY2hQb2xpY3k2MzE3NjM1NQ==",
"name": "main",
"type": "branch"
},
{
"id": 63176361,
"node_id": "MDE2OkdhdGVCcmFuY2hQb2xpY3k2MzE3NjM2MQ==",
"name": "v*",
"type": "tag"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"total_count": 5,
"secrets": [
{
"name": "APPLE_APP_PASSWORD",
"created_at": "2026-10-15T16:16:45Z",
"updated_at": "2026-10-15T16:16:45Z"
},
{
"name": "APPLE_CERTIFICATE_P12",
"created_at": "2026-10-15T16:16:49Z",
"updated_at": "2026-10-15T16:16:49Z"
},
{
"name": "APPLE_CERTIFICATE_PASSWORD",
"created_at": "2026-10-15T16:16:46Z",
"updated_at": "2026-10-15T16:16:46Z"
},
{
"name": "APPLE_ID",
"created_at": "2026-10-15T16:16:41Z",
"updated_at": "2026-10-15T16:16:41Z"
},
{
"name": "APPLE_TEAM_ID",
"created_at": "2026-10-15T16:16:43Z",
"updated_at": "2026-10-15T16:16:43Z"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"xctest_bundles": 14,
"xctest_executed": 1143,
"xctest_skipped": 17,
"xctest_failures": 0,
"unique_swift_testing_cases": 1,
"swift_testing_failures": 0,
"empty_swift_testing_bundles": 13,
"complete": true,
"test_bundle_hashes_unchanged": true,
"native_evidence": "TASK_TMP/utter-developer-id-ci-evidence-8lm_1sy5/native-run-9d5cbdd1",
"swiftpm_wrapper": "blocked before test execution by nested sandbox_apply; preserved in swift-test.log",
"_public_redaction": {
"original_sha256": "4837b5e5549a9387fb11c26b7c00fc52d776f24a8da111d73888743675e293e0",
"scope": "Local machine paths and redundant commit emails; original evidence retained privately"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"isolated_import_and_sign" : "passed",
"keychain_search_list_restored" : true,
"sha1" : "0A1A804E9C5D7BE644E4A6B884487BB5191F691D",
"sha256" : "1B499618154DEB0204896CDB199AA65D25EDA2188FEDBB0E29A73063728E4112",
"team" : "G9L7H3T3D5",
"temporary_keychain_deleted" : true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"verifier": "/root/signing_verifier",
"result": "no remaining blocker",
"helper_sha256": "b7fe86e2080cd7b6a007cb05a2eff6035fd4a15fb8c432f01e963b0c42749512",
"human_approval": false,
"scope": "technical readiness under approved plan; does not approve production",
"compatibility_correction": "System LibreSSL used for Apple PKCS12; independently reviewed"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
[
{
"user": {
"login": "IchenDEV",
"id": 34794972,
"node_id": "MDQ6VXNlcjM0Nzk0OTcy",
"avatar_url": "https://avatars.githubusercontent.com/u/34794972?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/IchenDEV",
"html_url": "https://github.com/IchenDEV",
"followers_url": "https://api.github.com/users/IchenDEV/followers",
"following_url": "https://api.github.com/users/IchenDEV/following{/other_user}",
"gists_url": "https://api.github.com/users/IchenDEV/gists{/gist_id}",
"starred_url": "https://api.github.com/users/IchenDEV/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/IchenDEV/subscriptions",
"organizations_url": "https://api.github.com/users/IchenDEV/orgs",
"repos_url": "https://api.github.com/users/IchenDEV/repos",
"events_url": "https://api.github.com/users/IchenDEV/events{/privacy}",
"received_events_url": "https://api.github.com/users/IchenDEV/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"state": "approved",
"comment": "Human user explicitly approved production for run 38770474797 and v0.0.53 after reviewing passing CI and independent verification. Direct chat decision on 2026-10-16: approve this production release.",
"environments": [
{
"id": 20910208532,
"node_id": "EN_kwDORZD8nM8AAAAE3lh2FA",
"name": "production",
"url": "https://api.github.com/repos/IchenDEV/utter/environments/production",
"html_url": "https://github.com/IchenDEV/utter/deployments/activity_log?environments_filter=production",
"created_at": "2026-08-31T07:05:58Z",
"updated_at": "2026-10-15T16:16:22Z",
"can_admins_bypass": false
}
]
}
]
Loading
Loading