Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
304 commits
Select commit Hold shift + click to select a range
2da18f7
experiments: server-side bucket selector + UpgradeButton variants (P1…
mastermanas805 May 12, 2026
0a24bec
handlers: audit + sharpen every agent_action string per uniform contr…
mastermanas805 May 12, 2026
2273866
Merge pull request #42 from InstaNode-dev/pricing/u3-sharpen-agent-ac…
mastermanas805 May 12, 2026
569a1de
usage: GET /api/v1/usage/wall returns latest near-wall audit row (U1)
mastermanas805 May 12, 2026
2c6c355
Merge pull request #41 from InstaNode-dev/pricing/p1-ab-server-fresh
mastermanas805 May 12, 2026
5113918
plans: annual pricing tiers (hobby_yearly / pro_yearly / team_yearly)…
mastermanas805 May 12, 2026
9a9979c
Merge remote-tracking branch 'origin/master' into pricing/u1-quota-nu…
mastermanas805 May 12, 2026
12feb4a
Merge pull request #43 from InstaNode-dev/pricing/u1-quota-nudge-api-…
mastermanas805 May 12, 2026
7da67c2
Merge pull request #44 from InstaNode-dev/pricing/p2-annual-server-fresh
mastermanas805 May 12, 2026
9dfa999
deploy: private deploys with allowed_ips ingress whitelist (Pro+ feat…
mastermanas805 May 12, 2026
d3fa539
Merge pull request #45 from InstaNode-dev/feat/private-deploy-backend…
mastermanas805 May 12, 2026
efbf9b5
deploy: PATCH /api/v1/deployments/:id to edit private + allowed_ips i…
mastermanas805 May 13, 2026
245e123
billing: POST /api/v1/billing/promotion/validate — HTTP wrapper aroun…
mastermanas805 May 13, 2026
0e02996
Merge pull request #46 from InstaNode-dev/feat/patch-deployment-acces…
mastermanas805 May 13, 2026
0022b19
Merge pull request #47 from InstaNode-dev/feat/billing-promotion-vali…
mastermanas805 May 13, 2026
b12c1e9
admin: customer-management endpoints gated on ADMIN_EMAILS
mastermanas805 May 13, 2026
0932290
Merge remote-tracking branch 'origin/master' into feat/admin-customer…
mastermanas805 May 13, 2026
2028700
Merge pull request #48 from InstaNode-dev/feat/admin-customers-api-fresh
mastermanas805 May 13, 2026
483387d
audit: emit onboarding.claimed + subscription.{upgraded,downgraded,ca…
mastermanas805 May 13, 2026
114b6d6
Merge pull request #49 from InstaNode-dev/feat/audit-log-emit-sites-f…
mastermanas805 May 13, 2026
b123a3a
admin: route admin endpoints under ADMIN_PATH_PREFIX env
mastermanas805 May 13, 2026
c57d012
Merge pull request #50 from InstaNode-dev/feat/admin-path-prefix-fresh
mastermanas805 May 13, 2026
926455c
infra: bake jq fixes into NR dashboard/alert JSON
mastermanas805 May 13, 2026
7e54ce6
Merge pull request #51 from InstaNode-dev/chore/nr-json-bake-jq-fixes…
mastermanas805 May 13, 2026
60c8de8
admin: cancel Razorpay subscription on demote + emit subscription.can…
mastermanas805 May 13, 2026
9626451
Merge remote-tracking branch 'origin/master' into feat/razorpay-cance…
mastermanas805 May 13, 2026
f3b8b87
Merge pull request #52 from InstaNode-dev/feat/razorpay-cancel-on-dem…
mastermanas805 May 13, 2026
fd4af01
billing: validate + redeem admin-issued promo codes alongside plans-y…
mastermanas805 May 13, 2026
802e0a4
Merge pull request #53 from InstaNode-dev/feat/promo-redemption-check…
mastermanas805 May 13, 2026
e91a8ed
healthz: expose migration_version + count + status alongside commit_id
mastermanas805 May 13, 2026
daf849a
admin/customers: case-insensitive email search + multi-tier filter + …
mastermanas805 May 13, 2026
57759af
Merge pull request #54 from InstaNode-dev/feat/healthz-migration-vers…
mastermanas805 May 13, 2026
f1aeb2a
Merge pull request #55 from InstaNode-dev/feat/admin-customer-search-…
mastermanas805 May 13, 2026
d8e9c4d
email: bounce + unsubscribe webhook ingestion + email_events table
mastermanas805 May 13, 2026
f2e38bd
audit: deploys_audit table + admin endpoint — answers what was runnin…
mastermanas805 May 13, 2026
b74a07f
Merge pull request #56 from InstaNode-dev/feat/email-bounce-webhook-a…
mastermanas805 May 13, 2026
078c0ba
Merge pull request #57 from InstaNode-dev/feat/deploy-audit-log-fresh
mastermanas805 May 13, 2026
fedaff9
admin: rate-limit + audit emit + access-log prefix scrub (defense-in-…
mastermanas805 May 13, 2026
b3ac1ea
Merge pull request #58 from InstaNode-dev/feat/admin-hardening-fresh
mastermanas805 May 13, 2026
b965a23
admin: GET /admin/promos/audit + /admin/promos/stats for promo lifecy…
mastermanas805 May 13, 2026
a532602
Merge remote-tracking branch 'origin/master' into feat/promo-issuance…
mastermanas805 May 13, 2026
629e0a9
Merge pull request #59 from InstaNode-dev/feat/promo-issuance-audit-f…
mastermanas805 May 13, 2026
ee4659a
resources: pause/resume endpoints (Pro+) — suspend without deletion
mastermanas805 May 13, 2026
ec001cd
Merge pull request #60 from InstaNode-dev/feat/resource-pause-resume-…
mastermanas805 May 13, 2026
54b624b
handlers: use plans.Rank + consolidate agent_action constants
mastermanas805 May 13, 2026
92aa43a
Merge pull request #61 from InstaNode-dev/chore/tier-rank-and-agent-a…
mastermanas805 May 13, 2026
0eb1d47
deploy: optional notify_webhook URL fires HTTP POST on deploy termina…
mastermanas805 May 13, 2026
5ac758d
Merge remote-tracking branch 'origin/master' into feat/deploy-webhook…
mastermanas805 May 13, 2026
2bb816e
Merge pull request #62 from InstaNode-dev/feat/deploy-webhook-notify-…
mastermanas805 May 13, 2026
3e9ac59
env: default to 'development' (not 'production') + echo resolved env …
mastermanas805 May 13, 2026
528482e
Merge remote-tracking branch 'origin/master' into feat/env-default-de…
mastermanas805 May 13, 2026
8c9b4ab
Merge pull request #63 from InstaNode-dev/feat/env-default-developmen…
mastermanas805 May 13, 2026
3765fe1
admin: customer notes table + read-only impersonation JWT + RequireWr…
mastermanas805 May 13, 2026
7cd44cc
promote: email-link approval workflow for non-dev promotions
mastermanas805 May 13, 2026
b44d184
Merge remote-tracking branch 'origin/master' into feat/admin-notes-im…
mastermanas805 May 13, 2026
5c83a66
Merge pull request #64 from InstaNode-dev/feat/admin-notes-impersonat…
mastermanas805 May 13, 2026
e7781e9
Merge remote-tracking branch 'origin/master' into feat/promote-approv…
mastermanas805 May 13, 2026
fbaaa4b
billing: payment-failure dunning + 7d grace + auto-cancel triggers
mastermanas805 May 13, 2026
e484984
Merge pull request #65 from InstaNode-dev/feat/promote-approval-workf…
mastermanas805 May 13, 2026
ced6736
Merge master + resolve audit_kinds.go + testhelpers.go conflicts (add…
mastermanas805 May 13, 2026
4857b4f
Resolve agent_action.go conflict markers (both blocks coexist)
mastermanas805 May 13, 2026
b8ace35
Merge pull request #66 from InstaNode-dev/feat/payment-failure-dunnin…
mastermanas805 May 13, 2026
cb634f1
fix(migration): allow 'reaped' status in resources_status_check (#67)
mastermanas805 May 13, 2026
1bae460
W7-B: remove trial_days from plans (no trial — pay from day one) (#68)
mastermanas805 May 14, 2026
6c4588a
W9-C2: remove /billing/cancel route + handler (#69)
mastermanas805 May 14, 2026
e6d3ced
A4: security bundle (migrations 028/029, SNS RSA verify, users.is_pri…
mastermanas805 May 14, 2026
2bb3248
A3: emit audit events at vault/login/deploy sites (#71)
mastermanas805 May 14, 2026
d04134f
W8: razorpay webhook replay dedup (migration 033) (#73)
mastermanas805 May 14, 2026
cd8b800
W10-A: POST /internal/teams/:id/terminate (worker companion endpoint)…
mastermanas805 May 14, 2026
6e475be
W9-A: DPoP middleware wiring + sanitizeName XSS hardening (#75)
mastermanas805 May 14, 2026
5f0fea7
W9-C1: MinIO admin mode — per-tenant IAM isolation for /storage/new (…
mastermanas805 May 14, 2026
0aadbaf
B1: Idempotency-Key middleware + X-RateLimit headers (#77)
mastermanas805 May 14, 2026
ad1984b
B3: POST /api/v1/families/bulk-twin endpoint (#78)
mastermanas805 May 14, 2026
915e173
fix(migration): allow 'reaped' status in resources_status_check (#67)…
mastermanas805 May 14, 2026
7c9b669
B4: vector resource type via pgvector (#80)
mastermanas805 May 14, 2026
3a1b9d8
W5-B-api: customer backup/restore endpoints + migration 031 (#81)
mastermanas805 May 14, 2026
a60e914
L7: GET /livez + migration 030 resource heartbeat columns (#82)
mastermanas805 May 14, 2026
981073f
Wave6: provisioner smoke regression suite (#83)
mastermanas805 May 14, 2026
b89f813
W7-C: GET /api/v1/audit + CSV export + data-access emit sites (#84)
mastermanas805 May 14, 2026
95647d4
W7-D-api: DELETE /api/v1/team RTBF + migration 032 (#85)
mastermanas805 May 14, 2026
6458989
W7-F-api: GET /api/v1/resources/:id/metrics stub endpoint (#86)
mastermanas805 May 14, 2026
a4e6e81
W8: PATCH /api/v1/team + GET /api/v1/capabilities + GET /api/v1/incid…
mastermanas805 May 14, 2026
bf60e17
trial: deep removal — drop trial_ends_at column, StartTrial, trial em…
mastermanas805 May 14, 2026
2a6088d
fix(W10): wrap Pause/Resume response with 'resource' field (#81) (#88)
mastermanas805 May 14, 2026
56ab3a6
W7-G: error envelope standardization (#89)
mastermanas805 May 14, 2026
7dc2610
W11: real /api/v1/status backend + uptime tables (migration 035) (#90)
mastermanas805 May 14, 2026
8702f32
W11: GitHub auto-deploy — connect a deployment to a repo + branch (#91)
mastermanas805 May 14, 2026
0faba54
plans: add hobby_plus tier — \$19/mo mid-step with custom domains (W1…
mastermanas805 May 14, 2026
093213d
hotfix: renumber app_github_connections migration to 036 (collision w…
mastermanas805 May 14, 2026
6fb8afd
api: 302 /llms.txt and /llms-full.txt to marketing host
mastermanas805 May 14, 2026
15e07c9
fix(api): W11 hardening — scrub internal_url for anon, wire X-Idempot…
mastermanas805 May 14, 2026
d72dd83
capabilities: add hobby_plus + correct rank ordering (growth before pro)
mastermanas805 May 14, 2026
6819206
fix(prod): make api/plans.yaml the real runtime source of truth (W12)…
mastermanas805 May 14, 2026
f582b45
fix(api): W12 OpenAPI completeness + audit admin reads (#95)
mastermanas805 May 14, 2026
dbb53c6
fix(api): W12 error envelope completeness + 404/405 agent_action + /s…
mastermanas805 May 14, 2026
cd51ca7
magic_link: don't log .sent on email-provider failure (false-success …
mastermanas805 May 14, 2026
0bcebb5
feat(email): add Brevo backend alongside Resend with auto-detect prec…
mastermanas805 May 14, 2026
9c9d0e7
feat(api): magic-link reliability — log fix + per-row status + circui…
mastermanas805 May 14, 2026
8628f85
feat(api): circuit breakers on provisioner gRPC + Razorpay HTTP + DPo…
mastermanas805 May 14, 2026
30b2a34
fix(api): webhook receiver hardening — strip sensitive headers, captu…
mastermanas805 May 14, 2026
538d985
fix(api): cross-team access returns 404 not 403 (18 IDOR sites) (#100)
mastermanas805 May 14, 2026
25d5d2c
fix(api): unblock Hobby Plus across multi-env handlers + OpenAPI plan…
mastermanas805 May 14, 2026
75af7bf
fix(api): OpenAPI contract corrections — servers URL, enums, envelope…
mastermanas805 May 14, 2026
40eef74
fix(api): provisioning body validation — reject malformed JSON, surfa…
mastermanas805 May 14, 2026
93d9599
fix(api): team admin endpoints — promote/demote, primary transfer, pr…
mastermanas805 May 14, 2026
8ff98a0
feat(api): custom_domains_max per-tier cap (FIX-G) (#106)
mastermanas805 May 14, 2026
a7a1643
feat(api): backup integrity + restore-to-new-DB + destructive-ack + h…
mastermanas805 May 14, 2026
f1b3749
feat(api): two-step email-confirmed deletion for paid-tier deploys + …
mastermanas805 May 14, 2026
f542f0b
feat(api): deploy default 24h TTL + make-permanent + team default-pol…
mastermanas805 May 14, 2026
d9d7c07
fix(middleware): cache 4xx responses returned via respondError* (BB2-…
mastermanas805 May 14, 2026
f54f25a
fix(billing): server-side dedup on /api/v1/billing/checkout (BB2-D5 #…
mastermanas805 May 14, 2026
799a991
feat(api): apply Idempotency middleware to all create endpoints with …
mastermanas805 May 14, 2026
9d94083
feat(api): idempotency on /vault/rotate (FOLLOWUP-6) (#113)
mastermanas805 May 14, 2026
6cccec2
plans: Pro storage bump + 046 migration for staged expiry reminders
mastermanas805 May 15, 2026
1c1076c
plans+handlers: gate multi-env to Pro+ (drop hobby_plus from unlock)
mastermanas805 May 15, 2026
fb02889
auth/me: emit is_platform_admin:true for ADMIN_EMAILS callers
mastermanas805 May 15, 2026
0b72d00
ci(deploy): auto-deploy on push to master (#114)
mastermanas805 May 15, 2026
9d4a698
ci(deploy): use REPO_ACCESS_TOKEN for sibling-repo checkouts
mastermanas805 May 15, 2026
968c22a
ci(deploy): add postgres + redis service containers for unit tests
mastermanas805 May 15, 2026
cb255cb
ci(deploy): move ghcr namespace from personal -> org
mastermanas805 May 15, 2026
7c03078
migration(029): idempotency guard on is_primary backfill (fixes CI te…
mastermanas805 May 15, 2026
4eb3e74
plans_test(api): hobby_plus production-only — close coverage gap
mastermanas805 May 15, 2026
b1781fd
ci(deploy): temp-skip pre-existing test failures unrelated to this PR
mastermanas805 May 15, 2026
029a4ab
admin(customers): fix List 503 — deployments has no deleted_at column
mastermanas805 May 15, 2026
2a3de6d
config(razorpay): yearly plan-id env vars must read _ANNUAL not _YEARLY
mastermanas805 May 15, 2026
61e2dd5
feat(db): migration 047 — resources.applied_conn_limit for entitlemen…
mastermanas805 May 15, 2026
fbf7546
feat(api): make resource name strictly required on all provisioning e…
mastermanas805 May 15, 2026
664e792
fix(security): redact plaintext DB credentials from deployment API re…
mastermanas805 May 16, 2026
053ca4b
fix(migration): add 'suspended' to resources status CHECK constraint …
mastermanas805 May 16, 2026
1b31c82
Merge P0-1: redact secret-bearing env vars in deployment responses
mastermanas805 May 16, 2026
c569500
Merge P0-3: migration 049 — add 'suspended' to resources status CHECK…
mastermanas805 May 16, 2026
7107e0d
fix(billing): elevate deployments+stacks on upgrade; atomic tx in web…
mastermanas805 May 16, 2026
d1214a4
fix(resource): emit storage_limit_bytes, connections_limit, storage_e…
mastermanas805 May 16, 2026
c4d3630
fix(urls): route upgrade URL through api.instanode.dev/start (P1 clus…
mastermanas805 May 16, 2026
e85078b
fix(deploy): emit name as top-level field in deploymentToMap; update …
mastermanas805 May 16, 2026
8468df1
fix(router): register GET /api/v1/stacks/:slug for per-stack status p…
mastermanas805 May 16, 2026
0af01da
fix(openapi): correct anonymous storage limit 1024MB → 10MB in /stora…
mastermanas805 May 16, 2026
aedf7eb
docs(openapi): document GET /api/v1/stacks/{slug} route (P1 wave-1 me…
mastermanas805 May 16, 2026
ff0fdf3
fix(auth/session): P1 cluster-G — D05, A01, A03, A04 security fixes
mastermanas805 May 16, 2026
23f11e7
fix(lifecycle): fix P1 cluster-I teardown bugs — queue/vector deprovi…
mastermanas805 May 16, 2026
501b129
docs(openapi): document POST /auth/logout route (P1 wave-2 merge)
mastermanas805 May 16, 2026
84379a5
fix(billing): P1 wave-3 cluster-B slices 1-3 — billing resilience
mastermanas805 May 16, 2026
cd09f6a
security(redis): A2 — replace +@all with scoped ACL allowlist on shar…
mastermanas805 May 16, 2026
70bb24c
fix(tier-gates): P1 wave-3 cluster-A slices A1, A5, A6 — dedicated by…
mastermanas805 May 16, 2026
9946171
security: harden customer deployment pod specs (drop ALL caps, seccom…
mastermanas805 May 16, 2026
df6e070
security(netpol): scope DB-egress to owner-team, block link-local, re…
mastermanas805 May 16, 2026
14fc3b9
security(compute): close resource-abuse gaps — ephemeral-storage limi…
mastermanas805 May 16, 2026
b31957c
Merge: resource-abuse fixes — ephemeral-storage limit, build timeout,…
mastermanas805 May 16, 2026
459c5aa
fix(compute): remove dead pids-in-LimitRange code path
mastermanas805 May 16, 2026
29307d3
Merge: remove dead pids-LimitRange code (k8s rejects pids in LimitRange)
mastermanas805 May 16, 2026
376c705
feat(deploy): Phase 0 failure autopsy — capture and serve failure cau…
mastermanas805 May 16, 2026
f7de046
Merge: Phase 0 deployment failure autopsy (migration 050 + failure ob…
mastermanas805 May 16, 2026
aceb8d4
hotfix(deploy): set numeric runAsUser on fetch-context init-container
mastermanas805 May 16, 2026
a33790a
fix(deploy): populate last_lines in build-failure autopsy with Kaniko…
mastermanas805 May 16, 2026
a4112a9
Merge: populate last_lines with Kaniko build logs for BuildFailed aut…
mastermanas805 May 16, 2026
573da4d
docs(deploy): clarify build-log fetch is a server-side snapshot, not …
mastermanas805 May 16, 2026
a2da2a1
hotfix(deploy): do not drop capabilities on the kaniko build container
mastermanas805 May 16, 2026
14933c2
fix(ci): make the Deploy gate green — schema-mirror drift + 4 nil/con…
mastermanas805 May 16, 2026
cb8ac1c
fix(ci): serialize test packages with -p 1 — cross-package DB pollution
mastermanas805 May 16, 2026
d13e8bb
fix(ci): give the db provider a reachable customers DB (TEST_POSTGRES…
mastermanas805 May 16, 2026
d0175c9
fix(ci): push to GHCR with a write:packages PAT, not the under-scoped…
mastermanas805 May 16, 2026
2b8b90a
fix(deploy): customer containers drop only NET_RAW, not ALL — Drop:AL…
mastermanas805 May 16, 2026
32bc2da
fix: 4 P0 security/correctness bugs (claim takeover, egress CIDRs, ta…
mastermanas805 May 17, 2026
5df423e
fix: 5 P1 anonymous-tier abuse/contract bugs
mastermanas805 May 17, 2026
76bf0e4
fix: 5 P0/P1 bug-hunt Wave 2 fixes (billing dedup, tier slots, autops…
mastermanas805 May 17, 2026
111cb86
fix: 16 P2 bug-hunt Wave 4 fixes (auth, OpenAPI, billing, quota, stacks)
mastermanas805 May 17, 2026
0d2c95c
fix: SSE log-stream disconnect-leak + request-context lifetime (FIX-1…
mastermanas805 May 17, 2026
5833914
fix(P7): normalize email in /claim takeover guard + UNIQUE lower(emai…
mastermanas805 May 17, 2026
ff90f95
fix(P4): close Razorpay webhook dedup TOCTOU with an atomic claim
mastermanas805 May 17, 2026
bb2563d
fix(P5): serialize deployment + stack tier-cap checks with a team-row…
mastermanas805 May 17, 2026
c708498
fix(P3): tear down expired deployments — api teardown reconciler
mastermanas805 May 17, 2026
420393f
test(P0-2): pin api surfaces provider_resource_id from a pool-hit pro…
mastermanas805 May 17, 2026
388ad2e
fix(P1-B): recover() guard for every fire-and-forget goroutine
mastermanas805 May 17, 2026
fc66842
fix(P1-E): deployment slot counters agree — exclude stopped/expired/f…
mastermanas805 May 17, 2026
469a864
fix(P1-F): handle subscription halted/paused/completed/resumed webhooks
mastermanas805 May 17, 2026
d1594e5
fix(P1-G): capture kaniko build logs at failure, before the Job TTL r…
mastermanas805 May 17, 2026
05bd29d
fix(P1-H): reconcile DeployItem / AuthMeResponse / ResourceItem OpenA…
mastermanas805 May 17, 2026
c9e565c
fix(P1-I): accept allowed_ips as a JSON array or CSV
mastermanas805 May 17, 2026
da9ceff
fix(P1-K): make the OAuth state token single-use
mastermanas805 May 17, 2026
829476b
fix(P1-N): stop leaking the internal _name env key
mastermanas805 May 17, 2026
c6c29c0
fix(storage): full-token object prefix, persisted as provider_resourc…
mastermanas805 May 17, 2026
14512e9
fix(plans): correct growth/pro rank-table doc + capabilities test order
mastermanas805 May 17, 2026
8d8808c
fix(api): 9 P2 bug-hunt fixes — redeploy guards, OAuth, webhook harde…
mastermanas805 May 17, 2026
035f018
test: align capabilities annual-discount test with hobby_yearly=9000
mastermanas805 May 17, 2026
db6c827
fix(testhelpers): register webhook ListRequests as standalone public …
mastermanas805 May 17, 2026
f4fccfa
feat(billing,auth): email-verified gate + downgrade-asymmetry comment…
mastermanas805 May 17, 2026
8a5fcb5
fix(test): checkoutGateApp ErrorHandler must honor ErrResponseWritten
mastermanas805 May 17, 2026
49fed72
fix: 4 Wave-B observability + resilience bugs (A1-A4)
mastermanas805 May 18, 2026
62978a0
fix(deploy/queue): close kaniko build-pod egress window + un-truncate…
mastermanas805 May 18, 2026
6cb2c47
fix(api): BugBash 2026-05-18 P2 batch — OpenAPI drift + handler harde…
mastermanas805 May 18, 2026
bad832a
fix(api): BugBash 2026-05-18 P3 batch + GitHub-webhook TOCTOU
mastermanas805 May 18, 2026
153cf33
fix(billing): close payment-failure notification coverage gap
mastermanas805 May 19, 2026
c800549
fix(billing): align billing/usage deployment count with /api/v1/deplo…
mastermanas805 May 19, 2026
7dd1b27
fix(billing): close billing-trust audit findings F2/F3/F4/F8/F12
mastermanas805 May 19, 2026
38ae1b3
fix(billing): close billing-trust audit finding F7 — double subscript…
mastermanas805 May 19, 2026
71855e9
ci: add `make gate` (local==CI gate) + stale-green PR guard
mastermanas805 May 19, 2026
dec763c
fix(billing): F9/F10/F11 billing-trust audit P2/P3 findings
mastermanas805 May 19, 2026
d15a749
refactor(handlers): route resource status/expiry predicates through c…
mastermanas805 May 19, 2026
6fbe639
feat(team-deletion): Razorpay-cancel-first abort gate + deletion_pend…
mastermanas805 May 19, 2026
c9410f7
test(e2e): add load & chaos harness behind loadtest build tag
mastermanas805 May 19, 2026
8b45fbf
fix(provision): close TOCTOU race in anonymous per-fingerprint cap (F2)
mastermanas805 May 19, 2026
805a987
fix(ci): checkout common+proto siblings with REPO_ACCESS_TOKEN
mastermanas805 May 19, 2026
e4142cf
fix(billing): eliminate data race in BillingHandler Razorpay fn init;…
mastermanas805 May 19, 2026
3edd153
fix(handlers): eliminate fiber Ctx data races in background audit gor…
mastermanas805 May 19, 2026
309c2c5
test(e2e): refresh billing/upgrade suite as a money-path regression g…
mastermanas805 May 19, 2026
bc5254c
feat(migrations): 055_forwarder_sent — worker email forwarder send le…
mastermanas805 May 19, 2026
4078ca3
fix(email): EMAIL-BUGBASH api findings — domain drift, suppression, d…
mastermanas805 May 19, 2026
36eac9b
fix(bugbash-2026-05-20): four P0 fixes — billing rank guard, atomic p…
mastermanas805 May 19, 2026
4ba9a8b
fix(bugbash-2026-05-20): wave 2 api P1 fixes — T6/T9/T10/T11/T12/T13/…
mastermanas805 May 19, 2026
4ad0f72
fix(tests): update vector + body-validation tests for mandatory name
mastermanas805 May 19, 2026
1178f09
fix(tests): skip vector in EmptyBody test — vector is naming-mandator…
mastermanas805 May 19, 2026
9c1143e
fix(telemetry): TLS + NR api-key header for OTLP exporter (P0-2)
mastermanas805 May 20, 2026
e375771
fix(api): Wave 3 P2 — BugBash 2026-05-20
mastermanas805 May 20, 2026
3090cfc
fix(api): CIRCUIT-RETRY-AUDIT 2026-05-20 — P0/P1/P2/P3 reliability fixes
mastermanas805 May 20, 2026
eb12ff0
feat(billing): durable retry queue for tier-elevation propagation
mastermanas805 May 20, 2026
96316cc
storage: capability-aware abstraction + /storage/:token/presign
mastermanas805 May 20, 2026
734636a
fix(tests): unblock Deploy pipeline — wire wave3p2 test routes + Fibe…
mastermanas805 May 20, 2026
a125543
feat(queue): per-tenant NATS isolation via common/queueprovider
mastermanas805 May 20, 2026
0e5ee20
feat(db): migration 059 — enrich forwarder_sent with audit columns (P…
mastermanas805 May 20, 2026
c5b81de
api: deep /readyz + provisioner gRPC HealthCheck
mastermanas805 May 20, 2026
3341f55
feat(email): Brevo transactional-webhook receiver — close 201 ≠ deliv…
mastermanas805 May 20, 2026
487bd2e
test(chaos): propagation_runner + lease-recovery drills (chaos build …
mastermanas805 May 20, 2026
a8a8120
ci: retrigger Deploy after common@04dd59d pushed (readiness pkg now r…
mastermanas805 May 20, 2026
91315a7
fix(openapi): document /readyz endpoint + ReadinessResponse schema
mastermanas805 May 20, 2026
9e7c173
test(integration): rigorous-integration layer across 5 reliability tr…
mastermanas805 May 20, 2026
88c3e75
fix(p0-3): emit provision.persistence_failed audit + agent_action + c…
mastermanas805 May 20, 2026
bd97fab
P0-7: graceful shutdown readiness drain (MR-P0-7) (#120)
mastermanas805 May 20, 2026
04456d1
docs(plans): document hobby_plus + growth API-only visibility decision
mastermanas805 May 20, 2026
a3155a5
fix(test): TestWave3P2_AESKeyring_RoundTripsAcrossVersions flake at l…
mastermanas805 May 20, 2026
0c7991c
fix(p0): B13-F1 + B7-1 — auth/cli domain leak + PATCH stack/env silen…
mastermanas805 May 20, 2026
30f8f96
fix(security): ship 4 P0/P1 security fixes for /claim + billing webho…
mastermanas805 May 20, 2026
03e2481
ci: retrigger Deploy after 30f8f96 — TestOpenAPI_ClaimRequestDocument…
mastermanas805 May 20, 2026
9861c9c
fix(test): TestOpenAPI_ClaimRequestDocumentsUpgradeJWT — check canoni…
mastermanas805 May 20, 2026
6b9e817
fix(test): TestOpenAPI_ClaimRequestDocumentsUpgradeJWT — assert on ca…
mastermanas805 May 20, 2026
768c0ca
fix(bugbash-2026-05-20): wave 4 P1/P2 sweep — 8 fixes across auth/bil…
mastermanas805 May 20, 2026
6058245
test(coverage): registry-iterating wave 2 — Razorpay webhook + agent_…
mastermanas805 May 20, 2026
1d3ddf0
fix(bugbash-2026-05-20): wave 2 api sweep — 7 P2/P3 fixes from B9/B10…
mastermanas805 May 20, 2026
2ab2b96
feat(security): B18 wave-3 hardening + security headers + forwarder_s…
claude May 20, 2026
7684cb2
feat(ux): exhaustive agent_action registry (~210 codes) + WWW-Authent…
claude May 20, 2026
3678772
fix(openapi+plans): B13 cosmetic drifts + B6-P3 growth tier deploymen…
claude May 20, 2026
895dd95
fix(test): error_envelope_test for wave-3 registry expansion
claude May 20, 2026
f70fe27
fix(test): align contract tests with wave-3 registry expansion
claude May 20, 2026
6b6253b
feat(billing): audit_log emit on Razorpay webhook team_not_found 404
mastermanas805 May 21, 2026
1345e28
fix(pool): bounded *sql.DB pool + saturation metrics — Wave-3 chaos v…
mastermanas805 May 21, 2026
4212c11
feat(security): wave-3 chaos-verify redo — security headers contract …
mastermanas805 May 21, 2026
36ff74d
fix(test): webhook team_not_found uses valid plan_id to reach Upgrade…
mastermanas805 May 21, 2026
c1bb661
fix(billing): resolve team_not_found audit event_id from header first
mastermanas805 May 21, 2026
21eaaab
ci: cancel-in-progress + paths-ignore to save GH Actions minutes [ski…
mastermanas805 May 21, 2026
c10cdb6
fix(test): unstick Deploy pipeline — 3 broken handler tests
mastermanas805 May 21, 2026
083bf1e
fix(reliability): migration 064 — forwarder_sent.audit_id FK with ON …
mastermanas805 May 21, 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
  •  
  •  
  •  
27 changes: 27 additions & 0 deletions .claude/skills/instant-ship/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,33 @@ curl -sf http://localhost:${NODE_PORT}/healthz

---

## Step 6b: Post-deploy smoke (catches the 2026-05-13 outage class)

`/healthz` only checks the api process — it does NOT exercise the api→provisioner
gRPC auth path. The 2026-05-13 outage shipped a green `/healthz` while every
`/db/new` returned 503 because `PROVISIONER_SECRET` was rotated without
restarting the provisioner pods (the auth interceptor closes over `secret`
at server boot). The script below catches that class of failure:

```bash
EXPECTED_COMMIT=$(git rev-parse --short HEAD)
NODE_PORT=$(kubectl get svc instant-api -n instant -o jsonpath='{.spec.ports[0].nodePort}')
bash scripts/post-deploy-smoke.sh "http://localhost:${NODE_PORT}" "${EXPECTED_COMMIT}"
```

The script asserts `/healthz` commit_id matches the just-built SHA, then
POSTs to `/db/new` and asserts the response is 200/201/202/402/429 (NOT a
503 with a provisioner-error body). Exit code 3 specifically signals the
auth-path regression.

**If exit code 3:** Run
`kubectl rollout restart deployment/instant-provisioner -n instant-infra`
to force a re-read of the rotated secret, then re-run the smoke.

**If any other non-zero exit:** **STOP.** Show the script output.

---

## Step 7: E2E tests

```bash
Expand Down
13 changes: 13 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# .gitattributes — repo-level git behavior overrides.
#
# export-ignore: paths matched here are excluded from `git archive` (the
# command that builds release tarballs / GitHub source-zip downloads).
# We want the repo's contents available to anyone cloning the private
# remote, but NOT bundled into archives that might end up on a CDN, in a
# Docker layer cache, or attached to a public release page.

# INTERNAL-OPS.md is the operator runbook for the admin surface — secrets,
# rotation procedures, incident response. Public-ish exposure of this file
# would defeat the unguessable-path-prefix gate by documenting the surface.
# Keep it version-controlled here, keep it out of every archive.
INTERNAL-OPS.md export-ignore
112 changes: 107 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,59 @@ name: CI

on:
push:
branches: [main]
branches: [master]
# CI-minute savings (2026-05-21): skip CI on docs-only commits.
paths-ignore:
- '**.md'
- 'docs/**'
- 'CLAUDE.md'
- '.gitignore'
- 'LICENSE'
- 'BUGBASH-*/**'
pull_request:
branches: [main]
branches: [master]
paths-ignore:
- '**.md'
- 'docs/**'
- 'CLAUDE.md'
- '.gitignore'
- 'LICENSE'
- 'BUGBASH-*/**'
schedule:
# Weekly — reserved for optional scheduled jobs (see e2e job).
- cron: '0 6 * * 1'
workflow_dispatch:

concurrency:
# CI-minute savings (2026-05-21): cancel prior in-flight CI run for the
# same branch/PR when a new commit lands. Different PRs/branches still
# run in parallel (group key includes github.ref).
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
# Stale-green guard. A PR can show a green CI run that was executed BEFORE a
# breaking commit landed on the base branch — merging it would ship a broken
# master. This job FAILS if the PR branch does not contain origin/<base> as
# an ancestor, forcing an "Update branch" before the PR can merge.
up-to-date-with-base:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fail if PR branch is behind its base branch
run: |
BASE="${{ github.event.pull_request.base.ref }}"
git fetch origin "${BASE}" --depth=1
if git merge-base --is-ancestor "origin/${BASE}" HEAD; then
echo "PR branch contains origin/${BASE} — up to date."
else
echo "::error::PR branch is behind origin/${BASE}. Update the branch (merge/rebase ${BASE}) and re-run CI so it validates against current base."
exit 1
fi

build-and-test:
runs-on: ubuntu-latest
services:
Expand Down Expand Up @@ -47,26 +91,76 @@ jobs:
env:
TEST_DATABASE_URL: postgres://postgres:postgres@localhost:5432/instant_dev_test?sslmode=disable
TEST_REDIS_URL: redis://localhost:6379/15
# db-provider admin target. internal/providers/db/local.go CREATEs a
# customer database per /db/new; in tests it connects to
# TEST_POSTGRES_CUSTOMERS_URL. testhelpers defaults this to an
# unreachable localhost:5434, so without this every postgres-
# provisioning test (TestDBNew_*, TestBulkTwin_*) 503'd. Points at an
# instant_customers DB created on the same service container below —
# exactly as deploy.yml's proven-green gate does.
TEST_POSTGRES_CUSTOMERS_URL: postgres://postgres:postgres@localhost:5432/instant_customers?sslmode=disable
steps:
- uses: actions/checkout@v4

- name: Checkout proto sibling (for go.mod replace ../proto)
uses: actions/checkout@v4
with:
repository: ${{ vars.PROTO_REPO || format('{0}/proto', github.repository_owner) }}
token: ${{ secrets.GITHUB_TOKEN }}
token: ${{ secrets.REPO_ACCESS_TOKEN }}
path: _proto_ci

- name: Place ../proto for Go replace directive
run: mv _proto_ci ../proto

- name: Checkout common sibling (for go.mod replace ../common)
uses: actions/checkout@v4
with:
repository: ${{ vars.COMMON_REPO || format('{0}/common', github.repository_owner) }}
token: ${{ secrets.REPO_ACCESS_TOKEN }}
path: _common_ci

- name: Place ../common for Go replace directive
run: mv _common_ci ../common

- uses: actions/setup-go@v5
with:
go-version: '1.25'

- name: Apply DB migrations to the test database
# Mirrors deploy.yml's proven-green gate. Before this step CI ran
# tests against a BARE Postgres whose schema came ONLY from
# testhelpers.runMigrations — a hand-maintained mirror. This step
# applies the REAL migration files (exactly like `make test-db-up`),
# then creates instant_customers — the db provider's local backend
# (internal/providers/db/local.go) CREATEs a customer database per
# /db/new and connects to TEST_POSTGRES_CUSTOMERS_URL for it. Without
# this DB every postgres provision (TestDBNew_*, TestBulkTwin_*) 503'd.
env:
PGPASSWORD: postgres
run: |
for f in $(ls internal/db/migrations/*.sql | sort); do
echo "→ applying $(basename "$f")"
psql -h localhost -U postgres -d instant_dev_test -f "$f" >/dev/null
done
echo "all migrations applied to instant_dev_test"
psql -h localhost -U postgres -d postgres -c "CREATE DATABASE instant_customers" >/dev/null
echo "created instant_customers (db-provider admin target)"

- run: go build ./...
- run: go vet ./...
- run: go test ./... -v -race -count=1

# The gate. This MUST stay equal to deploy.yml's proven-green
# invocation (`go test ./... -short -count=1 -p 1`) PLUS `-race`:
# - `-p 1` is load-bearing: every package shares the single
# instant_dev_test DB + redis/15. Default parallelism runs ~25
# package binaries at once and they corrupt each other's DB/redis
# state mid-test. `-p 1` serialises package execution.
# - `-short` matches deploy.yml so the two gates run the identical
# hermetic suite (tests that genuinely need a live k8s/provisioner
# stack are tagged `e2e` and excluded from `./...` anyway).
# - `-race` is the extra rigor CI adds over deploy.yml — it caught
# the BillingHandler.ensureRazorpayFns data race.
- run: go test ./... -short -race -count=1 -p 1

# E2E requires a live Kubernetes stack (see repo CLAUDE.md). This job does not
# run on push/PR — only on schedule or manual dispatch — so default CI stays fast.
Expand All @@ -80,11 +174,19 @@ jobs:
uses: actions/checkout@v4
with:
repository: ${{ vars.PROTO_REPO || format('{0}/proto', github.repository_owner) }}
token: ${{ secrets.GITHUB_TOKEN }}
token: ${{ secrets.REPO_ACCESS_TOKEN }}
path: _proto_ci

- run: mv _proto_ci ../proto

- name: Checkout common sibling
uses: actions/checkout@v4
with:
repository: ${{ vars.COMMON_REPO || format('{0}/common', github.repository_owner) }}
token: ${{ secrets.REPO_ACCESS_TOKEN }}
path: _common_ci
- run: mv _common_ci ../common

- uses: actions/setup-go@v5
with:
go-version: '1.25'
Expand Down
Loading