Skip to content

UX: freshly-started workflows show all-red at t=0 — add scheduled/not-started state + richer bundle cards #106

Closed

Description

@alexeygrigorev

Freshly-started workflows show all-red at t=0: add scheduled/not-started state + richer bundle cards

Status: pending
Tags: enhancement, frontend, backend, P2
Depends on: #105
Blocks: None

Groomed from the same live UX audit. #5: freshly-started workflows are instantly
all-red, destroying the signal value of the risk indicators. A workflow anchored
today (started from a template) immediately shows Overdue 9 / Missing evidence
15 / At risk on every task, because template task offsets are pre-publication
(relative to a future anchor/event) — so tasks with negative offsets land in the
past the moment the bundle is created. At t=0 the operator cannot tell a
genuinely late workflow from a brand-new one. Evidence:
.tmp/screenshots/ux-audit/13-bundle-header.png, 15-dashboard-populated.png.

Scope

Two related changes:

  1. Scheduled / not-started semantics. Template instantiation
    (instantiateTemplate in backend/src/db/templates.ts, ~lines 129-160)
    computes each task date as anchorDate + offsetDays; with negative offsets and
    an anchor of today, tasks are born in the past. The risk/queue helpers on the
    frontend (bundleRiskSummary ~line 707, dashboardQueueLabels /
    taskPrimaryQueueGroup ~lines 677-705) then flag them Overdue / Missing
    evidence / At risk. A freshly-created workflow must not be flagged
    overdue/at-risk before its tasks are genuinely due. Introduce a
    "scheduled / not-started" treatment so not-yet-worked template tasks are shown
    as scheduled rather than overdue at t=0. The engineer should choose the
    simplest correct mechanism and document it; candidate approaches:

    • a bundle-level "not started / scheduled" state that suppresses
      overdue/missing-evidence/at-risk flags until the operator activates the
      workflow (e.g. on first task action or an explicit "Start"), or
    • treating a task as not-overdue when its due date is before the bundle's
      creation date (i.e. do not retroactively mark pre-anchor tasks late for a
      bundle created today).
      The chosen rule must be applied consistently in bundleRiskSummary, the
      dashboard queue grouping, and the bundle risk header so the same task is not
      "overdue" in one place and "scheduled" in another.
  2. Richer bundle-list cards. The Bundles list card (loadBundles,
    ~lines 3820-3843) shows only "N / M done". Enrich it to also show stage,
    next-due date, overdue count, and waiting count — the same summary the
    dashboard bundle card and the detail header already compute via
    bundleRiskSummary (renderBundleCard ~line 1682). Reuse that helper; do not
    duplicate risk logic.

