Skip to content

Fix release-prepare CI typecheck regressions - #22

Merged
roodboi merged 5 commits into
mainfrom
fix/release-prepare-typecheck
Mar 23, 2026
Merged

Fix release-prepare CI typecheck regressions#22
roodboi merged 5 commits into
mainfrom
fix/release-prepare-typecheck

Conversation

@roodboi

@roodboi roodboi commented Mar 23, 2026

Copy link
Copy Markdown
Contributor

Summary

  • fix the TypeScript regressions that were breaking the Release Prepare workflow
  • update the affected Linear/tickets/runtime test fixtures so the stricter types compile cleanly
  • opt the release workflow into the Node 24 JavaScript action runtime

Verification

  • bun run turbo:typecheck
  • bun run privacy:check
  • bun run turbo:check
  • bun run turbo:test

Summary by CodeRabbit

  • New Features

    • Paginated project listing for Linear integrations to improve large-project handling.
  • Bug Fixes

    • Safer YAML frontmatter parsing to avoid crashes on malformed input.
    • Guarded merging of remote ticket links to prevent undefined-merge issues.
  • Improvements

    • Stronger type and authority handling for ticket and conflict resolution.
    • Clearer runtime result shapes for more reliable error reporting.
  • Tests

    • Expanded and hardened tests for Linear sync, pagination, and runtime caching.

@changeset-bot

changeset-bot Bot commented Mar 23, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 3009855

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai

coderabbitai Bot commented Mar 23, 2026

Copy link
Copy Markdown

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 755a1e90-4457-4e4a-8679-8636852b9296

📥 Commits

Reviewing files that changed from the base of the PR and between 89baa94 and 3009855.

📒 Files selected for processing (12)
  • packages/cli/index.ts
  • packages/db/tests/smoke.test.ts
  • packages/db/tsconfig.json
  • services/auth-broker/tests/config.test.ts
  • services/auth-broker/tsconfig.json
  • src/control-plane/extensions/linear/client.ts
  • src/control-plane/extensions/linear/commands.ts
  • src/control-plane/extensions/tickets/domain.ts
  • tests/config-paths.test.ts
  • tests/linear-client.test.ts
  • tests/linear-commands.test.ts
  • tsconfig.json
 ___________________________________________________________________
< That's not a helper function. That's a co-dependent relationship. >
 -------------------------------------------------------------------
  \
   \   (\__/)
       (•ㅅ•)
       /   づ

Walkthrough

This PR improves type safety across ticket and linear extension modules through discriminated unions and explicit type narrowing, strengthens null-safety with guards and fallbacks, refactors option parsing logic, adds test infrastructure helpers, and updates GitHub Actions configuration for JavaScript actions.

Changes

Cohort / File(s) Summary
GitHub Actions Configuration
.github/workflows/release-prepare.yml
Added job-level environment variable FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" to the semantic-release workflow job.
Type System Strengthening
src/lib/runtime-projects.ts, src/control-plane/extensions/tickets/domain.ts, src/control-plane/extensions/linear/commands.ts
Converted RuntimeProjectsResult to a discriminated union keyed by ok flag; tightened TicketFieldState.authority type to TicketFieldAuthority union; added explicit DisplayCell type constraints and type narrowing for Linear artifacts.
Null Safety & Defensive Guards
src/control-plane/extensions/linear/project-artifacts.ts, src/control-plane/extensions/tickets/provenance.ts
Added null-safe YAML parsing fallback with ?? ""; guarded against undefined remotes in buildTicketRemoteLinks; introduced normalizeConflictAuthority helper to validate conflict authority values.
Control Flow & Parsing Refactoring
src/control-plane/extensions/tickets/commands.ts, src/daemon/runtime-cache.ts, src/cli/prerequisites.ts
Refactored parseTicketDocumentOption to handle --kind and --role via separate consumeOptionValue calls; adjusted resolveRefreshResult argument construction; replaced includes() with explicit some() equality check.
Data Normalization
src/control-plane/extensions/tickets/normalized-model.ts
Consolidated legacy assignee normalization; added typed casts for array iterations; converted assertion helpers from arrow functions to function declarations with asserts type predicates.
Test Infrastructure & Helpers
tests/linear-commands.test.ts, tests/runtime-cache.test.ts, tests/tickets-git-channel.test.ts
Introduced typed test helpers createEmptyTicketDetail and createProjectArtifactLinearClient for standardized mocking; updated test fixtures with additional meta fields; added forceBareClone configuration option.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 Type safety blooms like clover in the spring,
Null guards and unions make the refactored code sing,
With tested helpers hopping through the test files clean,
Each discriminated path creates a safer in-between.
The linear artifacts and tickets now align,
A rabbit's work improving contracts, line by line! 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title directly references the primary objective of the PR—fixing TypeScript regressions in the release-prepare CI workflow—which aligns with the main changes across multiple type-related updates and workflow configuration.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/release-prepare-typecheck

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Tip

