the signals and their derived score are provisional and subject to change.
validate manually before sharing.
163e5e83a368839d1b628dbb0b1ca41327699161097bbe03b1ba1 month agonoreply@anthropic.comec6175932d501 month agonoreply@anthropic.comce57b2220b201 month agonoreply@anthropic.coma8fdbe88152f2 months agoCo-authored-by: Claude Opus 5 <noreply@anthropic.com>0dbca2586f292 months agonoreply@anthropic.com78b3c332f9a52 months agonoreply@anthropic.com4b967c464be42 months agonoreply@anthropic.com117bf5b981542 months agonoreply@anthropic.com04e4782a3f6b2 months agonoreply@anthropic.com6fc3381351732 months agonoreply@anthropic.com21601f5a95952 months agonoreply@anthropic.com9a9278195ab72 months agoCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>007be56a44962 months agonoreply@anthropic.com8e199ca09ab02 months agonoreply@anthropic.comd8bfbe786a5b2 months agonoreply@anthropic.com932c5b0323cc2 months agonoreply@anthropic.com2b89160f46ae2 months agonoreply@anthropic.comb07f33d516d52 months agonoreply@anthropic.com7695ed1139cb2 months agonoreply@anthropic.comf976bba0bc032 months agonoreply@anthropic.comf6910f465e9d2 months agonoreply@anthropic.com9b0202fcb95c2 months agonoreply@anthropic.com653f17a0046b2 months agonoreply@anthropic.comeff1307319302 months agoCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>57ef534c6b612 months agoCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1fc30ee427e12 months agoCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>3a5cee8c7c542 months agoCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>aca9994b8f432 months agoCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>812259ebff532 months agonoreply@anthropic.com83b08643dcd82 months agoClaude-Session: https://claude.ai/code/session_01BZSwy1qCmhotyRun8UKNKc5ee84c0a26833 months agoCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>3dd0a1612d553 months agoCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>4e75d6f2c19b3 months agoCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>024a3709c10f3 months agoCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>0e49f6e67d893 months agoCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>40a20e6b4b7d3 months agoCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>5515324a3d4d3 months agoCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>2c3afe00f73b3 months agoCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>cbde195aaa933 months agoCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>ca382a0de5436 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>ff154eb133e06 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>14594cc0b6db6 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>e6bf49e8029a6 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>17070e3f6bb26 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>e082329896d56 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>90ca6868f7b76 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>7269b249bc6e6 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>d50a41377c246 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>49205aed6df96 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>4a8a219735076 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>b5fabc38119a6 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>88422fe135ea6 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>ab14750344a96 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>52ae3db5c4d76 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>cd9a7ef7868c6 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>890a9c6155926 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>18a611b602886 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>11136dadee2e6 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>a87bfe40f6b46 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>f5f8cc1717ff6 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>cec73b0f29466 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>d02141b856c66 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>f94d4abdc3f56 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>36341f5ccaab6 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>d13f6748738b6 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>19db3d2288546 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>7864b57e93956 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>faab273907766 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>bb72018123206 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>4b4ddf46c7bb6 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>9705cbfc8ce26 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>081c61c632ff6 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>6be70c7727f76 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>cb0647f3b0046 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>a3d667af68046 months agoCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>f9c15ac2d8346 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>98f8111fffc26 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>30f67531589a6 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>a3ae8e3ffcfb6 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>93ff4f90c5a26 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>7d91be014d527 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>0c50a97228ff7 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>bdb06b5aaef07 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>89cb0c08690e7 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>7f8abe7172437 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>97a2a100c6947 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>0b97c05aa24d7 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>9a2eb773778e7 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>caea80bf83167 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>ce2b010558ec7 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>75041b44585e7 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>e119e51a007f7 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>589b0f6af8dd7 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>9786fdc82dea7 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1238c6b9d03d7 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>ab74f16456107 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>55adae648a8f8 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>c206992f30f88 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>00d2130375d88 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>d0ccab8a99ac8 months agoCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com># KeeForge Unit Tests
Use this folder to find the smallest test slice that proves a change. Prefer unit tests over UI tests unless the behavior is truly UI-driven.
## Running Tests
```bash
xcodebuild test -project KeeForge.xcodeproj -scheme KeeForge \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' \
-only-testing:KeeForgeTests/DatabaseViewModelTests -quiet
```
- Run only the classes touched by the change.
- `-only-testing:` takes test **class** names; the map below lists files, and the two# Entry Views
Entry detail, editing, history, attachments, icon selection, and the shared row-action state.
## Screen Map
- `PendingRowActions.swift` is the single home for the row-action state the three shells share: `PendingEntryDeletion`, `PendingGroupDeletion`, `PendingDeletion` (with `confirmationAlert(viewModel:)`), and `PendingMove`. `GroupListView.swift`, `EntryListView.swift`, and the macOS `../../App/RegularDatabaseWorkspaceView.swift` all build their delete confirmations and move sheets from i# Persistence Services
This folder owns database references, cached copies, file access, and local-save infrastructure.
## Main Files
- `AppGroupContainer.swift` is the single resolution point for App Group storage: the container directory (`AppGroupContainer.url`) and the shared `UserDefaults` suite (`AppGroupContainer.defaults`). Every reader and writer of shared storage — this folder, `../AppSupport/SettingsService.swift`, `../AppSupport/FaviconService.swift`, `../AutoFill/AutoFillDiagnostics.swift`# App Support Services
This folder holds app-scoped helpers that support UI behavior and secondary product surfaces.
## Main Files
- `SettingsService.swift` decides what is local-only versus App Group-shared with the extension. Its app-local appearance settings include the color scheme and optional sRGB accent color; no stored accent means the asset-catalog default. It owns the app-local `AuthenticationGracePeriod` (Always Ask by default, at most five minutes, never unbounded) that `../Security/SecretAcc# App Folder
This folder owns app startup, scene transitions, and the adaptive root shell that connects the database list to one active database session.
## Main Files
- `KeeForgeApp.swift` creates the shared `DatabaseListViewModel` and `AppRoutingCoordinator`, owns the optional active `DatabaseViewModel`, chooses the compact vs regular-width root layout, and wires global scene-phase behavior. It reads the persisted appearance mode and optional app accent color with `@AppStorage`, applying both to the ma# Test Support
Shared test infrastructure: fixtures, fakes, spies, and assertion helpers. Nothing here declares a test class — suites live one level up in `../`.
## Helpers
- `TestDatabaseSupport.swift` builds fixture URLs, supports fixture subdirectories, reads non-database fixture bytes (`fixtureData(named:extension:bundle:)`, for key files), and creates bookmark-backed `DatabaseReference` values for tests.
- `FakeCredentialIdentityStore.swift` is the lock-guarded in-memory `CredentialIdentityStorePr# Components Views
Reusable controls shared across the feature folders.
## Screen Map
- `FaviconView.swift` renders an entry's icon: a custom `Meta/CustomIcons` image, a cached/fetched favicon, or the standard-icon glyph fallback from `StandardIconView.swift`. Its `FaviconLoadModel` clears the previous image when the requested domain changes and ignores stale or cancelled fetch responses; `FaviconLoadModelTests` covers that lifetime without network requests.
- `StandardIconView.swift` is the single rende# AutoFill Services
This folder holds extension-facing helpers shared between the main app and the AutoFill target.
## Main Files
- `AutoFillSaveCoordinator.swift` stages and saves new credentials, refreshes shared caches, and queues deferred cloud uploads when needed. `destinationGroup(in:preferredGroupID:)` is the one place that decides which group a new AutoFill entry goes into; Database Details and the AutoFill creators display the same resolution.
- `CredentialMatcher.swift` matches KeePass entries # Repository Agent Workflows
Read the relevant skill before release or pre-release review work:
- `skills/prepare-release/SKILL.md` prepares a new version or patch's first candidate.
- `skills/respin-release/SKILL.md` replaces an unshipped candidate of the same version.
- `skills/ship-release/SKILL.md` publishes accepted artifacts. Shared release procedures live in `skills/prepare-release/references/`.
- `skills/pre-release-review/SKILL.md` performs a static review before candidate preparation, including # DatabaseList Views
Database picking, creation, per-database settings, master-key and encryption-settings changes, and export to Files.
## Screen Map
- On iOS/iPadOS, `DatabaseListView` owns the `EditMode` binding shared by its Edit button and list, and allows row moves only while editing. This keeps the long-press context menu from competing with the reorder gesture and leaving XCTest waiting for animations. macOS retains ordinary drag reordering without an Edit button.
- `DatabaseListView.swift` takes# AutoFillExtension
This target provides password, passkey, one-time-code, and new-credential save/generate fulfillment through `AuthenticationServices`.
## Main Files
- `CredentialProviderCoordinator.swift` is the platform-neutral core: request handling (passwords, passkeys, one-time codes, save/generate-password), vault access and unlock orchestration, credential matching, passkey assertion, and the `cleanup()` teardown lifecycle. It must stay free of UIKit/AppKit so both the iOS and macOS shells can h# Cloud Services
This folder owns provider abstractions plus the cloud-backed open/save pipeline.
## Main Files
- `CloudSyncModels.swift` describes cloud provider files and sync metadata used by the database list and sync coordinator. Optimistic concurrency uses a single opaque `rev` field; the provider-specific mapping (Dropbox rev, OneDrive cTag/eTag, WebDAV ETag, FTP SHA-256 of the file bytes → `rev`) happens in the this folder providers.
- `CloudProvider.swift` and `CloudProviderRegistry.swift` def# Security Services
This folder holds device-security integrations and secret-handling helpers outside the core models.
## Main Files
- `BiometricService.swift` wraps LocalAuthentication flows used by the app and AutoFill. `quickUnlockPolicy` is what the app's explicit quick-unlock action evaluates: `.deviceOwnerAuthenticationWithBiometricsOrCompanion` in the native Mac app, `.deviceOwnerAuthenticationWithBiometrics` on iPhone and iPad. AutoFill always passes the biometric-only default. Neither accepts t# AGENTS.md
Entry point for coding agents working on KeeForge. This file is intentionally brief; most useful guidance now lives in folder-local docs next to the code.
## High level guidance
- Do not preserve backward compatibility unless required by the existing install base. Remove obsolete paths instead of adding compatibility layers, fallbacks, or migrations.
- Choose the simplest implementation that fully meets the current requirements. Avoid speculative abstractions, configuration, and indirection.
# GitHub CI And Templates
GitHub Actions workflows, issue/PR templates, funding config, and repo assets. Actions is one leg of CI; Xcode Cloud and a local release gate cover the rest.
## Workflows
- `workflows/ios18-ui-regression.yml` — manual diagnosis of the five b60 UI failures on pinned Xcode 26.3, iOS 18.6, and iPhone SE (3rd generation). Select an immutable source ref, the five methods or their four complete classes, and one, three, or five repetitions. Optional `test_helpers_ref` overlays `Entry# Extensions Folder
Use this folder for small app-specific extensions and conformances that are shared across multiple views or models but do not justify their own feature folder.
## Current Files
- `NavigationConformances.swift` keeps navigation state workable with the app's model types. `KPEntry` and `KPGroup` compare equal by ID alone, so `@Observable` does not notify when a property such as `DatabaseViewModel.searchResults` is reassigned entries that differ only in content, and a view fed from it kee# TOTP Views
TOTP enrollment: QR scanning and the incoming-URL destination picker.
## Screen Map
- `TOTPQRScannerSheet.swift` (whole file `#if os(iOS)`; VisionKit's `DataScannerViewController` does not exist on macOS, where the scan affordance is hidden) is the TOTP enrollment camera sheet: a `DataScannerViewController` representable restricted to QR symbology. Scanning starts from a deferred main-actor task with one retry (`startScanning()` fails before the scanner is on screen), a still-failing start s# Unlock Views
Unlocking a single database: password and key-file entry, biometric affordances.
## Screen Map
- `UnlockView.swift` owns password/key-file entry and biometric affordances for one database. On the native Mac app the biometric button and caption name whichever of Touch ID and Apple Watch can approve right now (`DatabaseViewModel.biometricLabel` / `biometricCaption`); it is only ever an explicit action, never a lifecycle auto-unlock. Its header padlock: `isSealed` starts shut, and `sealShutIf# KeeForge macOS UI Tests
Smoke suite for the native macOS app (target `KeeForgeMacUITests`, scheme `KeeForgeMac`). Methodology and fixture guidance live in `../KeeForgeUITests/README.md`; this suite reuses the same fixtures and accessibility identifiers — preserve them in both places. `MacUITestCase` mirrors the iOS target's fixture-injection launch environment but uses clicks, `typeKey` keyboard shortcuts, and right-click context menus instead of taps/swipes.
## Test Classes
- `MacSmokeUITests` — u# Settings Views
App settings, release education, support surfaces, and DEBUG-only developer tooling.
## Screen Map
`../../ViewModels/AppSettingsViewModel.swift` owns app preference persistence and live effects, account loading/sign-out, and favicon cache clearing. `SettingsView` connects it to the current database session on appearance and session changes, then reloads values without replaying effects. Keep layout, platform presentation, and color conversion here; add preference effects to the model wit# Group Views
Post-unlock group navigation, the group editor, and the group icon and move-destination pickers.
## Screen Map
- `GroupListView.swift`, `EntryListView.swift`, `EntryDetailView.swift`, and `SearchView.swift` own post-unlock navigation, entry/group creation and deletion affordances, expired-entry list/detail warnings, enabled expiration timestamps, detail presentation, and the global read-only + unsaved-change surfaces shown while a database is open. On macOS the sidebar column cannot host pu# Cloud Views
Cloud provider file browsing and the manual WebDAV and FTP connect forms.
## Screen Map
- `WebDAVConnectView.swift` owns the manual WebDAV connect sheet (server address, username, password with `PasswordInputRow`, advanced unencrypted-HTTP opt-in, inline error, Connect/Cancel), backed by `WebDAVConnectViewModel`. Its nested sheet sizes itself to the form, so nothing is clipped today, but the `Form` still takes `macGroupedForm()` for the sheet rule above; each field takes `macFormFieldStyle(# Models Folder
This folder holds the data and logic that the rest of the app depends on. It is the most security-sensitive part of the repo.
## High-Risk Core
The canonical high-risk file list (kept in sync with `AGENTS.md`): `KDBXParser.swift`, `KDBX3Parser.swift`, `KDBXWriter.swift`, `KDBXXMLSerializer.swift`, `KDBXCrypto.swift`, `KDBXOuterCipher.swift`, `OpaqueXMLNodes.swift`, `DatabaseDraft.swift`, `EntryEdit.swift`, `Entry.swift`, `Group.swift`, `EncryptedValue.swift`, `TOTPGenerator.swift`.
- `KD# Shared App Sources
The app-target map and cross-cutting flows live in [README.md](README.md). Read the owning subfolder's `AGENTS.md` before changing its code.
## Workflows
- App and Mac targets use folder globs in `../project.yml`; `xcodegen generate` picks up new files. The `KeeForgeAutoFill` and `KeeForgeMacAutoFill` shared-source allow-lists must stay byte-identical. Edit both together and keep shared imports/APIs extension-safe; read `../AutoFillExtension/AGENTS.md` when changing extension-shared # ViewModels Folder
Observable app state and UI-independent workflow owners live here. Use Foundation/Observation, never SwiftUI (enforced by `ci_scripts/validate_architecture.py` during XcodeGen). Keep session policy, workspace state, form state, and workflow lifetimes separate; adding methods to the largest model is not the default.
## Main View Models
- `DatabaseWorkspaceState.swift` owns selection, typed `DatabaseRoute` navigation, browsing mode, search activation, and menu request counters. `Databas# SearchAndTags Views
Search results and the tag browser.
## Screen Map
- `MacQuickSearchView.swift` (`#if os(macOS)`) is the content of the menu bar quick-search panel (`../../Services/AppSupport/MacQuickAccessController.swift`) over `../../ViewModels/MacQuickSearchViewModel.swift`: a hand-off card for no database / locked (button → main window), or a search field plus `EntryRow` results whose selected row shows copy and Open in KeeForge buttons. Keys are handled by the panel's key monitor, not here, ---
name: prepare-release
description: Prepare the first KeeForge candidate for a new marketing version, including minor/major releases and patches or hotfixes to shipped versions. Prepare version and release notes, use the correct release branch, build and gate iOS, Mac App Store, and direct Mac artifacts, and hand off for soak. Use for a new version, version bump, release cut, patch, or initial TestFlight candidate; use respin-release for another candidate of the same version and ship-release for producti---
name: keeforge-swiftui
description: Review KeeForge SwiftUI views for accessibility, state, navigation, and rendering problems, or apply that guidance to a requested UI change. Invoke explicitly during the adoption pilot.
license: MIT
---
# KeeForge SwiftUI
Apply this skill to the requested views or diff. Review requests are read-only unless the user also asks for fixes. Do not expand a UI task into a repository-wide modernization.
## Start with the local contract
Read the applicable folder guidance---
name: test-audit
description: >
Assess KeeForge test quality, redundant coverage, and test-support complexity;
audit a selected subsystem or apply an authoring checklist while changing tests.
Use for test audits, consolidation, and pruning requests. Release readiness across
changes belongs to pre-release-review; ordinary test authoring needs only the
checklist, not an audit campaign.
---
# KeeForge Test Audit
Improve regression protection and reduce maintenance without losing distinct contra---
name: triage-feedback
description: Triage product feedback by inspecting its message and attachments, checking implementation and existing issues, classifying each concern, and drafting a reporter response. Use when reviewing a bug report, feature request, or support message.
---
# Triage feedback
Produce an evidence-backed disposition for the selected feedback. Preserve the distinction between what the reporter observed, what inspection establishes, and what still needs reproduction. Default to inves---
name: pre-release-review
description: >
Statically review KeeForge changes since a shipped release for behavior risks,
documentation inconsistencies, i18n gaps, and missing test coverage. Return a
prioritized action list before candidate preparation, without running tests or
writing a report. Use for a pre-release review or readiness audit.
---
# KeeForge Pre-release Review
Review changes before candidate preparation and return actionable findings in chat.
This is a static review: do not run t---
name: publish-app-store-version
description: Prepare and publish an already-built KeeForge iOS or macOS version through the App Store Connect API using an API key. Use for uploaded-build selection, localized listing and release notes, reviewer attachments, release settings, and App Review staging or submission. Do not use for version bumps, release candidates, tags, compatibility gates, or archive creation; use prepare-release or respin-release for candidates, and ship-release for coordinated production---
name: respin-release
description: Replace an unshipped KeeForge candidate after a fix on an existing release branch. Keep the marketing version, advance the global build number, rebuild all three channels, repeat gates, and restart soak. Use for a respin or another RC of the same version; use prepare-release for a new marketing version and ship-release for production publication.
---
# Respin a KeeForge candidate
Read [the shared release contract](../prepare-release/references/shared.md) first.
Confir---
name: keeforge-github-issues
description: >
Create, edit, comment on, close, reopen, classify, or change project fields for issues in
KeeForge/KeeForge. Use whenever an action will mutate a KeeForge GitHub issue. Do not use for
read-only issue searches or reviews that will not change GitHub state.
---
# KeeForge GitHub Issues
Apply this workflow before every GitHub issue mutation, including mutations requested as part of
another workflow. Keep the mutation within the user's authorized scope.
##---
name: ship-release
description: Ship an accepted, soaked KeeForge candidate across iOS, Mac App Store, and direct Mac. Verify the recorded artifact identities and soak evidence, coordinate App Store review, create the shipped tag after approval and final go, publish the exact artifacts, and reconcile released issues. Use when asked to ship or promote a soaked build; never create a replacement candidate here.
---
# Ship a KeeForge release
Read [the shared release contract](../prepare-release/references.gitignoreclaude-code.claude/*