GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — google-github-sync-bot/plans at main · code-store-platform/google-github-sync-bot

Expand file tree

/

plans

/
Copy path

Directory actions

More options

More options

Directory actions

More options

More options

Latest commit

 

History

History
History
/

plans

/
Copy path

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
001-typecheck-and-ci.md
001-typecheck-and-ci.md
 
 
002-google-workspace-pagination.md
002-google-workspace-pagination.md
 
 
003-sync-job-pipeline-reliability.md
003-sync-job-pipeline-reliability.md
 
 
004-activity-merged-pagination.md
004-activity-merged-pagination.md
 
 
005-error-handler-hardening.md
005-error-handler-hardening.md
 
 
006-bff-authentication.md
006-bff-authentication.md
 
 
007-atlassian-characterization-tests.md
007-atlassian-characterization-tests.md
 
 
008-bff-route-tests.md
008-bff-route-tests.md
 
 
009-shared-constants-and-types.md
009-shared-constants-and-types.md
 
 
010-readme-and-env-example.md
010-readme-and-env-example.md
 
 
011-dedupe-google-github-services.md
011-dedupe-google-github-services.md
 
 
012-github-api-call-reduction.md
012-github-api-call-reduction.md
 
 
README.md
README.md
 
 

README.md

Outline

Implementation Plans

Generated by the improve skill on 2026-06-11 against commit 635fc3c (branch feat/dashboard-mvp). Execute in the order below unless dependencies say otherwise. Each executor: read the plan fully before starting, honor its STOP conditions, and update your row when done.

Execution order & status

Plan Title Priority Effort Depends on Status
001 Make tsc --noEmit pass; add typecheck script + CI P1 S — IN PROGRESS (bun run typecheck passes; no CI workflow yet)
002 Paginate Google Workspace user listing (>300 users = wrongful org removals) P1 S 001 DONE
003 Sync-job pipeline reliability (stuck running jobs, atomic claim, NOTIFY fix) P1 M 001 DONE (NOTIFY dropped for 5s polling; stale-job cleanup shared via findActiveJob)
004 Fix merged activity-feed pagination P1 S 001 DONE
005 Stop leaking internal error details from the BFF error handler P1 S 001 IN PROGRESS (superseded by HttpApi typed errors; GitHub/Google error messages still returned in 502 bodies)
006 Require authentication for the BFF API and the dashboard P1 M 001, 005 DONE
007 Characterization tests for Atlassian suspend/delete logic P2 M 001 TODO
008 Integration tests for the BFF routes P2 M 001 (best after 003, 004) TODO
009 Centralize job types/statuses/API types in shared P2 S 001 (after 003) IN PROGRESS (API types/statuses live in shared/api; 'github_sync' still a literal in BFF + worker)
010 Rewrite stale README + add .env.example P2 S — (after 006 if possible) DONE
011 Consolidate duplicated Google/GitHub services into shared P3 M 002 (hard), 008; 007 recommended TODO
012 Cut N+1 GitHub API storms on user-detail endpoints P3 M 001; 008 recommended TODO

Status values: TODO | IN PROGRESS | DONE | BLOCKED (with one-line reason) | REJECTED (with one-line rationale)

Dependency notes

  • 001 first, always — it's the verification baseline; every other plan gates on bun run typecheck, which fails today.
  • 002 before 011 (hard dependency) — consolidating the services before the pagination fix lands would re-spread the >300-users truncation bug.
  • 003 before 009 — both edit packages/bff/src/routes/sync.ts and packages/worker/src/services/sync-job-repo.ts; 003 changes logic, 009 then swaps literals for constants.
  • 005 before 006 — 006's 401s flow through the rewritten error handler and its tests reuse it.
  • 003/004 before 008 — route tests should lock in the fixed behavior, not the bugs.
  • 007 and 008 before 011 — they are the safety net that makes the consolidation refactor verifiable.
  • 006 before 010 if possible — 010's .env.example should include 006's new auth variables (010 is written to pick up whatever the live config schemas contain).

Findings considered and rejected

Recorded so future audits don't re-litigate them:

  • "Jobs double-completed after failure" (sync-engine catchAll) — false positive: the catchAll path returns empty invited/removed, making the completion condition false. The real defect is the stuck-running job, covered by plan 003.
  • "status as 400 hardcodes all error responses to 400" — false positive: a TypeScript cast doesn't change runtime values. The cast is removed incidentally by plan 005.
  • "Audit-log inserts not awaited (silent failures)" — false positive: every db.insert(auditLog) in routes/{users,teams,repos}.ts is awaited.
  • "Atlassian delete URL malformed" (api-client.ts:234) — https://api.atlassian.com/users/{account_id}/manage/lifecycle/delete is the documented Atlassian user-management lifecycle endpoint; not a bug.
  • Sync-endpoint DoS via unbounded job creation — mostly mitigated: the 409 dedupe check caps the queue at one pending/running job per type. Auth (plan 006) closes the rest.
  • Stale Google auth singleton in BFF routes — google.auth.GoogleAuth refreshes tokens automatically; not a real defect.
  • PII (emails/usernames) in logs and Slack notifications — intentional product behavior for an internal admin/audit tool; not worth doing.
  • "Invite race when a user is deleted mid-sync" — already handled gracefully (error accumulated, sync continues); noise.

Deferred findings (real, but not selected for planning)

  • No actor identity in audit_log (no performed_by column; activity feed hardcodes trigger: 'dashboard') — blocked on per-user auth; revisit after plan 006 ships and if/when OIDC replaces Basic Auth. Noted in plan 006's maintenance notes.
  • No runtime validation of API request bodies (c.req.json<T>() casts; Zod available but unused at boundaries) — moderate value; natural to add per-route once route tests (008) exist.
  • repos.ts route tests — deferred from plan 008 to keep it a day-ish; mirror teams.test.ts.
  • Direction options surfaced to the maintainer (not planned): GitHub-sync dry-run/preview endpoint (the diff logic already computes lists before acting); surfacing sync_history.details in the dashboard; Atlassian visibility in the dashboard.
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.