Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
419 commits
Select commit Hold shift + click to select a range
f1356fd
refactor(backend): remove unused buyer module
onerandomdevv Jun 26, 2026
75fe48a
refactor(backend): move merchant module into store domain
onerandomdevv Jun 26, 2026
355771d
fix(backend): align merchant API error copy with store language
onerandomdevv Jun 26, 2026
bc8c62d
refactor(backend): introduce store context aliases
onerandomdevv Jun 27, 2026
4b083ac
refactor(backend): audit merchant and store service overlap
onerandomdevv Jun 27, 2026
c6f61e3
refactor(backend): move admin and verification domains
onerandomdevv Jun 27, 2026
bbaa91c
refactor(backend): consolidate notification services
onerandomdevv Jun 27, 2026
f60b376
refactor(backend): move order module into orders domain
onerandomdevv Jun 27, 2026
645b455
refactor(backend): consolidate inventory domain
onerandomdevv Jun 27, 2026
8371951
refactor(backend): consolidate auth domain
onerandomdevv Jun 27, 2026
eb5f2ac
fix(backend): align store-facing copy language
onerandomdevv Jun 28, 2026
3787482
fix(products): harden product creation and visibility
onerandomdevv Jun 28, 2026
6cab470
@
onerandomdevv Jun 28, 2026
5a67a17
@
onerandomdevv Jun 28, 2026
26fcd1b
@
onerandomdevv Jun 28, 2026
5c94a54
@
onerandomdevv Jun 28, 2026
f303d70
feat(store): add store mode onboarding and settings
onerandomdevv Jun 29, 2026
7324997
fix(web): stabilize store address map loader
onerandomdevv Jun 29, 2026
37ebbb7
feat(landing): social-commerce landing rebuild + tailwind config fix
SAHEED2010 Jul 2, 2026
b49303e
feat(landing): social-commerce landing rebuild + tailwind config fix …
SAHEED2010 Jul 2, 2026
a4940ed
feat(store): build commerce workspace foundation
onerandomdevv Jul 3, 2026
6c95054
fix(web): restore public landing build
onerandomdevv Jul 3, 2026
378b009
feat(landing): wire CTAs to app/waitlist model and remove dead compon…
SAHEED2010 Jul 3, 2026
d85f1bf
feat(landing): wire CTAs to app/waitlist model + remove dead landing …
SAHEED2010 Jul 3, 2026
5d106c6
refactor(payments): introduce provider abstraction
onerandomdevv Jul 3, 2026
1082ad4
fix: make REDIS_URL optional in env.validation.ts
railway-app[bot] Jul 4, 2026
7930d98
docs: make deployment setup provider-neutral
onerandomdevv Jul 4, 2026
bd51395
feat(landing): use saffron/espresso for berry CTA buttons
onerandomdevv Jul 4, 2026
284b276
feat(web): keep app routes off the marketing host
onerandomdevv Jul 4, 2026
3641674
feat(landing): wire Start Shopping and Chat WIZZA CTAs
onerandomdevv Jul 4, 2026
4286ca4
refactor(providers): add payment and subscription billing provider se…
onerandomdevv Jul 4, 2026
af54712
docs(backend): clarify money provider env selection
onerandomdevv Jul 4, 2026
0183c64
docs(env): document prod setup pitfalls in .env.example
onerandomdevv Jul 4, 2026
39871a8
docs(env): note shared NEXT_PUBLIC_* vars both web deployments need
onerandomdevv Jul 4, 2026
4d65f57
docs(env): correct FRONTEND_URL note to match the loaded config
onerandomdevv Jul 4, 2026
9679572
feat(security): add request security context foundation
onerandomdevv Jul 4, 2026
92701c1
feat(auth): record login security context
onerandomdevv Jul 4, 2026
e2dfb28
fix(security): harden request security context metadata
onerandomdevv Jul 5, 2026
8d39b7d
fix(auth): strip referer tokens from login audit
onerandomdevv Jul 5, 2026
e81824c
docs(security): clarify proxy header env guidance
onerandomdevv Jul 5, 2026
446eacd
feat(storepass): add domain models and entitlements
onerandomdevv Jul 5, 2026
9957aad
feat(storepass): add Nomba subscription billing provider
SAHEED2010 Jul 5, 2026
304514c
feat(search): add taxonomy-aware product discovery helpers
onerandomdevv Jul 5, 2026
0afdf41
feat(whatsapp): add taxonomy-aware ranking boost to WIZZA discovery
onerandomdevv Jul 5, 2026
1f678d9
feat(whatsapp): enrich image discovery with taxonomy hints
onerandomdevv Jul 5, 2026
fb6f138
feat(search): record taxonomy zero-result signals
onerandomdevv Jul 5, 2026
2cd7c0d
feat(search): add category demand insights service
onerandomdevv Jul 5, 2026
4493c5e
refactor(search): move zero-result contract into search domain
onerandomdevv Jul 5, 2026
c1ffadd
feat(storepass): wire checkout and webhook state
SAHEED2010 Jul 5, 2026
c38a0f6
chore(admin): audit admin surface and route ownership
onerandomdevv Jul 5, 2026
1fada4a
feat(storepass): add Store Mode subscription API
SAHEED2010 Jul 5, 2026
5a7f7ed
feat(storepass): add Store Mode subscription API (#528)
SAHEED2010 Jul 6, 2026
0ae98da
feat(web): add StorePass Store Mode UI
SAHEED2010 Jul 6, 2026
b0e22e6
feat(web): add StorePass Store Mode UI (#529)
SAHEED2010 Jul 6, 2026
2ace6a1
refactor(admin): remove legacy staff roles and enforce super-admin only
onerandomdevv Jul 6, 2026
a33eb26
feat(web): add admin.twizrr.com route shell
onerandomdevv Jul 6, 2026
356c2fd
refactor(web): drive admin surface by NEXT_PUBLIC_ADMIN_ENABLED flag
onerandomdevv Jul 6, 2026
18fa861
chore(web): structure .env.example per Vercel project
onerandomdevv Jul 6, 2026
0f20880
feat(admin): add store verification review console
onerandomdevv Jul 6, 2026
652bce1
feat(admin): add platform overview dashboard
onerandomdevv Jul 6, 2026
ae35a4e
feat(storepass): add StorePass badges for active paid stores
SAHEED2010 Jul 6, 2026
d4f277b
feat(storepass): add StorePass badges for active paid stores (#535)
SAHEED2010 Jul 6, 2026
404d7b5
feat(admin): add global orders console
onerandomdevv Jul 6, 2026
1ff6577
chore(web): add vitest + testing-library test runner
onerandomdevv Jul 6, 2026
6ad268d
feat(admin): add payout review and release console
onerandomdevv Jul 6, 2026
484860d
feat(admin): harden delivery coordination console
onerandomdevv Jul 6, 2026
f0dac3b
feat(admin): improve dispute evidence and resolution console
onerandomdevv Jul 6, 2026
63432f6
feat(admin): improve moderation evidence console
onerandomdevv Jul 6, 2026
a723ade
feat(storepass): add renewal, reconciliation, and entitlement usage t…
SAHEED2010 Jul 6, 2026
d8cf776
feat(storepass): add renewal, reconciliation, and entitlement usage t…
SAHEED2010 Jul 6, 2026
5e69522
feat(admin): add audit log console
onerandomdevv Jul 6, 2026
fbf4ea9
feat(admin): add technical operations console
onerandomdevv Jul 6, 2026
7f4a198
feat(admin): add admin login and bootstrap access flow
onerandomdevv Jul 6, 2026
eeadbad
feat(admin): add production-safe admin bootstrap command
onerandomdevv Jul 6, 2026
dbf00c7
chore(storepass): harden demo readiness
SAHEED2010 Jul 6, 2026
f1aaf85
test(admin): add admin manual QA and e2e coverage
onerandomdevv Jul 6, 2026
f9ce149
fix(admin): dashboard "moderation pending" counted auto-flags, not re…
onerandomdevv Jul 6, 2026
44807c2
feat(commerce): store feed-publish flow, product detail/edit, and fee…
onerandomdevv Jul 7, 2026
e9c1b8e
fix(orders): support variant products in direct checkout
onerandomdevv Jul 7, 2026
c4dbce7
refactor(commerce): shared product-detail view + inventory panel/card…
onerandomdevv Jul 7, 2026
a555fc0
fix(storepass): correct Nomba sandbox base URL to a resolvable host
SAHEED2010 Jul 7, 2026
40eefe6
fix(storepass): correct Nomba sandbox base URL to a resolvable host (…
SAHEED2010 Jul 7, 2026
9dedac0
fix(feed): make For You / Stores / Explore return posts, not follow s…
onerandomdevv Jul 7, 2026
9b3b906
feat(store): text-only inventory cards and dedicated StorePass page
onerandomdevv Jul 7, 2026
3e34fd8
feat(store-setup): split digital and physical store creation into ded…
onerandomdevv Jul 7, 2026
9416996
refactor(storepass): focus StorePass on pricing and selection only
onerandomdevv Jul 7, 2026
968720c
chore(store): trim over-descriptive page headers and subtitles
onerandomdevv Jul 7, 2026
d118684
feat(admin): add Tier 2 bypass on the admin stores page
onerandomdevv Jul 7, 2026
e1233fa
feat: social-media UI refresh + shopper features
onerandomdevv Jul 10, 2026
8f844cd
fix(test): disambiguate settings-hub link matcher
onerandomdevv Jul 10, 2026
2be9de1
perf(feed): server-render the initial public feed (explore + category)
onerandomdevv Jul 10, 2026
40318ab
feat(web): store profile, payouts, account settings, and feed UI fixes
onerandomdevv Jul 10, 2026
5d3938a
feat(web): session-aware landing entry + fintech payouts UI
onerandomdevv Jul 10, 2026
1817c05
feat(users): account phone verification UI + AT SMS hardening
onerandomdevv Jul 11, 2026
b5cee52
feat(notification): add Africa's Talking SMS delivery-report webhook
onerandomdevv Jul 11, 2026
2ac66ef
fix(auth): bind account phone OTP to the authenticated session
onerandomdevv Jul 11, 2026
5ab705e
fix(payouts): surface the real error when saving a payout account
onerandomdevv Jul 11, 2026
e6e7c4c
feat(store-settings): verify personal account phone from the store hub
onerandomdevv Jul 11, 2026
b5cf777
fix(store): collapse verified business phone to a summary state
onerandomdevv Jul 11, 2026
2ef51b4
feat(users): make the account phone editable, not just verifiable
onerandomdevv Jul 11, 2026
ce68b3d
feat(phone): reuse + cross-verify a shared account/business phone
onerandomdevv Jul 11, 2026
ed8a6a0
feat(phone): one-tap "Use my business phone" for the account phone
onerandomdevv Jul 11, 2026
6e2c2a2
fix(users): re-run tier checks after reusing a verified business phone
onerandomdevv Jul 11, 2026
003aa16
feat(profile): quick-edit profile modal + fix nav routing to profile
onerandomdevv Jul 11, 2026
c5d51af
fix(settings): account phone is shopper-side; drop hardcoded example
onerandomdevv Jul 11, 2026
d9cc400
feat(feed): replace inline Edit pill with a post-actions menu on own …
onerandomdevv Jul 11, 2026
fcddf56
feat(feed): gate post author operations to own store + store mode
onerandomdevv Jul 11, 2026
78d9ece
perf(feed): denormalized engagement counters, feed index, multi-sourc…
onerandomdevv Jul 11, 2026
2920a38
perf(web): rendering containment for the feed list
onerandomdevv Jul 11, 2026
02f3486
docs: engagement counters, feed index, multi-source ranking, feed ren…
onerandomdevv Jul 11, 2026
02ef348
feat(realtime): socket.io push gateway + live notification events
onerandomdevv Jul 12, 2026
ae37f28
feat(web): live notification bridge over socket.io + docs
onerandomdevv Jul 12, 2026
4704fcc
fix(realtime): gate mount to authed shells + check socket account state
onerandomdevv Jul 12, 2026
039d7d4
feat(realtime): phase 1 realtime foundation hardening
onerandomdevv Jul 12, 2026
474c79a
feat(outbox): add transactional outbox infrastructure
onerandomdevv Jul 12, 2026
976f2e7
feat(outbox): dispatch payment notifications through outbox
onerandomdevv Jul 12, 2026
4f29ea3
fix(outbox): handle relay poll rejections
onerandomdevv Jul 12, 2026
fb15b4b
feat(realtime): add typed commerce event delivery
onerandomdevv Jul 12, 2026
6dc1e2e
feat(orders): dispatch lifecycle side effects through outbox
onerandomdevv Jul 12, 2026
9b4be9d
test(realtime): cover commerce synchronisation
onerandomdevv Jul 12, 2026
e6d0e71
feat(disputes): add dispute realtime contracts and outbox helpers
onerandomdevv Jul 12, 2026
8fa79a6
feat(disputes): publish lifecycle events and milestone notifications …
onerandomdevv Jul 12, 2026
f2dca6a
feat(web): sync dispute and order views in realtime
onerandomdevv Jul 12, 2026
b13adc6
test(disputes): cover lifecycle events, concurrency, retries and privacy
onerandomdevv Jul 12, 2026
790a832
fix(deploy): point backend start at the real nest build entry
onerandomdevv Jul 12, 2026
4432919
feat(notifications): partition notifications by shopper/store audience
onerandomdevv Jul 12, 2026
6153f81
feat(web): notifications pages with per-mode badge, infinite scroll, …
onerandomdevv Jul 12, 2026
fd362e0
test(notifications): cover audience partitioning and mode-scoped pages
onerandomdevv Jul 12, 2026
3690a8c
feat(social): notify on post likes, comments, replies, and mentions
onerandomdevv Jul 12, 2026
c70e529
feat(web): social-notification row layout on the notifications page
onerandomdevv Jul 12, 2026
9b9b5f1
feat(social): post-notification subscriptions with async new-post fan…
onerandomdevv Jul 13, 2026
ab0e49c
feat(web): post-notification bell + enable store follows on public pages
onerandomdevv Jul 13, 2026
3f0ff07
fix(orders): validate cuid ids as strings across the buying flow
onerandomdevv Jul 13, 2026
e8c1a76
fix(web): keep shopper identity + mode on product pages and cart/chec…
onerandomdevv Jul 13, 2026
01e6e34
fix(orders): default pagination params so list endpoints don't 400
onerandomdevv Jul 13, 2026
290d48f
feat(web): quantity selector on the product page, capped at stock
onerandomdevv Jul 13, 2026
0d30d65
chore: remove mojibake from backend and web
onerandomdevv Jul 13, 2026
ebe1444
fix(paystack): surface provider error message on failed requests
onerandomdevv Jul 13, 2026
f83981d
feat(products): add square social publishing flow
onerandomdevv Jul 13, 2026
a054716
fix(payout): use per-release idempotency keys so failed payouts can b…
onerandomdevv Jul 13, 2026
d5dfce4
fix(notifications): repair broken deep-link routes that 404
onerandomdevv Jul 14, 2026
1f6f32c
feat(web): post-detail page so notification post links resolve (#586)
onerandomdevv Jul 14, 2026
835b5a6
fix(notifications): show store squircle avatars on new-post notificat…
onerandomdevv Jul 14, 2026
bc1c94e
fix(web): page titles for public profile/store + payout currency form…
onerandomdevv Jul 14, 2026
62cc5b7
fix(web): readable store-order card text on the light store surface (…
onerandomdevv Jul 14, 2026
7814c90
fix(web): show a clean completed state for achieved verification tier…
onerandomdevv Jul 14, 2026
7f0af9a
chore(tooling): stop security-sentinel flagging test-fixture keys as …
onerandomdevv Jul 14, 2026
5da9014
fix(security): wire request context into admin and payout audits (#592)
onerandomdevv Jul 16, 2026
bd3623b
feat(security): add new-device and suspicious-login risk signals (#593)
onerandomdevv Jul 16, 2026
03b44b5
feat(admin): add security event review console (#594)
onerandomdevv Jul 16, 2026
77fb325
feat(security): add new-login notifications (#595)
onerandomdevv Jul 16, 2026
e9c012c
fix(admin): correct security event filtering and pagination (#596)
onerandomdevv Jul 16, 2026
64e28bb
feat(security): add coarse IP geolocation risk signal (#597)
onerandomdevv Jul 16, 2026
3cf7135
feat(security): add rate-limit and OTP-abuse risk signals (#598)
onerandomdevv Jul 16, 2026
ac3007b
chore(safety): audit device and location intelligence coverage (#599)
onerandomdevv Jul 16, 2026
52758e5
feat(security): add first-party device identity foundation (#600)
onerandomdevv Jul 16, 2026
d104f09
feat(safety): record account creation device and request context (#601)
onerandomdevv Jul 16, 2026
3ff6f7e
feat(safety): add account abuse linkage signals (#602)
onerandomdevv Jul 16, 2026
a2d686f
feat(admin): add trust and safety investigation view (#603)
onerandomdevv Jul 16, 2026
92e8ff9
feat(location): add user location preference foundation (#604)
onerandomdevv Jul 16, 2026
7558493
feat(web): add user location preference UI (#605)
onerandomdevv Jul 16, 2026
f291923
feat(wizza): use user location preference in discovery (#606)
onerandomdevv Jul 16, 2026
83d90dc
feat(feed): apply location preference to feed relevance (#607)
onerandomdevv Jul 16, 2026
f21ac49
fix(location): address discovery review follow-ups (#608)
onerandomdevv Jul 16, 2026
e6a82ff
feat(admin): add location-aware demand and supply insights (#609)
onerandomdevv Jul 17, 2026
d023d7e
fix(location): address feed and image caption follow-ups (#610)
onerandomdevv Jul 17, 2026
b42c089
feat(settlement): execute dispute financial outcomes (#611)
onerandomdevv Jul 17, 2026
6ae6288
feat(settlement): complete financial operations and visibility (#612)
onerandomdevv Jul 17, 2026
0b9c0ed
test(settlement): prove production readiness (#613)
onerandomdevv Jul 17, 2026
e550f08
feat(delivery): add shipping provider abstraction (#614)
onerandomdevv Jul 17, 2026
800b8c8
feat(verification): add identity verification provider abstraction (#…
onerandomdevv Jul 17, 2026
921994c
feat(email): add email provider abstraction (#616)
onerandomdevv Jul 17, 2026
b19a7ab
docs: document provider configuration and Monnify roadmap (#617)
onerandomdevv Jul 18, 2026
828e4b7
docs: clarify provider environment notes (#618)
onerandomdevv Jul 18, 2026
27ca083
feat(payment): add Monnify payment provider adapter (#619)
onerandomdevv Jul 18, 2026
0fe4ead
feat(payment): add immutable attempts and reconciliation safety (#620)
onerandomdevv Jul 18, 2026
d8a0512
feat(refund): add Monnify refund provider adapter (#621)
onerandomdevv Jul 18, 2026
fe2581f
test(refund): prove Monnify refund completion safety (#622)
onerandomdevv Jul 18, 2026
f055686
feat(payout): add Monnify payout provider adapter (#623)
onerandomdevv Jul 18, 2026
2a347b8
test(payout): prove Monnify transfer reconciliation safety (#624)
onerandomdevv Jul 18, 2026
d63c464
chore(verification): assess Monnify identity capabilities against Twi…
onerandomdevv Jul 19, 2026
d7d1bad
fix(money): deduct platform fee from merchant proceeds (#626)
onerandomdevv Jul 19, 2026
ded3805
feat(verification): add provider-owned verification attempts (#627)
onerandomdevv Jul 19, 2026
17bfb75
feat(verification): add provider attempt reconciliation (#628)
onerandomdevv Jul 19, 2026
0a37461
feat(wallet): enforce merchant earnings invariants (#629)
onerandomdevv Jul 19, 2026
f8ce2b6
fix(money): enforce provider continuity (#630)
onerandomdevv Jul 19, 2026
4b8a28d
feat(payment): record amount exceptions (#631)
onerandomdevv Jul 19, 2026
5e25f1d
feat(admin): add payment reconciliation exception queue (#632)
onerandomdevv Jul 19, 2026
32bb734
feat(payment): add provider-bound overpayment refund resolution (#633)
onerandomdevv Jul 19, 2026
be3dedd
feat(payment): add safe remaining-balance collection (#634)
onerandomdevv Jul 19, 2026
0a63294
feat(refund): add split-collection refund operations (#635)
onerandomdevv Jul 20, 2026
e6fce9d
test(payment): add payment exception sandbox runbook (#636)
onerandomdevv Jul 20, 2026
88741fd
fix(web): remove DVA option from provider checkout (#637)
onerandomdevv Jul 20, 2026
c161236
feat(web): social-first feed redesign — stories rail, carousels, micr…
onerandomdevv Jul 21, 2026
d712b3e
feat(web): social-first product detail page redesign (#640)
onerandomdevv Jul 21, 2026
e699dcd
feat(web): checkout redesign — social-first, lighter UI + idempotency…
onerandomdevv Jul 21, 2026
8a79928
feat(web): social-first store & user profile redesign (#642)
onerandomdevv Jul 22, 2026
3869467
feat(web): store setup UI redesign — compact signup-style flow (#643)
onerandomdevv Jul 22, 2026
a32ab8a
fix(web): apply skipped PR review suggestions (#641, #642, #643) (#644)
onerandomdevv Jul 22, 2026
7a9c10b
feat(web): unified bag route, social-first orders + order progress, h…
onerandomdevv Jul 23, 2026
da53284
feat: social-first notifications, feed product posts + Saved hub, pur…
onerandomdevv Jul 24, 2026
4fbc6f4
feat: store-orders redesign + tiered/capped fee system + store-mode U…
onerandomdevv Jul 24, 2026
a30a704
fix(whatsapp): harden webhook intake and queue delivery (#648)
onerandomdevv Jul 25, 2026
bc63275
fix(whatsapp): make outbound notifications retry safely (#649)
onerandomdevv Jul 25, 2026
f4b1b18
fix(whatsapp): complete discovery follow-up actions (#650)
onerandomdevv Jul 25, 2026
5370e88
feat(web): store inventory + public product detail redesign (social-f…
onerandomdevv Jul 25, 2026
84f33ab
fix(whatsapp): complete discovery follow-up actions (#651)
onerandomdevv Jul 25, 2026
272a789
fix: product stock-cache 500s + inventory modal validation/toast UX (…
onerandomdevv Jul 26, 2026
35fd7e2
docs(whatsapp): align channel runtime contracts (#654)
onerandomdevv Jul 26, 2026
5ff9ab6
Merge branch 'staging' into dev
onerandomdevv Jul 26, 2026
b044421
refactor(whatsapp): introduce shopper agent tool contract (#656)
onerandomdevv Jul 26, 2026
2b5525f
ci: enforce promotion ladder with a promotion-guard workflow (#658)
onerandomdevv Jul 26, 2026
b130bad
feat(whatsapp): add conversational product discovery
onerandomdevv Jul 26, 2026
94e9ae4
fix(whatsapp): harden conversational discovery context
onerandomdevv Jul 26, 2026
e01d477
feat(whatsapp): add conversational product discovery (#659)
onerandomdevv Jul 26, 2026
c651e98
feat(whatsapp): add linked shopper read actions
onerandomdevv Jul 26, 2026
4d0c8c5
feat(whatsapp): add linked shopper read actions (#660)
onerandomdevv Jul 26, 2026
725f379
feat(whatsapp): add cart management actions
onerandomdevv Jul 26, 2026
a338faf
fix(whatsapp): address cart action review findings
onerandomdevv Jul 26, 2026
c259e16
feat(whatsapp): add cart management actions (#661)
onerandomdevv Jul 26, 2026
ba5aa45
feat(whatsapp): add checkout handoff
onerandomdevv Jul 26, 2026
3e2d063
feat(whatsapp): add checkout handoff (#662)
onerandomdevv Jul 26, 2026
3c9a071
feat(whatsapp): add delivery confirmation flow
onerandomdevv Jul 26, 2026
bc0d7c3
fix(whatsapp): harden delivery confirmation flow
onerandomdevv Jul 26, 2026
b6c1903
feat(whatsapp): add delivery confirmation flow (#663)
onerandomdevv Jul 26, 2026
08ef9af
feat(whatsapp): add shopper help and post-purchase actions
onerandomdevv Jul 26, 2026
dd63709
fix(whatsapp): select relevant post-purchase order
onerandomdevv Jul 26, 2026
6e8f722
feat(whatsapp): add shopper help and post-purchase actions (#664)
onerandomdevv Jul 26, 2026
1b3a404
docs: add self-host + media architecture guides; ignore neon cli arti…
onerandomdevv Jul 26, 2026
f9d4475
docs: address CodeRabbit review on deployment + media architecture
onerandomdevv Jul 26, 2026
47866c5
fix(order): make delivery confirmation recoverable
onerandomdevv Jul 26, 2026
e6879ba
docs: self-host + media architecture guides (+ ignore neon cli artifa…
onerandomdevv Jul 26, 2026
2efc597
Merge branch 'dev' into codex/fix-order-delivery-confirmation-recovery
onerandomdevv Jul 26, 2026
ec21f72
fix(order): address delivery recovery review
onerandomdevv Jul 27, 2026
77e71da
fix(order): make delivery confirmation recoverable (#666)
onerandomdevv Jul 27, 2026
6eff1d6
fix(whatsapp): preserve inbound action recovery
onerandomdevv Jul 27, 2026
2cb9bc1
fix(whatsapp): avoid ambiguous action retries
onerandomdevv Jul 27, 2026
7032135
fix(whatsapp): preserve inbound action recovery (#667)
onerandomdevv Jul 27, 2026
a2cd44d
fix(whatsapp): align product eligibility and discovery state
onerandomdevv Jul 27, 2026
7747d1e
fix(whatsapp): align product eligibility and discovery state (#668)
onerandomdevv Jul 27, 2026
72499b7
fix(whatsapp): make outbound notification enqueue durable
onerandomdevv Jul 27, 2026
61af2f6
chore: fix gitignore formatting
onerandomdevv Jul 27, 2026
38b330c
fix(whatsapp): make outbound notification enqueue durable (#669)
onerandomdevv Jul 27, 2026
696c6bd
chore(ci,docs): retire staging — dev→beta→main ladder + beta-first se…
onerandomdevv Jul 27, 2026
062dda3
Merge branch 'dev' into chore/update-gitignore
onerandomdevv Jul 27, 2026
4651ce9
chore: fix gitignore formatting (#671)
onerandomdevv Jul 27, 2026
d56eed1
Merge branch 'dev' into chore/dev-beta-main-ladder
onerandomdevv Jul 27, 2026
d55b90e
docs(self-host): address CodeRabbit — CX43 (CX42 deprecated), IP clar…
onerandomdevv Jul 27, 2026
d09777a
chore(ci,docs): retire staging — dev→beta→main ladder + beta-first se…
onerandomdevv Jul 27, 2026
d37b29c
promote: dev -> beta (supersede stale beta)
onerandomdevv Jul 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions .github/workflows/promotion-guard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Promotion Guard

# Enforces the promotion ladder so environment branches can only receive merges
# from the tier directly below them:
#
# dev -> beta -> main
#
# (dev is the team integration + final-QA environment; beta is a disposable
# infra rehearsal for selected testers; main is production. Staging was dropped —
# per-PR preview envs + dev cover pre-beta testing.)
#
# GitHub rulesets can require a review and status checks, but they cannot
# restrict which *source* branch a PR merges from. This guard fills that gap:
# it fails any PR into a protected branch whose head is not the allowed source.
# Mark the "guard" check as a required status check in each branch's ruleset
# (beta, main) for it to actually block a merge.
#
# PRs into a protected branch must come from a branch in this repo (not a fork).
# Emergency bypass: add the `hotfix` label to skip the ladder — allowed only on
# PRs targeting `main`, for a critical fix that must land out of order.

on:
pull_request:
branches: [main, beta]
types: [opened, reopened, synchronize, edited, labeled, unlabeled]

permissions:
contents: read

jobs:
guard:
name: guard
runs-on: ubuntu-latest
steps:
- name: Check promotion source branch
env:
BASE: ${{ github.base_ref }}
HEAD: ${{ github.head_ref }}
HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }}
REPO: ${{ github.repository }}
# contains() over the label-name array is an exact element match, so a
# label like "needs hotfix review" does NOT count as the hotfix label.
IS_HOTFIX: ${{ contains(github.event.pull_request.labels.*.name, 'hotfix') }}
shell: bash
run: |
set -euo pipefail

# Allowed source for each protected target branch.
declare -A ALLOWED=( [main]="beta" [beta]="dev" )
expected="${ALLOWED[$BASE]:-}"

echo "PR: $HEAD -> $BASE (from $HEAD_REPO)"

if [ -z "$expected" ]; then
echo "::notice::No promotion rule defined for base '$BASE'; nothing to enforce."
exit 0
fi

# Promotions and hotfixes to protected branches must originate from a
# branch in this repository, never a fork — otherwise a fork branch
# named 'dev' could satisfy 'staging <- dev' and skip the ladder.
if [ "$HEAD_REPO" != "$REPO" ]; then
echo "::error::PRs into '$BASE' must come from a branch in '$REPO', not a fork ('$HEAD_REPO')."
exit 1
fi

# Emergency bypass with the 'hotfix' label — permitted only into main.
if [ "$IS_HOTFIX" = "true" ]; then
if [ "$BASE" != "main" ]; then
echo "::error::The 'hotfix' label may only bypass the ladder on PRs into 'main', not '$BASE'."
exit 1
fi
echo "::warning::'hotfix' label present — bypassing the promotion ladder for 'main'."
exit 0
fi

if [ "$HEAD" != "$expected" ]; then
echo "::error::Promotion ladder violation: '$BASE' only accepts merges from '$expected', but this PR is from '$HEAD'. Follow the ladder dev -> beta -> main, or add the 'hotfix' label (main only) to bypass."
exit 1
fi

echo "OK: '$BASE' is correctly receiving a promotion from '$expected'."
17 changes: 17 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,26 @@ TWIZRR_BACKEND_TASKS.md
TWIZRR_WEB_TASKS.md
TWIZRR_WHATSAPP_TASKS.md
TWIZRR_CLEANUP_REPORT.md
TWIZRR_REALTIME_ARCHITECTURE.md
TWIZRR_REMAINING_BALANCE_COLLECTION_DESIGN.md
TWIZRR_SETTLEMENT_ROLLOUT_READINESS.md
TWIZRR_SHOPPER_WALLET_OVERPAYMENT_DESIGN.md
Twizrr_StorePass.md
TWIZRR_MONNIFY_PROVIDER_ASSESSMENT.md
TWIZRR_MERCHANT_EARNINGS_WALLET_DESIGN.md
TWIZRR_MEDIA_ARCHITECTURE.md
TWIZRR_MEDIA_STORAGE.md
TWIZRR_PAYMENT_EXCEPTION_SANDBOX_RUNBOOK.md
TWIZRR_PAYMENT_AMOUNT_EXCEPTION_DESIGN.md
TWIZRR_PLATFORM_FEE_ANALYSIS.md

# Audit and report files
*_AUDIT_REPORT.md
*_CLEANUP_REPORT.md
*_HANDOFF.md

# Neon CLI / agent skills tooling (local setup artifacts)
.neon
.agents/
skills-lock.json

Loading
Loading