Skip to content

[codex] Implement Board-Man entitlement core MVP#73

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

[codex] Implement Board-Man entitlement core MVP#73
uniplanck merged 2 commits into
mainfrom
codex/boardman-entitlement-core-mvp

Conversation

@uniplanck

@uniplanck uniplanck commented Jun 9, 2026

Copy link
Copy Markdown
Owner

Summary

Scope-audited and narrowed PR #73 to Entitlement Core MVP.

  • Centralizes Board-Man entitlement state, plans, feature flags, plan limits, metadata, and gate checks in Entitlement.swift.
  • Keeps default runtime entitlement as Free.
  • Adds focused entitlement tests and project membership only.
  • Leaves runtime enforcement, License UI, Appearance UI, backend activation, Keychain/device binding, and Sparkle/release work out of scope.

Scope audit

File Classification Reason
Clipy/Sources/Services/Entitlement.swift KEEP Central entitlement core/types/gate implementation.
ClipyTests/EntitlementGateTests.swift KEEP Focused tests for Free defaults, Pro unlocks, inactive states, and offlineGrace behavior.
Board-Man.xcodeproj/project.pbxproj KEEP Minimal test-file membership only. Removed prior test-runner/product-name surgery.
Clipy/Sources/Services/LicenseToken.swift JUSTIFY Existing token parser must construct the new Entitlement / PlanLimits shape to compile. No network/backend behavior added.
Clipy/Sources/Managers/MenuManager.swift JUSTIFY Minimal compile-only adjustment because Plan is now Free/Pro only; no runtime gate enforcement added.
Clipy/Sources/Preferences/Panels/CPYBetaPreferenceViewController.swift JUSTIFY Minimal compile-only adjustment because Plan no longer has founder/trial cases; no UI redesign.
Clipy/Sources/Services/ClipService.swift REMOVE/REVERT Runtime history enforcement deferred to PR #74.
Clipy/Sources/Snippets/CPYSnippetsEditorWindowController.swift REMOVE/REVERT Runtime snippet/pin enforcement deferred to PR #74.
Clipy/Sources/Services/LicenseActivationClient.swift REMOVE/REVERT Activation/backend-like stub changes removed from this PR.
Board-Man.xcodeproj/xcshareddata/xcschemes/Board-Man.xcscheme REMOVE/REVERT Test-runner scheme surgery removed; runner issue documented as separate.

What was kept

  • LicenseState: free, trial, proActive, proExpired, invalid, offlineGrace, locked
  • Plan: free, pro
  • EntitlementFeature: unlimitedHistory, unlimitedSnippets, advancedAppearance, exportImport, pasteAnalytics, futureSync
  • PlanLimits
  • LicenseMetadata
  • Entitlement
  • EntitlementGate
  • Focused entitlement test source and minimal project membership

What was reverted/deferred

  • Runtime Free-limit enforcement in clipboard/snippet paths
  • Snippet editor gate changes
  • Activation-client behavior changes
  • Scheme/test-runner configuration changes
  • Any License UI or Appearance UI redesign

Free / Pro behavior

  • Free defaults: history 100, pinned items 3, snippets 5, snippet folders 1.
  • Pro uses unlimited representation via PlanLimits.unlimited, exposed through EntitlementGate.limit(for:) as nil.
  • locked, invalid, proExpired, and conservative offlineGrace do not behave as active Pro.
  • No UserDefaults isPro=true, local JSON plan=pro, plaintext license storage, permanent offline Pro, private key, network activation, or release/appcast behavior was added.

Gate API

  • canUse(feature:)
  • limit(for:)
  • canAddHistoryItem(currentCount:)
  • canPinItem(currentPinnedCount:)
  • canCreateSnippet(currentSnippetCount:)
  • canCreateSnippetFolder(currentFolderCount:)
  • requiresUpgrade(for:)

Validation results

  • rtk git status --short: only pre-existing untracked _copy/ remains.
  • rtk git diff --stat main...HEAD: 6 files changed, 346 insertions, 120 deletions.
  • rtk git diff --check main...HEAD: passed.
  • 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.
  • Pure Swift entitlement check: passed (ENTITLEMENT_CORE_CHECK=OK).

Test runner limitation

rtk xcodebuild test ... -only-testing:ClipyTests/EntitlementGateTests previously reached compile/launch but failed in the local macOS test runner with IDELaunchServicesLauncher - Failed to Launch. I did not keep broad scheme or product-name surgery in this PR. This should be handled separately.

Explicitly out of scope

  • License UI
  • Appearance UI
  • backend activation
  • Keychain device binding
  • Sparkle release/appcast

Next PR recommendation

PR #74 should wire runtime execution paths to EntitlementGate for history, pinned items, snippets, and snippet folders after this core lands.

@uniplanck uniplanck marked this pull request as ready for review June 9, 2026 00:38
@uniplanck uniplanck merged commit 880a740 into main Jun 9, 2026
2 checks passed
@uniplanck uniplanck deleted the codex/boardman-entitlement-core-mvp branch June 9, 2026 00:39
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