You can disable poems in the walkthrough.

Disable the reviews.poem setting to disable the poems in the walkthrough.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/control-plane/extensions/linear/commands.ts (1)

4143-4146: Consider converting this touched object-shape alias to an interface.

The new "review_required" member makes sense, but RecordedSyncConflict is still an object-shape type in a touched TS region. Converting it would keep this file aligned with the repo convention.

♻️ Small cleanup
-type RecordedSyncConflict = {
+interface RecordedSyncConflict {
   readonly field: string
   readonly authority: "hack" | "linear" | "review_required"
   readonly summary: string
   readonly localValue?: TicketMetadataValue
   readonly remoteValue?: TicketMetadataValue
 }
As per coding guidelines: `**/*.{ts,tsx}`: Prefer `interface` for defining object shapes in TypeScript
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/control-plane/extensions/linear/commands.ts` around lines 4143 - 4146,
Change the object-shape type alias RecordedSyncConflict into an equivalent
interface to match project conventions: replace the `type RecordedSyncConflict =
{ ... }` declaration with `interface RecordedSyncConflict { ... }`, preserving
the readonly modifiers, the field names (`field`, `authority`, `summary`) and
the union literal type for `authority` ("hack" | "linear" | "review_required")
so all usages of RecordedSyncConflict remain compatible.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/control-plane/extensions/linear/commands.ts`:
- Around line 2581-2583: The remote project lookup uses the one-page
listProjects({ first? }) call which only returns DEFAULT_PROJECT_SYNC_LIMIT
items, causing resolveProjectArtifactTarget() to falsely conclude "No Linear
project matches..." for workspaces > limit; update the code that calls
listProjects (the client wrapper used by resolveProjectArtifactTarget and the
call sites around the listed locations) to page through results until either the
matching project is found or no more pages remain (using cursor/after tokens or
repeated calls with offset logic), aggregating pages before applying the
--project-name / --team-id filter, and ensure DEFAULT_PROJECT_SYNC_LIMIT remains
the per-page size while the loop continues requests until completion or match.

In `@src/control-plane/extensions/tickets/domain.ts`:
- Around line 11-16: There's a duplicate type re-export of TicketDocument,
TicketDocumentKind, and TicketDocumentRole (they're already exported near the
top via `export type { ... } from "./documents.ts"`); remove the redundant
re-export at the later location that references those same identifiers (the
duplicate at the end of the file around the later export block) so the
TS2300/TS2304 errors go away, or if those identifiers are meant to be used as
local names first, change that later export to import them as types before
re-exporting—preferably just delete the duplicate re-export.

---

Nitpick comments:
In `@src/control-plane/extensions/linear/commands.ts`:
- Around line 4143-4146: Change the object-shape type alias RecordedSyncConflict
into an equivalent interface to match project conventions: replace the `type
RecordedSyncConflict = { ... }` declaration with `interface RecordedSyncConflict
{ ... }`, preserving the readonly modifiers, the field names (`field`,
`authority`, `summary`) and the union literal type for `authority` ("hack" |
"linear" | "review_required") so all usages of RecordedSyncConflict remain
compatible.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d7482d12-e866-4fdc-a983-9307c9c10ac0

📥 Commits

Reviewing files that changed from the base of the PR and between ef8f863 and 89baa94.

📒 Files selected for processing (13)
  • .github/workflows/release-prepare.yml
  • src/cli/prerequisites.ts
  • src/control-plane/extensions/linear/commands.ts
  • src/control-plane/extensions/linear/project-artifacts.ts
  • src/control-plane/extensions/tickets/commands.ts
  • src/control-plane/extensions/tickets/domain.ts
  • src/control-plane/extensions/tickets/normalized-model.ts
  • src/control-plane/extensions/tickets/provenance.ts
  • src/daemon/runtime-cache.ts
  • src/lib/runtime-projects.ts
  • tests/linear-commands.test.ts
  • tests/runtime-cache.test.ts
  • tests/tickets-git-channel.test.ts

Comment thread src/control-plane/extensions/linear/commands.ts
Comment thread src/control-plane/extensions/tickets/domain.ts
@roodboi
roodboi merged commit ce56e4c into main Mar 23, 2026
3 of 4 checks passed
@roodboi
roodboi deleted the fix/release-prepare-typecheck branch March 23, 2026 18:14
roodboi pushed a commit that referenced this pull request Mar 23, 2026
## 1.18.0 (2026-03-23)

* Add markdown-backed ticket documents design ([16c49fc](16c49fc))
* Add TypeScript path aliases ([a64d91f](a64d91f))
* Align desktop Linear sync guidance ([9fe8848](9fe8848))
* Change hack ticket ids to random IDs ([25aebd7](25aebd7))
* Define normalized Linear sync semantics ([159c4fe](159c4fe))
* Fix Linear project conflict fallback ([3259730](3259730))
* Fix Linear sync client project paging type ([3009855](3009855))
* Fix release prepare typecheck regressions ([89baa94](89baa94))
* HACK-428: checkpoint merge prep ([17d01f4](17d01f4))
* HACK-428: checkpoint merge prep ([f67c628](f67c628))
* HACK-429: checkpoint merge prep ([47e5d8f](47e5d8f))
* HACK-429: fix tickets checkout fallback wiring ([ddaaca5](ddaaca5))
* HACK-441: checkpoint merge prep ([4349751](4349751))
* HACK-448: checkpoint merge prep ([3f30fd2](3f30fd2))
* HACK-448: checkpoint merge prep ([3bb11fb](3bb11fb))
* HACK-449: checkpoint merge prep ([ebd9e39](ebd9e39))
* HACK-454: checkpoint merge prep ([a428423](a428423))
* HACK-459: checkpoint merge prep ([66fbf02](66fbf02))
* HACK-464: checkpoint merge prep ([4400bb9](4400bb9))
* HACK-468: checkpoint merge prep ([2a16e27](2a16e27))
* HACK-468: checkpoint merge prep ([51c5295](51c5295))
* HACK-468: checkpoint merge prep ([fc35b08](fc35b08))
* Merge branch 'hack-449-normalized-ticket-model' into symphony/HACK-546-integration-hack-428-20-more ([2080f15](2080f15))
* Merge branch 'symphony/HACK-428-program-core-offer-and-information-architecture' into symphony/HACK- ([df0901f](df0901f))
* Merge branch 'symphony/HACK-429-program-cli-ux-and-guided-setup' into symphony/HACK-546-integration- ([59f383d](59f383d))
* Merge branch 'symphony/HACK-430-program-github-capability-expansion' into symphony/HACK-546-integrat ([179527b](179527b))
* Merge branch 'symphony/HACK-437-rewrite-the-root-readme-around-the-three-core-ha' into symphony/HACK ([7298035](7298035))
* Merge branch 'symphony/HACK-438-split-docs-navigation-into-core-beta-and-extensi' into symphony/HACK ([70c1121](70c1121))
* Merge branch 'symphony/HACK-440-add-a-plain-language-integrations-overview-for-g' into symphony/HACK ([d4db2ac](d4db2ac))
* Merge branch 'symphony/HACK-441-define-the-prerequisite-detection-matrix-for-doc' into symphony/HACK ([a6bf131](a6bf131))
* Merge branch 'symphony/HACK-445-reposition-github-setup-and-docs-around-capabili' into symphony/HACK ([fe1ac27](fe1ac27))
* Merge branch 'symphony/HACK-448-define-the-first-class-github-workflow-set-revie' into symphony/HACK ([9132f98](9132f98))
* Merge branch 'symphony/HACK-450-design-the-sqlite-projection-and-append-only-jou' into symphony/HACK ([85f9174](85f9174))
* Merge branch 'symphony/HACK-451-preserve-git-portability-and-hidden-ref-sync-wit' into symphony/HACK ([e6ec536](e6ec536))
* Merge branch 'symphony/HACK-452-define-idempotent-external-sync-and-conflict-han' into symphony/HACK ([f63145d](f63145d))
* Merge branch 'symphony/HACK-453-design-markdown-backed-ticket-documents-and-spec' into symphony/HACK ([f208194](f208194))
* Merge branch 'symphony/HACK-454-redesign-hack-linear-setup-bind-and-status-aroun' into symphony/HACK ([e6a320f](e6a320f))
* Merge branch 'symphony/HACK-455-add-hack-managed-support-for-linear-project-docu' into symphony/HACK ([12d764f](12d764f))
* Merge branch 'symphony/HACK-465-improve-crash-capture-restart-guidance-and-proxy' into symphony/HACK ([e64da7d](e64da7d))
* Merge branch 'symphony/HACK-466-clarify-session-semantics-and-add-tmux-default-o' into symphony/HACK ([e7499a7](e7499a7))
* Merge branch 'symphony/HACK-468-define-team-and-organization-command-semantics-a' into symphony/HACK ([f5dbfc0](f5dbfc0))
* Merge branch 'symphony/HACK-472-research-existing-runtimes-and-adjacent-systems' into symphony/HACK- ([a2e5988](a2e5988))
* Merge branch 'symphony/HACK-473-write-hack-specific-runtime-requirements-for-age' into symphony/HACK ([ad6d1c0](ad6d1c0))
* Merge env artifact schema work from HACK-459 into integration branch ([f0e4875](f0e4875))
* Merge pull request #21 from hack-dance/symphony/HACK-546-integration-hack-428-20-more ([ef8f863](ef8f863)), closes [#21](#21)
* Merge pull request #22 from hack-dance/fix/release-prepare-typecheck ([ce56e4c](ce56e4c)), closes [#22](#22)
* Merge ticket normalization core work into integration branch ([c9bf522](c9bf522))
* Paginate Linear project lookup ([b914068](b914068))
* Repair daemon runtime reset handling and tests ([1fc5757](1fc5757))
* Resolve env portability branch merge conflicts in HACK-546 branch ([ba1f179](ba1f179))
* Resolve HACK-546 runtime reset merge state ([94d8218](94d8218))
* Resolve merge conflicts in HACK-546 integration branch ([0c59745](0c59745))
* test: cover linear milestone artifact commands ([0a58f39](0a58f39))
* test: cover local prerequisite handling exclusions ([8eebcf3](8eebcf3))
* test: relax env backend command timeout ([57c4e8c](57c4e8c))
* test: stabilize merge branch verification ([55ae8a1](55ae8a1))
* test: widen env backend integration timeouts ([3477a23](3477a23))
* test(env): avoid env backend timeout flakes ([79ef745](79ef745))
* test(global): add explicit command test timeouts ([2b20d89](2b20d89))
* test(tickets): expose checkout helper paths under __testOnly ([389740c](389740c))
* test(tickets): harden normalized model invariants ([eef1343](eef1343))
* integrate: preserve HACK-434 runtime hardening assets ([05d90bd](05d90bd))
* merge: integrate HACK-456 sync semantics docs ([d68d4e9](d68d4e9))
* merge: integrate HACK-505 random ticket id work ([de1f70a](de1f70a))
* chore: remove unrelated merge-prep artifacts ([66b9fa5](66b9fa5))
* chore(env): tighten managed artifact schema contract ([10430e3](10430e3))
* chore(symphony): checkpoint HACK-430 before integration ([749fbad](749fbad))
* chore(symphony): checkpoint HACK-436 before integration ([64e7af6](64e7af6))
* chore(symphony): checkpoint HACK-465 before integration ([4ec26f0](4ec26f0))
* chore(symphony): checkpoint HACK-465 before integration ([67004c4](67004c4))
* chore(symphony): finalize HACK-546 merge branch workspace updates ([6330a0f](6330a0f))
* fix: clarify env trust model boundaries ([8f39413](8f39413))
* fix: close linear project artifact edge cases ([ea08c7f](ea08c7f))
* fix: close prerequisite matrix coverage gaps ([16c1930](16c1930))
* fix: explain env storage without contract ([e22be09](e22be09))
* fix: harden linear project artifact reconciliation ([cd3fdf9](cd3fdf9))
* fix: harden recovery guidance inference ([1018d15](1018d15))
* fix: hide unsupported linear archive verbs ([4d8af4c](4d8af4c))
* fix: honor explicit linear artifact project routing ([453fdb7](453fdb7))
* fix: keep root help aligned with docs ia ([2613f35](2613f35))
* fix: keep root help aligned with docs ia ([7384d8e](7384d8e))
* fix: normalize linear prerequisite aliases ([f523440](f523440))
* fix: restore crash recovery inference ([c3b7847](c3b7847))
* fix: tighten linear artifact conflict handling ([4ddc130](4ddc130))
* fix: unify recovery workflow formatting ([ef8b180](ef8b180))
* fix(auth): allow org admins to administer teams ([c25ae2d](c25ae2d))
* fix(auth): allow org admins to administer teams ([59c5c01](59c5c01))
* fix(auth): widen org plugin session status typing ([64dd8b2](64dd8b2))
* fix(auth): widen org plugin session status typing ([0042167](0042167))
* fix(session): honor mux fallback for workspace flows ([271c144](271c144))
* fix(session): preserve workspace backend for isolated siblings ([e1ad2e8](e1ad2e8))
* fix(ssh): respect mux backend for workspace attach ([2f4239f](2f4239f))
* fix(tickets): finalize normalization conflict semantics ([bdced94](bdced94))
* fix(tickets): retry prepared event pushes safely ([e06fbd4](e06fbd4))
* feat: add explicit project ownership inspection ([4ded32e](4ded32e))
* feat: add linear project artifact client support ([c72c436](c72c436))
* feat: add linear project artifact command parsers ([f840359](f840359))
* feat: add linear project artifact file model ([8ffc5df](8ffc5df))
* feat: add linear project artifact workflows ([63b832a](63b832a))
* feat: document env portability trust model ([8f873de](8f873de))
* feat: harden project ownership inspection ([0b5078c](0b5078c))
* feat: improve runtime crash recovery guidance ([c0f6a67](c0f6a67))
* feat(auth): define org and team membership semantics ([0f8bc6d](0f8bc6d))
* feat(auth): define org and team membership semantics ([6fa9c28](6fa9c28))
* feat(env): define portable managed env artifact schema ([eaab6df](eaab6df))
* feat(session): clarify workspace semantics and tmux onboarding ([cc8a606](cc8a606))
* feat(tickets): add document-backed ticket content ([d166be1](d166be1))
* feat(tickets): define normalized ticket entity model ([de42cea](de42cea))
* feat(tickets): finalize normalization core flow ([957c2ad](957c2ad))
* feat(tickets): make sync writes idempotent ([517031d](517031d))
* feat(tickets): normalize provenance helpers ([77e2c91](77e2c91))
* feat(tickets): normalize ticket replay metadata ([b192f04](b192f04))
* feat(tickets): persist sqlite projection cache ([57c479e](57c479e))
* feat(tickets): use random ticket ids ([1b1c083](1b1c083))
* docs: add adjacent capabilities to cli reference ([20d22bc](20d22bc))
* docs: add agent-native runtime requirements ([263d756](263d756))
* docs: add docs ia proposal and guide labels ([4cbf226](4cbf226))
* docs: add integrations overview ([1a0d9a2](1a0d9a2))
* docs: add linear project artifact design ([565f1b2](565f1b2))
* docs: add tickets normalization core plan ([1f984b2](1f984b2))
* docs: align github cli summaries with workflow story ([2110ab9](2110ab9))
* docs: align integration summaries with cli help ([9cc075c](9cc075c))
* docs: align linear artifact design with shipped verbs ([9650f17](9650f17))
* docs: clarify core offer and docs ia ([4c7f463](4c7f463))
* docs: clarify core offer and docs ia ([daa5ed3](daa5ed3))
* docs: clarify github integration capability story ([c54be5e](c54be5e))
* docs: clarify linear project artifact targeting ([3c512b9](3c512b9))
* docs: clarify shared admin guidance ([9282a3c](9282a3c))
* docs: cross-link planned linear project artifacts ([23f2dd8](23f2dd8))
* docs: define first-class github workflows ([49ce93c](49ce93c))
* docs: define first-class github workflows ([f8192a5](f8192a5))
* docs: define prerequisite detection matrix ([362e256](362e256))
* docs: define teams and organizations admin program ([fcad814](fcad814))
* docs: expand linear project artifact help ([78cc3ea](78cc3ea))
* docs: format github workflow docs ([0bbe84e](0bbe84e))
* docs: format github workflow docs ([75b33bc](75b33bc))
* docs: format github workflow scope docs ([d9f6973](d9f6973))
* docs: format github workflow scope docs ([954e8b2](954e8b2))
* docs: label beta guide entry points ([7ad4ffd](7ad4ffd))
* docs: narrow github workflow scope diff ([4f1251d](4f1251d))
* docs: reposition github setup around workflows ([4511a33](4511a33))
* docs: restore markdown table formatting ([9b09408](9b09408))
* docs: restore markdown table formatting ([7f8cb4d](7f8cb4d))
* docs: split docs into core beta and reference paths ([efd104b](efd104b))
* docs: strengthen runtime requirements review criteria ([165edc7](165edc7))
* docs: surface admin trust boundaries ([ac10f03](ac10f03))
* docs: surface linear project artifact workflows ([cafe775](cafe775))
* docs: survey agent-native runtime baselines ([4347418](4347418))
* docs(env): clarify managed artifact invariants ([73203cd](73203cd))
* docs(linear): align help with project routing UX ([cf74c61](cf74c61))
* docs(readme): center root docs on core promises ([a0daeec](a0daeec))
* docs(readme): fix linear sync example ([ed3737a](ed3737a))
* docs(session): align gateway workspace wording ([421c4ea](421c4ea))
* docs(tickets): add normalized sync implementation plan ([7f5581a](7f5581a))
* docs(tickets): add portability implementation plan ([3e98540](3e98540))
* docs(tickets): clarify portable journal paths ([53d764e](53d764e))
* docs(tickets): clarify projection rebuild triggers ([b35ac6f](b35ac6f))
* docs(tickets): close projection design review gaps ([2cdd096](2cdd096))
* docs(tickets): define git portability contract ([92af187](92af187))
* docs(tickets): define normalized sync idempotency ([5fe5859](5fe5859))
* docs(tickets): design sqlite projection and journal ([7b316b7](7b316b7))
* docs(tickets): document sqlite projection cache ([e6c8cb8](e6c8cb8))
* docs(tickets): finalize projection doc cleanup ([18ee39f](18ee39f))
* docs(tickets): format projection docs ([a0f4e4a](a0f4e4a))
* docs(tickets): harden projection replay design ([7c8b476](7c8b476))
* docs(tickets): plan sqlite projection implementation ([c8e6d92](c8e6d92))
* docs(tickets): record journal projection architecture ([8ae5759](8ae5759))
* docs(tickets): resolve projection design review ([474f1dd](474f1dd))
* docs(tickets): tighten sqlite projection handoff docs ([86870d6](86870d6))
* refactor: simplify linear artifact target selection ([8fd8107](8fd8107))
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