Files

21 lines
10 KiB
Markdown
Raw Permalink Normal View History

2026-08-29 12:55:39 +03:00
- 2026-08-27 16:05 · security · FORGE public-domain read-only audit · VERDICT: REDO · re-ran: git ls-files/check-ignore (data+storage-dump NOT ignored, git add -n stages both), read index.ts+tokens.ts+tickets.ts+db.ts+Dockerfile+compose+.env, grep client href · probed: anon GET /api/tickets has no auth middleware=public PII; storage-dump.json=9.3MB real @reckitt.com emails would be git-committed (MISSED); javascript: href in TicketTable:60 unsanitized; ADMIN_KEY-unset fails closed 403 · REDO: 1 material missed PII file + 2 framing fixes
- 2026-08-27 16:06 · security · FORGE audit RESUBMIT (4 gaps fixed) · VERDICT: PASS · re-ran: grep -c unique reckitt emails=15 (agent said 14, trivial undercount), confirmed storage-dump.json exit-1 + git add -n stages it, index.ts:21 global json pre-auth, no read-route limiter · probed: storage-dump git-leak vector; LOW-7 pre-auth buffering; rate-limit gap on reads · PASS
- 2026-08-27 16:08 · architect/review · FORGE fidelity+template assessment · VERDICT: REDO · re-ran: read db.ts/index.ts/background.js/tokens.ts/Dockerfile/compose + node seed inspect(active=100,jira=127,closed=965,all RITM) + grep Closed/Stats/getStats · probed: sync-payload-vs-upsert destructive(confirmed), unauth GET routes(confirmed), RITM-only collector+docs(confirmed), token/Dockerfile parity(confirmed) · REDO: 2 grounding gaps (wrong seed counts; missed mixed-currency cost sum)
- 2026-08-27 16:08 · reviewer · FORGE correctness+convention review · VERDICT: REDO · re-ran: root/client tsc=0, vitest 3+6=9 pass, lint=eslint-not-found, pg DATE parse off-by-one confirmed (Kyiv->08-24, UTC->08-25) · probed: non-string activity.t crash (no error boundary confirmed), CLIENT_DIST dev overshoot, admin-key !== , extension host-permission grant (handled in options.js), MV3 SW async lifecycle · REDO: 1 gap (extension area-3 absent from findings/affirmations; substance sound on my audit)
- 2026-08-27 16:09 · architect/review · FORGE fidelity+template assessment (round 2) · VERDICT: PASS · re-ran: node seed recount(active=100,jira=127,closed=965,all RITM) + README:47-48 grep(confirms stale '111 active'/'846 closed') + reconfirmed fromClosed drops currencyCode & Closed totalCost=sum(finalCost) · probed: corrected counts match source, README doc-drift grounded, currency mixed-sum grounded · PASS
- 2026-08-27 16:17 · principal(3-review batch) · FORGE review fixes: dates/upsert/sanitize/jira/seed · VERDICT: PASS · re-ran: server tsc=0, client tsc=0, npm test 9pass(6+3), live PG TEMP-table smoke (active-wins+dateOnly+COALESCE all held under +3 TZ), hostile sanitizeActivity/parseDate probes · probed: toISOString off-by-one (dateOnly emits 2025-12-18 where due_date=Date@T22:00Z would shift), thin-sync nulling richness (COALESCE+CASE preserved finalCost/desc/brand/jira/84-activity), non-string activity.t & TS-bypass parseDate (all coerced/null, no throw) · PASS
- 2026-08-27 16:29 · security · read-API auth + least-priv DB role swap · VERDICT: PASS · re-ran: server tsc=0, client tsc=0, client build OK, npm test=9 pass, live DB (forge_app rolsuper/createdb/createrole=f, owns tickets/api_tokens/app_users/user_sessions, tickets=966), live boot smoke (no-session reads=401, /healthz=200, /api/sync no-token=401, wrong+unknown pw=401, correct login=200 HttpOnly+SameSite=Lax cookie, authed stats=966/100/866, /api/me=admin, logout then stats=401) · probed: unguarded read route (none), fail-closed after logout, timing-uniform unknown-user, SQLi on read filters (parameterized) · PASS
- 2026-08-27 17:01 · analytics-milestone(P0-2) · ingest+engine+client analytics · VERDICT: PASS · re-ran: SQL coverage(966/100/866,ttfr953/cd844/todo659/uat519/size774/ob954,cfg8keys) + math(rev2026-07=24160,Finish190/Durex123,Health167/Hygiene166,median42/avg65,Alesya 73.06d/404/15%) all reproduced via SQL+live app; server tsc OK, client tsc OK, vitest 9 pass, vite build OK · probed: unauth 401 on all 3 endpoints(live boot), empty/insufficient series guards, unmapped ccy NO/PART→rate1, DATE local-parts no UTC shift, no dangerouslySetInnerHTML · PASS
- 2026-08-27 17:05 · engineer · Phase3 Active tab + board redesign · VERDICT: PASS · re-ran: server tsc OK, client tsc OK, vite build OK, npm test 9 pass, live DB board-dist {awaiting65,hold6,open5,replied17,wip7}=100, progress 24→7wip/17replied, app_config colleagues 8 incl Alesya · probed: colleague-rule wip-vs-replied split (reproduced), empty unassigned column (0→No tickets), null last_activity_at (1 row→timeAgo em-dash), read-only (no PATCH/PUT/DELETE/DnD; only POST is login/logout; cards link to ServiceNow) · PASS
- 2026-08-27 17:27 · engineer/insights · PM Insights phase (finance ingest + engine + client) · VERDICT: PASS · re-ran: server tsc=0, client tsc=0, client build OK, tests 3+6=9 pass, DB counts active_cost=54/po_notnull=860/active_po_blank=73 exact, getInsights live=totalAlerts65/revAtRisk77373/waitingPo74(14·1·12)/topPM Alesya, live E2E unauth=401→login200→insights200 · probed: distinct-vs-doublecount (ΣgroupProb=65==totalAlerts==ΣpmAlerts, revreconciles), info-groups excluded (lifetime32/inactive6 not in 65), unmapped currency string→rate1 no crash + 46 null-cost→0, auth gate live 401 · PASS
- 2026-08-27 17:55 · engineer · Overall tab full fidelity · VERDICT: REDO · re-ran: server tsc OK, client tsc OK, npm test 9 pass, vite build OK, live psql byBrand/byRequester nested aggregation · probed: donut source cap (top-20 feeds share donut → center 'total'=375 not 966, %s inflated 2.6x), tie-order Strepsils/Nurofen, YoY single-year null, div-by-zero guards, auth 401 gate · REDO: 1 gap (donut misrepresents ticket share)
- 2026-08-27 18:07 · engineer · RBAC+tokens+filtered-xlsx+full-width+donut · VERDICT: PASS · re-ran: server tsc 0, client tsc 0, client vite build OK, tests 9 pass (6 client+3 root), live DB introspection · probed: lead POST role=admin blocked server-side 403 (index.ts:249); listTokens SQL omits token_hash (tokens.ts:98); donut center=966 live (all 966 rows have requester, Rowena 74≈8% not 375/20%); resolveToken filters revoked=false+expiry; export passes filtered set; app_users.role additive text NOT NULL default viewer, no column reshaped; only admin(role=admin) remains · PASS (note: no last-admin-delete guard — lead can delete an admin, non-blocking per task)
- 2026-08-27 18:09 · security · RBAC+token+user-mgmt audit · VERDICT: PASS · re-ran: greps(ADMIN_KEY/dangerouslySetInnerHTML/helmet/regenerate→none; route inventory→14 API routes match matrix) + read auth/db/tokens/index + client App/admin.service · probed: lead→delete-admin(HIGH-1 real), deleted-session-survives(HIGH-3 real), last-admin-lockout no-demote-endpoint(HIGH-2 real), listTokens no token_hash(holds) · PASS
- 2026-08-27 18:10 · architect · ADR: extension single sync engine SNOW+Jira · VERDICT: REDO · re-ran: grep server/db.ts upsert (clobber confirmed L466-483, jira=COALESCE L488), index.ts normalizeIncoming (status→active L172), manifest.json (host_perms confirmed), background.js (CHUNK=100/world:MAIN/offset<2000 confirmed), types.ts+client ticket.types.ts · probed: movements JSONB sub-field already declared {at,who}[] in 2 type files (ADR claims 5-field shape + adds conflicting {from,to,at}); no-RITM skip logic; separate-endpoint clobber-avoidance verified sound · REDO: 1 gap
- 2026-08-27 18:12 · architect · ADR: extension single sync engine SNOW+Jira (round 2) · VERDICT: PASS · re-ran: re-read ADR §1/§5/§11 vs code — JiraInfo 6 fields confirmed (server/types.ts:11-18, movements:17; client ticket.types.ts:9-16,:15); §5 reuses {at,who} + cites both files + flags statusDurations/board as new additive type-touch; §11 Types:additive bullet present · probed: movements shape now honest (no invented {from,to,at}); no runtime consumer claim matches grep; separate-endpoint clobber-avoidance still intact · PASS
- 2026-08-27 19:02 · engineer · Extension Jira-sync (SNOW+Jira attach-only) · VERDICT: PASS · re-ran: server tsc 0, node --check bg/options/popup OK, tests 9 pass (6 client+3 root), live psql TEMP-TABLE smoke of exact attachJira UPDATE (real RITM2653436 untouched) · probed: Jira payload with top-level "status"+SQLi string lands ONLY inside jira jsonb (ticket status stays closed, table survives)→no clobber/no injection; '||' merge preserves omitted keys (extraKept=KEEPME, assignee=Old Person); jira_key WFN-100→605 via COALESCE; non-matching number→UPDATE 0 (no stub); endpoint requireToken not session (401 w/o bearer, index.ts:241); schema additive-only (jira JSONB pre-existing, all ALTER ADD COLUMN IF NOT EXISTS) · PASS
- 2026-08-27 19:11 · engineer · Jira statusDurations+movements+chart #17 · VERDICT: PASS · re-ran: server+client tsc=0, root vitest 3/3, client vitest 6/6, live SQL agg on tickets(jira?statusDurations)=73 rows, booted dist+curl endpoint · probed: 401 unauth (got 401), min-2 filter drops Cancelled n=1, ordering known-workflow-first + extras avgDays-desc, ms/86.4M day math matches SQL exactly (UAT 16.14d/21, Closed 23.51d/16, InProgress 4.90d/37), guards NaN/<=0, client null-safe (jiraDur=[] + length>0 gate), static SQL no user input, additive jsonb no DDL · PASS
- 2026-08-29 11:20 · devops · SSH NAS host → mycloud.dp.ua:2323 · VERDICT: PASS · re-ran: grep 192.168.50.2 (only comment+artifact), grep NAS_HOST (all mycloud), bash -n push-to-nas.sh OK · probed: all ssh/scp/rsync hops use $NAS_HOST not hardcoded IP; port 2323 preserved; illustrative comment+historical artifact intentional · PASS
- 2026-08-29 12:07 · engineer · Insights alert/watch sections as accordions · VERDICT: PASS · re-ran: tsc -p (clean), vite build (139 modules, exit 0), grep compiled CSS (.grid[hidden]{display:none} present, specificity/order beats .grid), token defs in globals.scss · probed: collapse hides grid via hidden+override; aria-controls id always-rendered (no dangling ref when collapsed); unique slugs alert-categories/watch-list (no dup id); per-card open state diff-unchanged (no regression); chevron rotate(90deg) bound to aria-expanded=true · PASS
- 2026-08-29 12:23 · designer/engineer · Insights full-width accordion items (CSS) · VERDICT: PASS · re-ran: vite build OK, tsc clean, npm test 9/9 (client 6 + root 3), grepped dist CSS · probed: section hidden-collapse specificity (.grid[hidden] 0,2,0 beats .grid 0,1,0 → display:none wins), flex-column full-width via default align-items:stretch, .row internal grid columns intact + tokens compile (sass would error if undefined) · PASS