Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
132 commits
Select commit Hold shift + click to select a range
60e13db
feat(links): add deep link redirects
izadoesdev Jul 31, 2026
00c89f8
test(links): cover deep link delivery
izadoesdev Jul 31, 2026
682110b
chore(deps): sync link validation dependency
izadoesdev Jul 31, 2026
fedd3e6
fix(db): restore elastic postgres pool
izadoesdev Aug 1, 2026
f5d43b6
fix(db): raise postgres pool ceiling
izadoesdev Aug 1, 2026
e8777fc
docs(agents): document postgres pooling
izadoesdev Aug 1, 2026
afd4504
fix(dashboard): preserve onboarding ad attribution
izadoesdev Aug 1, 2026
a52fc9f
fix(basket): harden ingestion error handling
izadoesdev Aug 1, 2026
9536848
feat(insights): recommend measurement drafts
izadoesdev Aug 1, 2026
e96a4c0
chore(lint): enforce dashboard and error policies
izadoesdev Aug 1, 2026
a9cb88d
ci(links): add readiness health coverage
izadoesdev Aug 1, 2026
6ccf38e
feat(video): add intelligence launch composition
izadoesdev Aug 1, 2026
63a7f01
docs(agents): capture insights and lint guardrails
izadoesdev Aug 1, 2026
3960cf0
fix(insights): diversify coverage planning
izadoesdev Aug 1, 2026
b63efa6
style(insights): format analysis settings state
izadoesdev Aug 1, 2026
03c4764
refactor(insights): reuse run identity condition
izadoesdev Aug 1, 2026
e1608e4
refactor(insights): simplify frozen candidate plans
izadoesdev Aug 1, 2026
a01b49e
refactor(insights): require valid run observations
izadoesdev Aug 1, 2026
9f37f67
style(insights): format candidate plan import
izadoesdev Aug 1, 2026
9ec5bf3
fix(basket): use current producer send api
izadoesdev Aug 1, 2026
12af33a
fix(insights): retry malformed structured output
izadoesdev Aug 1, 2026
addd88c
fix(insights): respect cooldowns on manual scans
izadoesdev Aug 1, 2026
91e2fb5
fix(insights): restore detector probe backpressure
izadoesdev Aug 1, 2026
899bbd8
fix(basket): return retryable pixel on delivery failure
izadoesdev Aug 1, 2026
0899710
test(ai): keep redis mock exports in sync
izadoesdev Aug 1, 2026
6f2e56f
test(dashboard): use playwright goal draft locators
izadoesdev Aug 1, 2026
988384b
chore(deps): sync links and video dependencies
izadoesdev Aug 1, 2026
162c4e2
fix(basket): make ingest handoff durable
izadoesdev Aug 1, 2026
ab53b72
fix(links): queue link visit delivery
izadoesdev Aug 1, 2026
fbeb9db
fix(insights): harden measurement recommendations
izadoesdev Aug 1, 2026
8f40875
fix(dashboard): preserve attribution through onboarding
izadoesdev Aug 1, 2026
aef81a1
fix(video): stabilize remotion render
izadoesdev Aug 1, 2026
e067c15
chore(repo): tighten policy lint and guidance
izadoesdev Aug 1, 2026
a31b542
fix(insights): paginate route health discovery
izadoesdev Aug 1, 2026
2b301f2
chore(repo): narrow policy lint hook
izadoesdev Aug 1, 2026
d6c9a58
fix(basket): harden analytics delivery
izadoesdev Aug 1, 2026
b3bd331
fix(links): harden redirect delivery
izadoesdev Aug 1, 2026
e0307f5
fix(insights): harden recommendation generation
izadoesdev Aug 1, 2026
641f6c0
fix(tracker): retry pixel delivery
izadoesdev Aug 1, 2026
25d0065
fix(insights): align customer impact contracts
izadoesdev Aug 1, 2026
fb8ebf2
fix(links): close delivery resources safely
izadoesdev Aug 1, 2026
819bcf7
fix(dashboard): polish insight rendering
izadoesdev Aug 1, 2026
15b4681
fix(ci): harden health and policy lint
izadoesdev Aug 1, 2026
4667725
fix(insights): clarify setup recommendation guardrails
izadoesdev Aug 1, 2026
47893e4
fix(basket): key direct fallback dedupe by delivery
izadoesdev Aug 1, 2026
64005eb
fix(basket): preserve ambiguous batch reservations
izadoesdev Aug 1, 2026
7286a3b
fix(basket): cover stable fallback delivery ids
izadoesdev Aug 1, 2026
6229b04
fix(insights): clarify anonymous impact wording
izadoesdev Aug 1, 2026
069920e
fix(insights): guard error cohort copy
izadoesdev Aug 1, 2026
52a0fae
fix(links): harden shutdown edge cases
izadoesdev Aug 1, 2026
49df3fd
test(ai): cover required impact query filters
izadoesdev Aug 1, 2026
c9298e6
fix(insights): allow verified setup recommendations
izadoesdev Aug 1, 2026
7419011
fix(insights): clarify setup recommendations
izadoesdev Aug 1, 2026
39b8f66
style(basket): format delivery helpers
izadoesdev Aug 1, 2026
0647abe
test(ai): cover impact query execution filters
izadoesdev Aug 1, 2026
a55392a
fix(basket): preserve span delivery ids
izadoesdev Aug 1, 2026
278c410
feat(insights): separate recommendation projection
izadoesdev Aug 1, 2026
a53e300
fix(basket): keep ambiguous retries kafka-only
izadoesdev Aug 1, 2026
9614d65
fix(links): bound redirect queue admission
izadoesdev Aug 1, 2026
716f300
fix(tracker): attach ids to custom events
izadoesdev Aug 1, 2026
801a681
feat(insights): split recommendations into their own view
izadoesdev Aug 1, 2026
3947692
fix(links): bound queue admission stalls
izadoesdev Aug 1, 2026
7aa9eaf
fix(dashboard): restore recommendation actions
izadoesdev Aug 1, 2026
ec76a3b
fix(basket): keep uncertain dedupe delivery retryable
izadoesdev Aug 1, 2026
bbfd962
fix(insights): reuse legacy slack delivery threads
izadoesdev Aug 1, 2026
a74fb74
fix(insights): keep recommendations out of case queue
izadoesdev Aug 1, 2026
fbde479
fix(links): bound queue health checks
izadoesdev Aug 1, 2026
d75848a
fix(tracker): bound fetch delivery attempts
izadoesdev Aug 1, 2026
28b2eb4
fix(sdk): preserve retry delivery identities
izadoesdev Aug 1, 2026
4558984
fix(dashboard): harden recommendation actions
izadoesdev Aug 1, 2026
e94b932
fix(infra): enable vector acknowledgements
izadoesdev Aug 1, 2026
da30cc7
ci(infra): validate vector ingest config
izadoesdev Aug 1, 2026
e1409f1
fix(basket): persist span delivery identities
izadoesdev Aug 1, 2026
b9a096e
fix(basket): bound producer health probes
izadoesdev Aug 1, 2026
a881156
fix(redis): bound link cache commands
izadoesdev Aug 1, 2026
a68d8d8
fix(sdk): bound node client batch delivery
izadoesdev Aug 1, 2026
0f4521f
fix(tracker): bound browser delivery queues
izadoesdev Aug 1, 2026
cc6f08f
fix(insights): tolerate malformed run observations
izadoesdev Aug 1, 2026
bd23afa
fix(dashboard): clear stale signup attribution
izadoesdev Aug 1, 2026
5a6f64d
feat(insights): show recommendation counts
izadoesdev Aug 1, 2026
0a37ab1
fix(dashboard): polish recommendation actions
izadoesdev Aug 1, 2026
e0abe55
ci(infra): verify vector and links delivery
izadoesdev Aug 1, 2026
2bb7110
fix(ci): tolerate missing policy rollout base
izadoesdev Aug 1, 2026
bde20bb
fix(tracker): reclaim unload deliveries
izadoesdev Aug 1, 2026
5978fd0
fix(sdk): keep response reads within deadlines
izadoesdev Aug 1, 2026
c7286b9
docs(tracker): sync public bundle size copy
izadoesdev Aug 1, 2026
1522e9b
fix(tracker): skip unserializable unload events
izadoesdev Aug 1, 2026
1e05964
fix(sdk): avoid immediate retry for joined flush failures
izadoesdev Aug 1, 2026
4821eff
test(sdk): cover queued flush settlement race
izadoesdev Aug 1, 2026
6e00c29
fix(basket): bound kafka producer operations
izadoesdev Aug 1, 2026
9c93c38
fix(sdk): account for in-flight queued events
izadoesdev Aug 1, 2026
4fe65b6
test(basket): cover kafka operation deadlines
izadoesdev Aug 1, 2026
d06fc52
fix(ci): satisfy lint on delivery hardening
izadoesdev Aug 1, 2026
5ba110e
test(ai): keep redis mock export surface complete
izadoesdev Aug 1, 2026
d652f74
fix(db): make analytics delivery reads idempotent
izadoesdev Aug 1, 2026
f3f0f8b
fix(db): target final reads to delivery tables
izadoesdev Aug 1, 2026
35f7179
fix(db): avoid rewriting logical read sql
izadoesdev Aug 1, 2026
63eaf24
fix(api): bound api key admission
izadoesdev Aug 1, 2026
91d6435
fix(uptime): pin checks to validated addresses
izadoesdev Aug 1, 2026
4e1e1ce
fix(tracker): send unload beacons without preflight
izadoesdev Aug 1, 2026
23b01b9
test(sdk): cover queue admission edge cases
izadoesdev Aug 1, 2026
db9a5c1
docs(agents): note basket test runner
izadoesdev Aug 1, 2026
b0445f7
fix(api): record api key admission outcomes
izadoesdev Aug 1, 2026
49f3089
fix(ingest): keep kafka timestamps separate
izadoesdev Aug 1, 2026
96a44a8
fix(ci): provision vector canary topics
izadoesdev Aug 1, 2026
d4990d5
fix(db): dedupe deliveries across event partitions
izadoesdev Aug 1, 2026
398a51f
fix(links): bound writes and cache failures
izadoesdev Aug 1, 2026
c60bdf8
fix(db): preserve delivery read locality
izadoesdev Aug 1, 2026
674df03
fix(api): harden api key admission
izadoesdev Aug 1, 2026
488168d
fix(rpc): avoid eager workspace billing
izadoesdev Aug 1, 2026
4e56671
fix(rpc): bound organization lookups
izadoesdev Aug 1, 2026
7d4875d
docs(agents): verify requested integration branch
izadoesdev Aug 1, 2026
d93f613
test(api): verify admission failure redaction
izadoesdev Aug 1, 2026
50f0971
fix(api): keep default key quota conservative
izadoesdev Aug 1, 2026
0fa3688
fix(db): dedupe deliveries by stable identity
izadoesdev Aug 1, 2026
978ec15
fix(api): bound auth lookup acquisition
izadoesdev Aug 1, 2026
e01847c
fix(api): stabilize integration test runtime
izadoesdev Aug 1, 2026
f58de65
fix(shared): tag service deployment context
izadoesdev Aug 1, 2026
45eab72
fix(tracker): bound pixel delivery retries
izadoesdev Aug 2, 2026
3011e2e
fix(uptime): durably relay completed checks
izadoesdev Aug 2, 2026
89da0d9
test(ai): isolate Redis module mocks
izadoesdev Aug 2, 2026
3e63fca
fix(basket): preserve retries after interrupted admission
izadoesdev Aug 2, 2026
1284b5a
fix(basket): reserve events at delivery handoff
izadoesdev Aug 2, 2026
745c7ee
fix(shared): tag unkey deployment context
izadoesdev Aug 1, 2026
c057899
fix(shared): preserve deployment context precedence
izadoesdev Aug 2, 2026
8b7d62c
fix(links): preserve delivery test exports
izadoesdev Aug 2, 2026
02cdc37
docs(repo): define branch lifecycle
izadoesdev Aug 2, 2026
d80410d
fix(basket): correct geo resolution telemetry + drop redis geoip cach…
izadoesdev Aug 4, 2026
6f1ed10
fix(basket): stop logging expected conditions as errors in Axiom (#590)
izadoesdev Aug 4, 2026
ade008d
style(basket): wrap defineErrorCatalog call to satisfy formatter (#591)
izadoesdev Aug 4, 2026
cf830f7
chore(repo): run ultracite check in pre-commit to catch format issues…
izadoesdev Aug 4, 2026
035bf36
chore(repo): merge main into staging
izadoesdev Aug 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 9 additions & 0 deletions .agents/skills/databuddy-internal/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ Keep additions **minimal**: one bullet, a new `rg` hint, or a routing note—eno
- `SPEC.md` is the intelligence product contract. `insight_observations` is the readable Insights history; `analytics_insights` is the durable investigation projection. The agent outcome owns brief publication and `act`/`ask` promotion; do not replace either with frontend heuristics or collapse the feed into cases. Do not add a parallel agent, evidence API, fixed query choreography, or action-specific lifecycle.
- Insights RPC helpers that take `{ context, ...input }` must strip `context` before parsing a `.strict()` Zod input schema (same pattern as `appendInvestigationReply` / `applyInsightGoalAction`); otherwise CI fails with `Unrecognized key: "context"`.
- `insights.history` / MCP `list_investigations` hide cases while a reply is `queued`/`running` (action-inbox verification); tests must list before reply or expect an empty list while verifying.
- When reporting what an organization can see in Insights, follow the `insights.brief`/`history` visibility rules instead of counting `analytics_insights`; the projection can contain legacy rows without a readable or published `insight_observations` turn.
- Production insight shadows must freeze `--reference-time`, retain a tool-name trace, and pass available GitHub context before supporting quality claims. Postgres and ClickHouse are read-only, but connector token refreshes or cache writes can still occur; never describe the whole run as zero-write.
- Automatic investigations have one organization-wide schedule (`off`, `daily`, or `weekly`) and one organization-wide delivery set; website selection is only for manual runs. Do not reintroduce per-website overrides, hourly/custom cadence, or cron input.
- A manual insight run is a deliberate recheck: it bypasses automatic cooldown only for currently detected signals, while retaining detector thresholds and normal signal ranking. Otherwise “Run now” can complete without producing an evaluable result.
Expand All @@ -57,6 +58,7 @@ Keep additions **minimal**: one bullet, a new `rg` hint, or a routing note—eno
- Slack-reachable shared packages (`@databuddy/ai`, `@databuddy/rpc`) must not import `evlog/elysia`; use host-injected request logger providers from the API and plain evlog fallbacks elsewhere.
- AI link tools must assign link folders by existing folder `id` or `slug` only; folder names are display text and must not be used for routing or dedupe.
- `apps/basket`: ingest and LLM tracking service, Elysia app on port `4000`
- Basket tests use Vitest; run them through `bun run test` inside `apps/basket`, not `bun test` directly.
- `apps/docs`: Next.js + Fumadocs docs app on port `3005`
- When a user drops a prototype, remove only prototype-specific wiring and preserve the existing product surfaces it temporarily reused.
- `apps/links`: redirect/link service
Expand Down Expand Up @@ -95,10 +97,12 @@ Read [codebase-map.md](./references/codebase-map.md) when you need deeper routin
- Run filtered Turbo commands such as `bun run check-types --filter=…` from the workspace root; inside a package, its local script invokes `tsc` directly and treats those flags as TypeScript options.
- Formatting/linting: `bun run format`, `bun run lint`
- Use neutral branch names, commit messages, and PR copy; do not include tool-attribution prefixes or generated-by language.
- When the user names an integration branch such as `staging`, verify `HEAD`, the intended commit set, and upstream divergence on that branch before declaring the work complete.
- Lefthook's `no-secrets` guard intentionally ignores the exact `.env.example` template; real `.env`, `.env.*`, key, and credential files should still be blocked.
- Root dev orchestration: `bun run dev`
- Dashboard + API together: `bun run dev:dashboard`
- Tests at root currently target `./apps`: `bun run test`
- Package test mocks can leak across files in one Bun process; when `packages/ai` broadly mocks `@databuddy/redis`, keep the mock export surface in sync with runtime imports from shared RPC/tool code.
- Database scripts are routed from root into `packages/db`
- Runtime environment reads stay in the owning service; shared URL/public helpers live in `packages/env`
- BullMQ queues use `BULLMQ_REDIS_URL`; generic Redis cache/pubsub code uses `REDIS_URL`.
Expand Down Expand Up @@ -155,6 +159,8 @@ Read [codebase-map.md](./references/codebase-map.md) when you need deeper routin

- Start in `apps/basket/src`
- Request validation, billing checks, geo/IP parsing, producer logic, and structured errors are important here
- For analytics delivery, success means a durable, replayable handoff with a stable event identity. Do not treat an in-memory buffer, a pre-persistence Redis dedupe key, or a logged producer error as lossless delivery.
- When a durability task excludes PostgreSQL and migrations, use acknowledged Redpanda handoff plus a durable Redis/BullMQ checkpoint where needed; never introduce SQL outbox tables.

## Billing (Autumn)

Expand All @@ -177,8 +183,11 @@ Read [codebase-map.md](./references/codebase-map.md) when you need deeper routin
- Postgres schema: `packages/db/src/drizzle/schema.ts`
- Relations: `packages/db/src/drizzle/relations.ts`
- Drizzle client: `packages/db/src/client.ts`
- Production `DATABASE_URL` may already target PgBouncer; inspect both the process pool and PgBouncer queues before attributing API timeouts to PostgreSQL.
- `pg.Pool` already grows lazily from zero to its configured `max`; do not replace it with one `Client` to address acquisition timeouts, because that serializes queries. Keep a bounded pool, tune its acquisition timeout, and monitor `waitingCount`.
- ClickHouse helpers and schema: `packages/db/src/clickhouse/*`
- After schema changes, use the repo db scripts rather than ad hoc commands
- Do not add ClickHouse migration files for delivery hardening; keep relay identity in the worker/queue unless **iza** explicitly requests persistent warehouse identity.

### Auth and permissions

Expand Down
2 changes: 2 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@ REDIS_PASSWORD=""
DASHBOARD_URL=""
API_URL=""
BASKET_URL=""
LINKS_URL=""

# Baked into the dashboard browser bundle. Set these before production builds.
NEXT_PUBLIC_APP_URL=""
NEXT_PUBLIC_API_URL=""
NEXT_PUBLIC_BASKET_URL=""
NEXT_PUBLIC_LINKS_URL=""
NEXT_PUBLIC_STATUS_URL=""

AI_GATEWAY_API_KEY=""
Expand Down
12 changes: 11 additions & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,19 @@
### Description
Please include a summary of the change and which issue is fixed. Also include relevant motivation and context.

### Slice

- Issue: #
- Scope / owning surface:
- Dependencies or overlapping PRs: None

<details>
<summary>Checklist</summary>

- [ ] This branch started from current `staging` and does not include another unmerged PR unless it is named above.
- [ ] This is one independently reviewable slice; unrelated cleanup or refactors are in separate PRs.
- [ ] I checked open PRs for overlapping files, contracts, schemas, or deployment configuration and made any dependency explicit above.
- [ ] This PR targets `staging`; after it closes, this branch will not be reused for another change.
- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my code
- [ ] I have commented my code, particularly in hard-to-understand areas
Expand All @@ -12,4 +22,4 @@ Please include a summary of the change and which issue is fixed. Also include re
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] New and existing unit tests pass locally with my changes

</details>
</details>
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ jobs:
timeout-minutes: 10
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
with:
fetch-depth: 0
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: "1.3.14"
Expand Down
Loading