Serves JTBD 2 ("The first next action is immediately visible after creation"),
JTBD 3 ("Workflow detail shows stage, progress, next due task, overdue count, and
waiting count"), and the reminder model (overdue reminders "catch tasks that were
not closed on time" — a t=0 task was never late).

Acceptance Criteria

  • A workflow started from a template with an anchor of today does NOT show all
    tasks as Overdue / Missing evidence / At risk at creation time; tasks that
    are not yet genuinely due are shown as scheduled/not-started instead.
  • A genuinely late task (past its due date after the workflow has been active)
    is still flagged Overdue — the scheduled treatment applies only to
    not-yet-worked / freshly-created tasks, not as a blanket suppression.
  • The scheduled/overdue/at-risk rule is consistent across the dashboard queue
    grouping, the dashboard bundle card, and the bundle detail risk header (the
    same task is never "overdue" in one view and "scheduled" in another).
  • The Bundles list card shows, in addition to progress: stage, next-due date,
    overdue count, and waiting count (reusing bundleRiskSummary).
  • A brand-new bundle's list card and header read as a healthy new workflow
    (e.g. "0 overdue", a next-due date), not "Overdue 9 / Missing evidence 15".
  • If a stored bundle state/field is added, it is declared in the data model
    (backend/src/types.ts) and the SAM/CloudFormation-managed table is used —
    no unmanaged tables or one-off migrations; export/restore
    (npm run export:data, npm run validate:export) still round-trips.

Test Scenarios

Scenario: New workflow is not all-red at t=0

Given: Grace starts a Newsletter workflow anchored today from its template
When: she opens the bundle and the dashboard
Then: the tasks that fall before the anchor are shown as scheduled/not-started,
the bundle is not "Overdue 9 / Missing evidence 15 / At risk", and a clear
next-due is visible.

Scenario: Genuine overdue still flags

Given: an active workflow with a task whose due date has passed while the
workflow was in progress
When: the dashboard and bundle render
Then: that task is still shown Overdue.

Scenario: Bundle-list card carries risk

Given: the Bundles list with several bundles
When: it renders
Then: each card shows stage, next-due, overdue count, and waiting count in
addition to progress.

Out of Scope

Dependencies

Verification

  • From backend/: npm test (backend unit tests, node --test) covering the
    scheduled/overdue classification and instantiateTemplate date behavior.
  • From backend/: npm run typecheck.
  • From backend/: npm run test:e2e — at minimum home-dashboard.spec.js,
    bundle-detail.spec.js, and api-instantiation.spec.js; add a spec asserting a
    today-anchored template workflow is not all-red at creation and that the bundle
    list card shows stage/next-due/overdue/waiting.
  • If export shape changes: npm run export:data + npm run validate:export (or
    npm run restore:drill) to confirm round-trip; outputs under .tmp/exports/.
  • Playwright screenshots of a freshly-started bundle detail + header and the
    Bundles list under .tmp/screenshots/ux-audit/, read to confirm it no longer
    reads all-red.

Activity

  1. added
    enhancementNew or improved functionality
    needs groomingRaw intake that needs PM grooming
    P2Nice to have
    and removed
    needs groomingRaw intake that needs PM grooming
    on Jul 2, 2026
  2. alexeygrigorev commented on Jul 30, 2026

    @alexeygrigorev
    MemberAuthor

    Software Engineer handoff

    Implemented the scheduled/not-started treatment and richer bundle cards on isolated branch issue-106-scheduled, based on 98fdc1fc9de41b463179392a41f393cee245288a.

    Chosen rule: a task is derived as Scheduled only when it is an untouched template todo task with a strict valid YYYY-MM-DD nominal date before the bundle's valid creation calendar date. Missing/invalid provenance falls back to legacy risk behavior; ad-hoc, recurring, waiting, and other non-todo tasks remain active. Future tasks are excluded from missing-evidence/at-risk until due. No persisted field, migration, schema, or export-shape change was introduced.

    Changed files

    • backend/src/public/app.js
    • backend/src/pages/index.html
    • backend/tests/home-dashboard.test.ts
    • backend/tests/bundle-detail.test.ts
    • backend/e2e/home-dashboard.spec.js
    • backend/e2e/bundle-detail.spec.js
    • backend/e2e/api-instantiation.spec.js

    The shared bundleRiskSummary now owns scheduled exclusion/counting, overdue/missing-evidence behavior, next-due selection, and the list/detail/dashboard summaries. The Bundles list reuses it to show stage, next due, overdue, waiting, and progress. The dashboard exposes a Scheduled overflow group and detail task pills/header show the same classification.

    Frozen uncommitted diff SHA-256: 134d1e9104fa2ebb60ad0081caa16a458c6d27ed5fce1d96fdd8809e8a2949a1

    Verification

    • NODE_ENV=test SKIP_AUTH=true node --import tsx --test tests/home-dashboard.test.ts tests/bundle-detail.test.ts — PASS, 100/100.
    • npm test — PASS, 1,368 tests: 1,367 passed, 1 expected skip, 0 failed.
    • npm run typecheck — PASS.
    • npm run build — PASS.
    • npx playwright test e2e/home-dashboard.spec.js e2e/bundle-detail.spec.js e2e/api-instantiation.spec.js — PASS, 75/75.
    • Focused final UX: freshly-started workflows show all-red at t=0 — add scheduled/not-started state + richer bundle cards #106 Playwright scenarios — PASS, 4/4.
    • node --check on the changed browser JS/spec files and git diff --check — PASS.
    • Export/restore checks skipped: the implementation is fully derived and changes no stored or portable export shape.

    Screenshots inspected

    • .tmp/screenshots/issue-106/dashboard-fresh-workflow-1440.png
    • .tmp/screenshots/issue-106/dashboard-newsletter-t0-1440.png
    • .tmp/screenshots/issue-106/bundles-list-rich-card-1280.png
    • .tmp/screenshots/issue-106/bundle-detail-healthy-header-1280.png

    All four were opened and read. The seeded Newsletter at t=0 shows Scheduled 9, no Overdue/At-risk entries, and only the genuinely due-today invoice's missing evidence. The list card and detail header show consistent next-due, Overdue 0, Waiting 0, and scheduled state without clipping, overlap, or error pages.

    Acceptance criteria

    • Today-anchored template workflow is not all-red; pre-creation untouched template tasks render Scheduled.
    • Genuine late active/ad-hoc/recurring and worked/waiting tasks remain Overdue.
    • Classification is consistent across dashboard grouping/card and bundle detail header/task pills.
    • Bundles list cards show stage, next due, overdue, waiting, and progress via bundleRiskSummary.
    • Brand-new list/detail views read as a healthy workflow with a clear next due.
    • No stored field was added, so model/table/export round-trip requirements are not activated.

    No commit or push has been made. Ready for independent Tester review.

  3. alexeygrigorev commented on Jul 30, 2026

    @alexeygrigorev
    MemberAuthor

    CHANGES REQUESTED

    Frozen diff reviewed:

    • Base: 98fdc1fc9de41b463179392a41f393cee245288a
    • Diff SHA-256 before and after verification: 134d1e9104fa2ebb60ad0081caa16a458c6d27ed5fce1d96fdd8809e8a2949a1
    • Tracked diff remained limited to the seven SWE-listed frontend/test files; no product edits, commit, or push by Tester.

    Blocking defect — archived tasks are treated as active workflow risk:

    • Deterministic browser/API check: npx playwright test --config=../.tmp/issue106-test/playwright.config.js (from backend/) — FAIL, 0/1.
    • Fixture: one active bundle containing one past task with the valid persisted status archived, requiresFile: true, and overdue/missing-evidence/at-risk dashboard states.
    • Expected: archived work contributes no next-due, overdue, waiting, missing-file, or at-risk counts.
    • Actual Bundles-list summary: Next due 2026-07-27 / Overdue 1 / Waiting 0 (assertion expected Overdue 0).
    • Actual detail context: Next due 2026-07-27 · Archived historical task, Overdue 1, Missing files 1; the archived row is also labeled Overdue / Missing evidence / At risk.
    • Root cause: bundleRiskSummary and renderWorkflowContext define active as every status except done. TaskStatus also includes archived. This violates the reviewed done/archived terminal-state invariant and the cross-surface consistency/healthy-risk semantics required by UX: freshly-started workflows show all-red at t=0 — add scheduled/not-started state + richer bundle cards #106.
    • Required fix: exclude both done and archived from shared risk, next-due, missing-proof/file, and task-row risk classification; add direct runtime regression coverage for archived tasks across Bundles list, bundle detail context/header, and task pills.

    Fresh screenshots captured and opened at original resolution:

    • .tmp/screenshots/issue-106-tester/archived-bundle-list-desktop.png
    • .tmp/screenshots/issue-106-tester/archived-bundle-detail-desktop.png
    • .tmp/screenshots/issue-106-tester/archived-bundle-detail-mobile.png

    The screenshots have no 404, error page, clipping, overlap, or unreadable mobile layout, but clearly show the blocking semantic defect.

    Completed checks:

    Acceptance-criterion assessment:

    1. Fresh today-anchored template is not all-red — PASS in exercised UX: freshly-started workflows show all-red at t=0 — add scheduled/not-started state + richer bundle cards #106 browser scenarios.
    2. Genuine late active/ad-hoc/recurring work remains overdue — PASS in exercised UX: freshly-started workflows show all-red at t=0 — add scheduled/not-started state + richer bundle cards #106 browser scenario.
    3. Shared scheduled/overdue/at-risk rule is correct across surfaces — FAIL for valid terminal archived tasks.
    4. Rich bundle card fields reuse the shared summary — PASS for rendered fields, but inherits the archived-count defect.
    5. Healthy brand-new list/header presentation — PASS in exercised UX: freshly-started workflows show all-red at t=0 — add scheduled/not-started state + richer bundle cards #106 scenarios.
    6. No stored field/model/export-shape change — PASS by diff inspection; export/restore gate not activated.

    Please return to SWE, fix terminal-state handling, add the missing archived regression tests, freeze a new diff hash, and send it back for a focused Tester rerun.

  4. alexeygrigorev commented on Jul 30, 2026

    @alexeygrigorev
    MemberAuthor

    Software Engineer fix handoff

    Addressed the Tester's archived-task blocker from #106 (comment) on the same isolated issue-106-scheduled worktree.

    Fix

    • Added one shared taskIsActive invariant: only tasks whose status is neither done nor archived contribute operational work.
    • Applied it to dashboard queue labels/rows, bundleRiskSummary active/scheduled/overdue/waiting/follow-up/missing-evidence/next-due selection, missing-proof classification, and renderWorkflowContext missing-file counts.
    • Archived task history remains visible in a terminal Archived section on bundle detail, but has no overdue, missing-evidence, at-risk, scheduled, waiting, proof-entry, follow-up, or completion controls.
    • Added strict invalid-date fallback coverage: impossible task dates and invalid bundle createdAt metadata cannot invent Scheduled state and retain the documented legacy active/overdue behavior.
    • Preserved genuine active overdue behavior alongside archived history.

    The tracked diff remains limited to the original seven #106 files. No commit or push has been made.

    Replacement frozen uncommitted diff SHA-256: 708fc6bdb4d9c87f6291f676b1a5827fbd060c34acc86420c03d002ceffe6f38

    Base HEAD: 98fdc1fc9de41b463179392a41f393cee245288a

    Regression coverage

    The new runtime scenario creates one archived past required-file task and one genuine active overdue required-file task in the same bundle, then verifies:

    • Bundles list: archived date is not Next due; only the active task contributes Overdue 1; Waiting 0.
    • Bundle detail header: only the active task is Next due/Overdue/Missing files; Scheduled and Waiting remain zero.
    • Bundle task pills: archived row shows only Archived and no operational risk/evidence pill; active task remains Overdue/Missing evidence/At risk.
    • Dashboard: archived row is absent; active overdue row remains in the queue.
    • Invalid task calendar date and invalid bundle creation date both fall back to active Overdue, never Scheduled.

    Verification

    • JavaScript syntax checks and git diff --check — PASS.
    • Focused unit: NODE_ENV=test SKIP_AUTH=true node --import tsx --test tests/home-dashboard.test.ts tests/bundle-detail.test.ts — PASS, 101/101.
    • Focused UX: freshly-started workflows show all-red at t=0 — add scheduled/not-started state + richer bundle cards #106 Playwright across the three required specs — PASS, 6/6.
    • npm run typecheck — PASS.
    • npm run build — PASS.
    • npm test — PASS, 1,369 tests: 1,368 passed, 1 expected skip, 0 failed.
    • npx playwright test e2e/home-dashboard.spec.js e2e/bundle-detail.spec.js e2e/api-instantiation.spec.js — PASS, 77/77.

    Screenshots inspected

    • .tmp/screenshots/issue-106/bundles-list-archived-excluded-1280.png
    • .tmp/screenshots/issue-106/bundle-detail-archived-excluded-1280.png
    • .tmp/screenshots/issue-106/dashboard-archived-excluded-1280.png

    All were opened at original resolution. They show the active overdue task as the only risk-bearing work, archived history isolated under Archived, and no clipping, overlap, 404, or error page.

    Ready for focused Tester rerun against the replacement frozen diff.

  5. alexeygrigorev commented on Jul 30, 2026

    @alexeygrigorev
    MemberAuthor

    CHANGES REQUESTED

    Replacement candidate reviewed:

    The original archived-task blocker is substantially fixed:

    • Focused unit command: NODE_ENV=test SKIP_AUTH=true node --import tsx --test tests/home-dashboard.test.ts tests/bundle-detail.test.ts — PASS, 101/101.
    • Focused browser command covering archived list/detail/dashboard behavior, UX: dashboard IA — lead with Today / Overdue / Follow-ups due / At-risk, demote intake counters #105 ordering, genuine overdue, malformed task/bundle dates, and fresh t=0 workflows — PASS, 5/5.
    • Archived rows are absent from the dashboard, isolated under Archived on detail, have only the Archived pill, a disabled checkbox, and no required-link, file, completion-proof, waiting, or completion controls.
    • Active overdue work still supplies Next due / Overdue / Missing evidence / At risk.
    • Impossible task dates and invalid bundle creation dates fall back to active Overdue and never invent Scheduled.

    Blocking remaining defect — an archived-only shared-link requirement still contributes live workflow risk:

    • Deterministic browser/API command: npx playwright test archived-link-risk.spec.js --config=../.tmp/issue106-test/playwright.config.js — FAIL, 0/1.
    • Fixture: one active bundle with an empty Campaign bundle link and exactly one task requiring that link; the only requiring task has valid terminal status archived.
    • Expected workflow context: Missing links 0.
    • Actual workflow context: Missing links 1.
    • The archived row itself correctly has no proof/edit/follow-up controls, so the failure is specifically the bundle-level risk leak.
    • Root cause: renderWorkflowContext calls isBundleLinkMissing(link, tasks) with every task. emptyBundleLinkCoveredBySkip includes archived requiring tasks and only suppresses a requirement when every task is done with a matching skip closure. It does not apply the new shared taskIsActive terminal-state invariant.
    • Required fix: calculate shared-link missing state from active requiring tasks only. If no active task requires an empty link, it must not increment Missing links or highlight the link as an operational gap. Preserve existing done+skip behavior and add direct regression coverage for archived-only, active-only, and mixed active+archived requirements.

    Other completed checks:

    • npm run typecheck — PASS, exit 0.
    • npm run build — PASS, exit 0.
    • git diff --check 98fdc1fc9de41b463179392a41f393cee245288a — PASS.
    • The deterministic blocker was found during focused regression, so broader suites were not repeated after the gate was already decided.

    Fresh screenshots opened at original resolution:

    • .tmp/screenshots/issue-106/bundles-list-archived-excluded-1280.png
    • .tmp/screenshots/issue-106/bundle-detail-archived-excluded-1280.png
    • .tmp/screenshots/issue-106/dashboard-archived-excluded-1280.png
    • .tmp/screenshots/issue-106-retest/archived-shared-link-detail-desktop.png

    The core replacement screenshots are clean and readable with no 404, error page, clipping, or overlap. The archived-only shared-link capture visibly shows the empty Campaign link as an active highlighted gap even though Archived is the only task section.

    Acceptance assessment:

    1. Fresh today-anchored template is healthy — PASS.
    2. Genuine active late tasks remain overdue — PASS.
    3. Terminal/cross-surface risk consistency — FAIL because archived history still raises Missing links at bundle level.
    4. Rich list-card fields and shared risk summary — PASS for the specified fields.
    5. Healthy new list/header presentation — PASS.
    6. No persisted model/export change — PASS; export/restore gate is not activated.

    Please return to SWE for the shared-link terminal-state fix, add the missing runtime regression, freeze a new diff hash, and send it back for focused Tester verification.

  6. alexeygrigorev commented on Jul 30, 2026

    @alexeygrigorev
    MemberAuthor

    Software Engineer shared-link fix handoff

    Addressed the second Tester finding from #106 (comment).

    Fix

    The bundle-link missing/coverage path now applies the shared terminal-state rule:

    • Archived requirements are removed from operational shared-link evaluation.
    • An empty link required only by archived history is covered: Missing links 0 and no empty-risk highlight.
    • Any active requiring task keeps the empty link missing.
    • Mixed active + archived requirements remain missing because the active requirement is still live.
    • Completed requirements retain the existing explicit skip-closure behavior; the pre-existing proof/skip browser scenario remains green.
    • Empty bundle-link slots with no requiring tasks retain their existing behavior.

    No model, persistence, export, migration, or infrastructure change was introduced. The tracked diff remains limited to the same seven #106 files, with no commit or push.

    Replacement frozen uncommitted diff SHA-256: f913639912625e2716d882e0862902ae47fcfc0493bb6b795f15b7aae57d2c74

    Base HEAD: 98fdc1fc9de41b463179392a41f393cee245288a

    Deterministic regression

    The archived-task runtime scenario now exercises all three shared-link cases:

    1. Archived-only Campaign requirement: Missing links 0; Campaign row is not highlighted.
    2. Active-only Active control requirement: Missing links 1; only Active control is highlighted.
    3. Mixed active + archived Campaign requirement plus Active control: Missing links 2; both active requirements are highlighted.

    The same scenario continues to prove archived exclusion from Next due, Overdue, Waiting, Scheduled, Missing files/evidence, At risk, dashboard rows, and task controls while genuine active overdue behavior remains.

    Verification

    • JavaScript syntax and git diff --check — PASS.
    • Focused unit: NODE_ENV=test SKIP_AUTH=true node --import tsx --test tests/home-dashboard.test.ts tests/bundle-detail.test.ts — PASS, 101/101.
    • Updated archived/shared-link E2E — PASS, 1/1.
    • Focused UX: freshly-started workflows show all-red at t=0 — add scheduled/not-started state + richer bundle cards #106 plus completed proof/skip browser scenario — PASS, 7/7.
    • npm run typecheck — PASS.
    • npm run build — PASS.
    • npm test — PASS, 1,369 tests: 1,368 passed, 1 expected skip, 0 failed.
    • npx playwright test e2e/home-dashboard.spec.js e2e/bundle-detail.spec.js e2e/api-instantiation.spec.js — PASS, 77/77.

    Screenshots inspected

    • .tmp/screenshots/issue-106/bundle-detail-archived-excluded-1280.png — archived-only Campaign is neutral and Missing links is zero.
    • .tmp/screenshots/issue-106/bundle-detail-shared-link-terminal-control-1280.png — active/mixed controls are highlighted and Missing links is two.

    Both were opened at original resolution and contain no clipping, overlap, 404, or error page.

    Ready for focused Tester rerun against this replacement frozen diff.

  7. alexeygrigorev commented on Jul 30, 2026

    @alexeygrigorev
    MemberAuthor

    TEST PASS

    Final independent Tester gate for the third candidate:

    Commands and results:

    • NODE_ENV=test SKIP_AUTH=true node --import tsx --test tests/home-dashboard.test.ts tests/bundle-detail.test.ts — exit 0, 101/101 passed.
    • npx playwright test e2e/home-dashboard.spec.js e2e/bundle-detail.spec.js e2e/api-instantiation.spec.js --grep "(#105|#106|shows missing proof controls and completes after operator enters proof or skip status)" — exit 0, 10/10 passed.
    • npm run typecheck — exit 0.
    • npm run build — exit 0.
    • node --check for changed app.js and all three changed browser specs — exit 0.
    • git diff --check 98fdc1fc9de41b463179392a41f393cee245288a — exit 0.

    Decisive regressions:

    1. Archived terminal state — PASS. The runtime fixture keeps one archived historical task beside one genuine active overdue task. Archived work is absent from dashboard queues; excluded from list/detail Next due, Overdue, Waiting, Scheduled, Missing files/evidence, and At risk; rendered only under the terminal Archived detail section; and exposes no live proof, file, follow-up, waiting, completion, or editable checkbox controls. The active overdue task remains the sole risk-bearing work.
    2. Shared links — PASS. Archived-only Campaign requirement renders Missing links 0 and no risk highlight. Active-only requirement renders Missing links 1. Mixed active+archived Campaign plus active control renders Missing links 2; both live requirements remain highlighted. The pre-existing completed-task explicit skip-closure scenario also passed, so terminal filtering did not regress done+skip coverage.
    3. Original behavior — PASS. Today-anchored template offsets remain Scheduled; current work remains Today; genuinely overdue ad-hoc, recurring, activated/waiting, and provenance-fallback tasks remain Overdue; impossible task dates and invalid bundle creation dates never invent Scheduled; seeded Newsletter t=0 is healthy; and the UX: dashboard IA — lead with Today / Overdue / Follow-ups due / At-risk, demote intake counters #105 four-section order/empty states/due-today routing remain intact.
    4. Rich summaries — PASS. Bundles list, dashboard bundle card, detail context, and task pills agree on the shared risk state and show the required stage, next due, overdue, waiting, scheduled, and progress values.
    5. Persistence boundary — PASS. No stored field, schema, migration, infrastructure, or portable export shape changed, so the conditional export/restore gate is not activated.

    Fresh screenshots regenerated by this run and opened at original resolution:

    • .tmp/screenshots/issue-106/bundles-list-rich-card-1280.png
    • .tmp/screenshots/issue-106/bundle-detail-healthy-header-1280.png
    • .tmp/screenshots/issue-106/dashboard-fresh-workflow-1440.png
    • .tmp/screenshots/issue-106/dashboard-newsletter-t0-1440.png
    • .tmp/screenshots/issue-106/bundles-list-archived-excluded-1280.png
    • .tmp/screenshots/issue-106/bundle-detail-archived-excluded-1280.png
    • .tmp/screenshots/issue-106/bundle-detail-shared-link-terminal-control-1280.png
    • .tmp/screenshots/issue-106/dashboard-archived-excluded-1280.png

    They show the required states with no 404/error page, clipping, overlap, unreadable content, or missing state.

    The SWE-reported full unit result (1,369 total: 1,368 passed, 1 expected skip) and three-spec browser result (77/77) are consistent with this independent focused gate; unrelated full suites were not rerun per the focused final-review assignment.

    All six issue acceptance criteria are technically verified. Ready for Product Manager acceptance.

  8. alexeygrigorev commented on Jul 30, 2026

    @alexeygrigorev
    MemberAuthor

    PM ACCEPTED

    Accepted candidate:

    • Base HEAD: 98fdc1fc9de41b463179392a41f393cee245288a
    • Frozen tracked diff SHA-256: f913639912625e2716d882e0862902ae47fcfc0493bb6b795f15b7aae57d2c74
    • Scope: exactly the seven declared frontend/test files; no PM edits, commit, or push.

    User-perspective acceptance:

    1. Healthy new workflow — PASS. A today-anchored template reads as scheduled/not-started rather than all-red. The Bundles card, dashboard card/queue, detail metrics, and task pills show Overdue 0, a clear current next due, and the retroactive template offset as Scheduled. The seeded Newsletter t=0 view shows nine Scheduled tasks, no overdue queue, and only the genuinely due-today invoice evidence requirement.
    2. Genuine overdue preservation — PASS. Active ad-hoc, recurring, provenance-fallback, malformed-date fallback, and activated/waiting work remains Overdue. The scheduled treatment is limited to valid untouched template todo tasks dated before valid bundle creation metadata; it is not blanket risk suppression.
    3. Cross-surface consistency — PASS. The shared bundleRiskSummary, dashboard grouping/card, Bundles list, detail context, and detail task pills agree on scheduled, overdue, waiting, missing-evidence, next-due, and at-risk semantics.
    4. Rich bundle cards — PASS. Bundles list cards show stage, next due, overdue, waiting, and progress, using the shared risk helper rather than duplicating classification logic.
    5. Archived terminal behavior — PASS. Archived history is separated under Archived, excluded from dashboard queues and all live risk/next-due/evidence metrics, has a disabled checkbox, and exposes no proof, file, follow-up, waiting, or completion controls. Genuine active overdue work beside it remains the only risk-bearing work.
    6. Shared-link risk controls — PASS. Archived-only requirements are neutral (Missing links 0); active-only and mixed active+archived requirements remain highlighted as live gaps; completed explicit skip-closure coverage remains intact.
    7. Persistence boundary — PASS. No stored field, data model, schema, migration, infrastructure, or portable export shape changed, so the conditional export/restore gate is not activated.
    8. Presentation — PASS. I inspected all available UX: freshly-started workflows show all-red at t=0 — add scheduled/not-started state + richer bundle cards #106 screenshots at original resolution, including healthy list/detail/dashboard, seeded Newsletter, archived exclusion, shared-link controls, and the mobile detail capture. The final views have no 404/error state, clipping, overlap, unreadable content, or missing operator state. The summary pills wrap cleanly, detail metrics remain scannable, and the mobile card/grid presentation remains usable. The final candidate only changes terminal shared-link logic after that mobile capture; it does not change layout/CSS.

    The independent final Tester gate is TEST PASS at #106 (comment): focused unit 101/101, focused Playwright 10/10, typecheck/build/syntax/diff checks all exit 0, with the full SWE results also green (1,368 passed + 1 expected skip; 77/77 three-spec browser tests). Dependency #105 is closed and its accepted implementation is present in the base ancestry.

    Shipping instruction: return this unchanged frozen candidate to the Software Engineer to commit with Closes #106; then the orchestrator should merge it locally to main, push main, and launch On-Call monitoring per _docs/PROCESS.md.

  9. alexeygrigorev commented on Jul 30, 2026

    @alexeygrigorev
    MemberAuthor

    On-Call report — main 4f10a5b

    Code/test status: PASS. Production deployment: BLOCKED by the known unapplied live OIDC-role policy.

    Push and closure

    Workflow evidence

    Deployment classification and production boundary

    • Deploy job 90833807176 configured OIDC credentials and built the deploy-side SAM artifact successfully.
    • CloudFormation was then denied by the live dataops-github-actions-deploy role:
      • sqs:CreateQueue for ConversationalExecutionFailureQueue;
      • sqs:CreateQueue for SponsorCommunicationFailureQueue;
      • ses:CreateConfigurationSet for SponsorSesConfigurationSet.
    • SponsorCommunicationPrivateArchiveKey creation and the sponsor CRM table update were cancelled as consequences of rollback; neither reported an independent application defect.
    • The stack reached terminal UPDATE_ROLLBACK_COMPLETE. Runtime seeding and deployed-origin smoke were skipped.

    This exactly reproduces the known #124/#129 credentialed-operator boundary and is not a #106 code, test, SAM, or CI regression. Commit 4f10a5b did not reach production; CloudFormation restored the prior stack state. The accepted combined role-policy source remains DataTalksClub/aws-infra origin/main 2a1b95f, but it must be applied to the named-IAM stack by a credentialed operator before a fresh normal main deployment can verify production. No manual app deployment or AWS mutation was performed by On-Call.

    Recommended next step: keep #106 closed as shipped/test-verified, apply and verify the accepted #124/#129/#130 deploy-role stack through the existing operator handoff, then rerun fresh current main CI/CD and production smoke.

    ON-CALL DONE: repository gates green; production blocked at known live IAM apply boundary

  10. added a commit that references this issue on Aug 14, 2026
    c735ef7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Nice to havebackendBackend/APIenhancementNew or improved functionalityfrontendFrontend UI

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions