Changelog

What we shipped.

Page 14 of 15 — completed tasks for 2026-10-29.

Tasks logged

991+

across all rounds

Since

Jan 2026

founding month

Showing

2026-10-29

page 14 of 15

2026-10-29

Completed tasks for this batch, with the status, priority, difficulty, time taken, value score and what changed.
#StatusPriorityDifficultyTimeValueCompleted Task
2649doneP1high90mhigh#2649 fix(header): the header panels now run on the shared state machine. `src/lib/header-panel-toggle.ts` shipped with the rules, but `header.astro` had reverted to an inline branch that asked whether a click came from a pointer - which is exactly what made a keyboard activation on a closed panel a no-op. The header now imports `resolvePanelToggle`, `resolveFocusOpenSource`, `isOutsidePanel`, `isOutsideHoverZone`, `shouldCloseOnFocusLeave`, `isPanelOpen` and `resolveMegaMenuArrow`, and records why each panel is open in a `panelOpenSource` WeakMap, so a click that lands on a hover-opened panel leaves it open and the NEXT activation closes it. Focus opens a panel, focus-out closes it, Escape closes and returns the focus through one `closePanelAndRefocus` path, and Escape-closed panels are marked so the focus event that follows cannot reopen them. The mega menu takes the arrow keys through the shared rule, and the outside-click close resolves every panel through one `panelForTrigger` lookup. The panels dropped `aria-hidden` entirely - `inert` is the only state carrier, and the CSS now keys on `[:not([inert])]` - the dead `absolute -top-2` pointer bridge is gone, and the drawer's focusable selector was rebuilt from the broken `join(':is(, ')` form that Chrome parsed but never matched. Verified in the browser: focus opens the panel, ArrowDown enters the menu, ArrowRight walks the column, Escape closes it and returns the focus to the trigger, and a pointer click opens it with `aria-expanded` tracking. `check:header-a11y` went from 1/7 checks failing to 7/7, and the five header suites plus `section-aria-labelledby` now pass - 43 assertions.
2677doneP2easy5mmed#2677 decision(brand): the AI coding course ships as a WebGrow24 programme. The owner closed the brand question on 2026-10-29 and put SkilUp24, the 24Squad education venture, out of scope for now. Nothing in the build changes: the printed brochure was already WebGrow24-branded, `src/data/courses.ts` keeps WebGrow24 as the provider, the contract counterparty stays WebGrow24 LLP, and `/ai-coding-course` stays on webgrow24.com. The row was dropped from `docs/blocked-owner-actions.md`, and `docs/ai-coding-course-page-plan.md` section 8 now records the decision rather than the question. Seats were settled in the same conversation at ten per cohort, which is noted on `courses.ts` and in the register under #2679, whose start-date half is still open.
2682doneP2easy10mhigh#2682 decision(outcomes): the page publishes a starting salary band. The owner confirmed on 2026-10-29 that a graduate can expect a job at a minimum of ₹15,000 a month after the two years. It is published as the market floor for junior full stack roles in Gujarat, not as a job guarantee, because there are no graduates yet and a placement promise would be unsupportable. `src/data/courses.ts` gained `startingSalaryFloor` (₹15,000, formatted through `formatInr()` so no price literal enters the source), a new FAQ answer for "What salary can I expect after the programme?", and a rewritten "Do you guarantee a job?" that names the floor and keeps the no-guarantee position. `src/pages/ai-coding-course.astro` gained a highlighted band in the outcomes section, a matching TL;DR takeaway and a WhatsApp CTA on that band. The row was dropped from `docs/blocked-owner-actions.md`.
2678doneP2easy10mhigh#2678 decision(programme): the second year is a paid internship, and the stipend is paid only for work actually done. The owner settled the basis on 2026-10-29: months 1-12 are training at 6,000 a month (72,000 total), months 13-24 are an internship paying 6,000 a month (72,000 back), and the two cancel out only if the intern completes the work. It is not a fee refund and not a salary. `src/data/courses.ts` and `src/pages/ai-coding-course.astro` were rewritten from supervised client delivery to paid internship throughout, and the conditions block now reads "The stipend is paid for internship work. No work, no stipend." The FAQ answers for how long, what it costs, whether it is free and how the stipend works now carry the completion condition instead of promising a blanket reversal. The row was dropped from `docs/blocked-owner-actions.md`; the written agreement is still owed under todo #2674.

This log reflects completed tasks only. Pending work is tracked in todo.md at the root of this repository.