π eop β Task Board¶
Live from tasks/ frontmatter. 155 task files indexed. Rebuilt on every push to nightly via Cloudflare Pages.
π΅ Doing¶
9 tasks.
| ID | Title | Area | Updated |
|---|---|---|---|
| T-202 | Dependabot triage part 2 β clear the moderate/low residue; production tree to zero | infrastructure | 2026-08-10 |
| T-201 | Dependabot triage β clear all critical/high npm vulnerabilities via targeted upgrades | infrastructure | 2026-08-06 |
| T-185 | Can't-pay-twice marker on payable documents | accounting | 2026-07-31 |
| T-021 | Migrate the document store aote-system/file-archive β tebs-erl | data-residency | 2026-07-21 |
| T-162 | Notifications Center β one page to read, route, and configure every notification (in-app + email + watchdogs) | notifications | 2026-07-21 |
| T-025 | Migrate user-facing Firestore access to the client SDK (Admin SDK β derived/privileged only) | auth-rbac | 2026-07-02 |
| T-147 | Consolidate + productionize the NAS billing scraper (schedule Β· re-auth/alert Β· decommission Cloud Run) | nas-scraper | 2026-07-02 |
| T-047 | IR56M fill β review β confirm β sign (Filings tab, reuse WOPC signing) | tax-hk-filings | 2026-06-25 |
| T-166 | ERL watermark v2 β per-document coastline watermark on generated documents (design + prototype) | invoice | β |
β Blocked¶
2 tasks.
| ID | Title | Area | Blocked on |
|---|---|---|---|
| T-014 | Match Transaction modal shows wrong fields/layout | accounting | owner re-check on fresh dev server |
| T-016 | Aug/Sep 2025 GCP per-service breakdown | gcp-billing | owner β two single-month Console exports |
βͺ Todo¶
10 tasks.
| ID | Title | Area |
|---|---|---|
| T-027 | Narrow the Firestore Admin SDK credential β per-database SA scoping | auth-rbac |
| T-037 | Make the app "live" β fire notifications/email on AUTO events (upload, auto-match, tx-sync) | notifications-matching |
| T-072 | Note-email recipient first-name + GL-code / original-description live plumbing | |
| T-085 | Unify the accounting period model to the Year of Assessment (FY β‘ 31-Mar YA; stub grandfathered) | accounting |
| T-133 | Manual "fully close an FY" gate + the extra IR56M confirmation status it unlocks | tax-hk-filings |
| T-154 | Optimize the web app for iOS 26 Safari (Liquid Glass) β safe areas, toolbar tinting, viewport | web-mobile |
| T-181 | Service Invoice upload pipeline β PDF-only, no cropping, no substantiation note, manual match hook | accounting |
| T-182 | Declare payment method at submission β Telegram /command + web Review-step flag | accounting |
| T-186 | Match a transaction to an existing Vendor Invoice | accounting |
| T-190 | Approvals route to a rank, not to one named person β retire the single line manager | user-management |
β Done (recent 20)¶
20 tasks.
| ID | Title | Area | Updated |
|---|---|---|---|
| T-180 | Separate Receipts from Service Invoices; stop the unified expense view being a front door | accounting | 2026-07-27 |
| T-183 | Employee payment readiness β abbreviation, legal name, bank account, and prompting for them | accounting | 2026-07-27 |
| T-179 | HKFRS s.33 related-party gate β carve-out for money going INTO GL 1120 (Due from Director) | accounting | 2026-07-24 |
| T-177 | Scoped agent access to the owner's Apps Script (code-management SA, no mail/Drive/run) | infra-credentials | 2026-07-23 |
| T-052 | Anchor coaching Sessions to the Individual stableId (replace name/abbr matching) | coaching | 2026-07-15 |
| T-038 | Live (part 1) β notify + email on AUTO-MATCH linked | notifications-matching | 2026-07-10 |
| T-040 | Live (part 3) β notify on BANK-TX-UPDATE β auto-match | notifications-matching | 2026-07-10 |
| T-041 | Live (part 4) β notify on match SUGGESTION + MISALIGNMENT | notifications-matching | 2026-07-10 |
| T-015 | receipt-cropper β min-instances 0 (stop 24/7 Cloud cost) | infra | 2026-07-09 |
| T-039 | Live (part 2) β notify + email on INVOICE UPLOAD | notifications-matching | 2026-07-09 |
| T-050 | WOPC withdraw β reassign lets closing director be the WOPC's own payee (cross-issuance bug) | wopc-records | 2026-07-09 |
| T-140 | IR56M completed-email distribution can double-send (non-atomic claim, now reachable via PATCH) | taxHK | 2026-07-09 |
| T-156 | Bank-account nickname β brand label wins over the clearing-bank registry name (Airwallex vs "DBS") | accounting | 2026-07-09 |
| T-158 | Company payee blocks resolve from the bank-account registry (kill the 7+ hardcoded copies) | accounting | 2026-07-09 |
| T-163 | Records WOPC β "Delete permanently" kebab action for hidden/tombstoned WOPCs | wopc-records | 2026-07-09 |
| T-159 | Invoice β discount label made layout-neutral + debug-overlay geometry accuracy (rename, box edges, px readouts) | invoice | 2026-07-05 |
| T-078 | Invoice doc shape migration β consolidate to top-level detail + email maps |
accounting-invoices | 2026-07-03 |
| T-080 | Post-migration dead-code cleanup β drop legacy-shape fallbacks once migrations are applied | accounting-cleanup | 2026-07-03 |
| T-152 | Project quotations β expose delete affordance matching invoice delete | projects | 2026-07-03 |
| T-153 | Project invoice template β render per-line discount percentage under amount | project-invoices | 2026-07-03 |
π Dropped¶
11 tasks.
| ID | Title | Area | Why |
|---|---|---|---|
| T-007 | Receipt remark/reference field as a matching fingerprint (gap 1b) | receipts | Substantiation note already exists; owner doesn't want it as a fingerprint. |
| T-008 | 1% fee as its own document-type entry point | routing-map | Owner chose matcher-only (T-001); no doc-type enum expansion. |
| T-013 | Move services to NAS (NAS-primary, Cloud Run backup) | infra | β |
| T-035 | Migrate Workspace invoice PDF fetching β NAS (part c of 4) | nas-scraper | β |
| T-036 | Migrate Workspace CSV (transactions) fetching β NAS (part d of 4) | nas-scraper | β |
| T-051 | Contacts unification OPTIONAL follow-ups (P6 WOPC re-anchoring Β· P7 teardown + registry cutover) | contacts | β |
| T-077 | WOPC numbering chronology + multi-payment fragmentation consistency pass | accounting-wopc | β |
| T-083 | Fix Firebase auth on non-primary domains β same-origin authDomain (reverse-proxy /__/auth) | auth | β |
| T-095 | RBAC β introduce it_support role to scope infra/integrity alerts independently of admin |
rbac | β |
| T-106 | Minimize per-deploy NAS transfer β lockfile-pinned deps base image + app-layer split | infra | β |
| T-107 | RBAC cleanup β drop the legacy role half from the badge dual-gate after T-022 step 7 bakes |
auth-rbac | β |
π« Tickets¶
Live from tickets/ frontmatter. 35 ticket files indexed. Tickets (I-NNN) are the symptom queue; a structural one also links a T-NNN task in its Task column.
π Open¶
0 tickets.
(none)
π Investigating¶
1 ticket.
| ID | Title | Area | Found in |
|---|---|---|---|
| I-036 | Telegram receipt upload β Inngest "Your server returned HTTP 504 before the SDK responded" | β | Telegram bot reply after a receipt upload (owner, 2026-07-21) β post-Hobby-downgrade |
β« Escalated¶
0 tickets.
(none)
π©Ή Fixed (recent 20)¶
20 tickets.
| ID | Title | Area | Task | Updated |
|---|---|---|---|---|
| I-037 | Telegram receipts β Gemini cleanup mangles CJK characters into unreadable glyphs | telegram-receipts | β | 2026-07-28 |
| I-032 | Invoice edit path DELETES canonical detail.payment.payTo and stashes it in legacy paymentDetail.payTo β every edit re-drifts the bank account | accounting-invoices | T-164 | 2026-07-10 |
| I-024 | NAS GCP billing scraper silently fails when its Google session expires β no re-auth + no failure alert (dark since ~2026-06-26) | nas-scraper | T-147 | 2026-07-03 |
| I-026 | GCP cost-table scrape can't select the billing-period dropdown ("Could not select invoice month") | nas-scraper | T-147 | 2026-07-03 |
| I-029 | 231 coaching-invoice share links broke β 5 Nan session invoices dropped by the T-146 orphan re-home (restored) | coaching | T-146 | 2026-07-03 |
| I-008 | Inspect-Period "Data Integrity" stays red on a STALE reconciliation-watchdog alert after the cron recovered | accounting-periods | β | 2026-07-02 |
| I-027 | Contacts β client companies showed blank address/phone/email (incomplete unification migration) | contacts | β | 2026-07-02 |
| I-003 | Vendor-invoice transactions render the wrong display name (missing invoice number, dangling separator) | display | T-090 | 2026-07-01 |
| I-004 | Receipt detail modal no longer opens on double-click after the ReceiptsβService-Invoices tab merger | records-ui | T-087 | 2026-07-01 |
| I-005 | Constant re-login on the NAS β sessions bounce to /auth/error?reason=profile-missing | auth | T-088 | 2026-07-01 |
| I-014 | Signed WOPC ERL-WOPC/2025-020 reads as "Pending" with no signed PDF β signature.requestId dangles, all surviving requests voided, WOPC.pdf + revisions empty | accounting-wopc | T-089 | 2026-07-01 |
| I-025 | Coaching page showed missing/partial sessions, wrong balances, no vouchers/invoices for migrated students β page still read the pre-T-079 top-level Sessions location | coaching | T-146 | 2026-07-01 |
| I-015 | IR56M "Preview the filled PDF" button does nothing (popup blocked after await) | tax-hk-filings, ui | T-047 | 2026-06-29 |
| I-016 | Review of Codex's 2026-06-26β29 commits β overlooked-bug sweep (WOPC voided-PDF fall-through + coaching sessionDate + footgun guard) | accounting-records, wopc, ir56m | β | 2026-06-29 |
| I-019 | Project | accounting-projects, accounting-records | β | 2026-06-29 |
| I-010 | WOPC reference-number module β "Generatingβ¦" spinner never clears (T-081 numbering format mismatch) | accounting-ui | β | 2026-06-24 |
| I-011 | Records β WOPCs tab shows no WOPCs after the WOPC field restructure | accounting-records | T-110 | 2026-06-24 |
| I-012 | Records β Coaching Invoices tab shows none after the coaching-schema migration | accounting-coaching | T-079 | 2026-06-24 |
| I-007 | Watchdog / integrity emails reach all admin users instead of the system owner only | rbac | T-095 | 2026-06-22 |
| I-017 | Service-invoice batch ZIP drops legacy GCS-stored rows (CORS) + GCP rows (wrong id) | records | β | β |
β Closed (recent 20)¶
2 tickets.
| ID | Title | Area | Updated |
|---|---|---|---|
| I-001 | Display name renders incorrectly for certain transactions | display | 2026-07-01 |
| I-002 | Firebase sign-in fails on p-eop β "Unable to save initial state" (sessionStorage) | auth | 2026-06-22 |
π« Won't fix¶
0 tickets.
(none)