Skip to content

Latest commit

 

History

History
112 lines (82 loc) · 4.5 KB

File metadata and controls

112 lines (82 loc) · 4.5 KB

TODO — @xtandard/flags

Legend: [ ] todo · [~] in progress · [x] done · [!] blocked

P0 Bootstrap

  • package.json (name, exports map, scripts, deps, peers)
  • tsconfig.json · vite.config.ts (pack + test) · vite.ui.config.ts
  • .gitignore · mise.toml · LICENSE (MIT) · .npmrc
  • install deps; verify vp pack + vp test on trivial entry

P1 Core (highest priority)

  • src/schema.ts — Flag/Variant/Rule/Condition/Snapshot/Draft types
  • src/hash.ts — MurmurHash3 → unit interval
  • src/validation.ts — valibot schemas + validateDraft
  • src/evaluator.ts — eval order, condition operators, deterministic splits
  • src/snapshot.ts — compile draft → snapshot, versioning, key layout
  • tests: evaluator, splits (distribution), conditions, snapshot, type tests

P2 Storage

  • storage/contract.ts (FlagsStorage + Watchable/Transactional/CAS)
  • storage/memory · file · unstorage · redis
  • integration tests (real Redis via docker)

P3 OpenFeature provider

  • openfeature.ts — memory-first, background refresh, last-known-good
  • tests: loads snapshot · admin down · redis down after load · missing → defaults

P4 Server / API

  • create-fetch-handler · routes · static-assets · render-index-html · base-path
  • auth + authz middleware, readonly mode, audit
  • server tests (config, assets, SPA fallback, CRUD, publish, rollback, basePath)

P5 Auth & Authorization

  • auth: contract · none · basic (hash + verifier) · delegated
  • authorization: contract · none · roles · delegated
  • tests

P6 Framework adapters

  • adapters/elysia · hono · bun + adapter tests

P7 Bundled UI

  • React SPA: layout, flag list, flag editor (variants/rules/overrides), publish, snapshots, rollback
  • api-client, config bootstrap, basePath-aware assets
  • build → dist/ui; Playwright browser tests

P8 Standalone + Docker

  • apps/standalone (env parsing, /healthcheck), Dockerfile, smoke test

P9 CLI

  • init / validate / publish / rollback / inspect

P10 Docs, examples, CI/CD

  • README + docs/* + ADRs
  • examples: elysia, hono, openfeature-redis, standalone-docker
  • .github/workflows: ci.yml, release.yml, docker.yml
  • publint + pack dry-run

Acceptance criteria (spec §22) — MVP status

  • 1. Package installs as @xtandard/flags
  • 2. Subpath exports work (publint clean, 27 entries)
  • 3. Elysia app can mount /flags
  • 4. Hono app can mount /flags
  • 5. Bundled UI loads without the consuming app installing React
  • 6. Redis storage works (live integration tests + e2e)
  • 7. unstorage adapter works
  • 8. Memory and file storage work
  • 9. Create a string flag with variants (UI + API + tests)
  • 10. Publish a snapshot
  • 11. OpenFeature provider evaluates that snapshot
  • 12. Deterministic split works (distribution tests)
  • 13. User override works
  • 14. Basic auth works
  • 15. Delegated auth works
  • 16. Roles authorization works
  • 17. Delegated authorization works
  • 18. Runtime keeps evaluating from memory when admin is down (e2e)
  • 19. Runtime keeps last-known-good when Redis goes down after load (e2e)
  • 20. CI defined (.github/workflows/ci.yml) — local gate green
  • 21. Docker image boots & serves /healthcheck (standalone smoke-tested; docker.yml smoke job)
  • 22. README explains the product clearly

Later / v1 non-goals: postgres adapter, /react component export, experiment analytics, Playwright UI suite in CI, hosted SaaS.

Post-MVP additions (done)

  • Express adapter (@xtandard/flags/express) + example
  • Postgres storage (@xtandard/flags/storage/postgres, pg + PGlite) + standalone/CLI driver + CI live
  • MongoDB storage (@xtandard/flags/storage/mongodb) + standalone/CLI driver + CI live
  • unstorage driver ecosystem documented (Upstash, Vercel KV, Cloudflare KV, S3, GitHub, Netlify Blobs)
  • storage-drivers example; examples runnable via file:../.. against local checkout
  • CI: mongo + postgres service containers

/loop round 2 (done)

  • UI redesign to v0 reference (top-nav, full-page detail, shadcn neutral+blue, light/dark/system)
  • @xtandard/flags/react component export (+ examples/react-embed, verified embedded)
  • bun:sqlite storage adapter (+ standalone/CLI driver, bun test, CI)
  • e2e expanded to 5 (create, publish, rollback, theme persistence, shell)
  • CI green incl. live Redis/Mongo/Postgres + bun:sqlite + build:react + 5 browser e2e