Skip to content

[codex] Implement runtime entitlement gates#74

Merged
uniplanck merged 2 commits into
mainfrom
codex/boardman-runtime-entitlement-gates
Jun 9, 2026
Merged

[codex] Implement runtime entitlement gates#74
uniplanck merged 2 commits into
mainfrom
codex/boardman-runtime-entitlement-gates

Conversation

@uniplanck

@uniplanck uniplanck commented Jun 9, 2026

Copy link
Copy Markdown
Owner

Summary

  • Connect runtime execution paths to the central EntitlementGate from PR [codex] Implement Board-Man entitlement core MVP #73.
  • Fix Clipboard History to use retention/trim behavior instead of creation blocking.
  • Keep pin/snippet/folder behavior as creation blocking at Free limits.
  • No License UI, Appearance UI, activation/backend, Keychain/device binding, or Sparkle/release work added.

Files changed

  • Clipy/Sources/Services/ClipService.swift
  • Clipy/Sources/Services/Entitlement.swift
  • Clipy/Sources/Managers/MenuManager.swift
  • Clipy/Sources/Snippets/CPYSnippetsEditorWindowController.swift
  • ClipyTests/EntitlementGateTests.swift

Runtime gates added

  • Clipboard History: ClipService.save(with:) accepts new history items, then trims oldest entries to EntitlementGate.historyRetentionLimit().
  • Pinned Items: PinnedSnippetStore.add(_:) uses EntitlementGate.canPinItem(currentPinnedCount:) before adding a new pin.
  • Snippets: both snippet creation paths use EntitlementGate.canCreateSnippet(currentSnippetCount:).
  • Snippet Folders: both folder/group creation paths use EntitlementGate.canCreateSnippetFolder(currentFolderCount:).

Free-limit behavior

  • History: Free accepts a new item, then retains newest 100 items by trimming oldest entries during normal save flow.
  • Pinned items: Free blocks new pins when current pinned count is at or above 3.
  • Snippets: Free blocks new snippet creation when current snippet count is at or above 5.
  • Snippet folders: Free blocks new folder/group creation when current folder count is at or above the configured folder limit.

Non-destructive behavior

  • History over-limit data is only trimmed as part of normal history save/retention flow after accepting a new item.
  • Existing over-limit pinned items, snippets, and folders are not deleted.
  • Existing pinned items remain intact; additional pinning is blocked when over limit.
  • Existing snippets/folders remain readable/editable through existing paths; only new creation is blocked.
  • No destructive migration or bulk deletion was added.

Validation results

  • rtk git status --short: only pre-existing untracked _copy/ remains after commit.
  • rtk git diff --stat main...HEAD: 5 files changed, 90 insertions, 14 deletions.
  • rtk git diff --check: passed.
  • rtk git diff --cached --check: passed before commit.
  • rtk xcodebuild -project Board-Man.xcodeproj -scheme Board-Man -configuration Debug -derivedDataPath "${TMPDIR:-/tmp}/BoardManCodexValidation" -destination 'generic/platform=macOS' -skipPackagePluginValidation -skipMacroValidation CODE_SIGNING_ALLOWED=NO build: passed.

Tests / pure check

  • Updated EntitlementGateTests for history retention, snippet folder limits, over-limit non-mutating behavior, and Pro runtime action allowance.
  • Xcode test runner is still treated as out of scope because of the known IDELaunchServicesLauncher issue from PR [codex] Implement Board-Man entitlement core MVP #73.
  • Pure Swift runtime entitlement check passed: ENTITLEMENT_RUNTIME_GATE_CHECK=OK.

Out of scope

  • License UI
  • Appearance UI
  • backend activation
  • Keychain device binding
  • Sparkle release/appcast
  • existing data migration/deletion

@uniplanck uniplanck marked this pull request as ready for review June 9, 2026 00:54
@uniplanck uniplanck merged commit 9c1daaa into main Jun 9, 2026
2 checks passed
@uniplanck uniplanck deleted the codex/boardman-runtime-entitlement-gates branch June 9, 2026 00:55
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