-
Notifications
You must be signed in to change notification settings - Fork 0
docs: refresh PM report for final submission state #183
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| @@ -1,8 +1,8 @@ | ||||||||||
| # Flair2 — Project Management Report | ||||||||||
|
|
||||||||||
| **Team:** Sam Wu (@0b00101111) · Jess Zhang (@tyrahappy) | ||||||||||
| **Duration:** 2026-03-22 → 2026-04-18 (~4 weeks) | ||||||||||
| **Scope:** 262 commits · 112 merged PRs · 2 deployed services on AWS | ||||||||||
| **Duration:** 2026-03-22 → 2026-04-20 (~4.5 weeks) | ||||||||||
| **Scope:** 292 commits · 127 merged PRs · 189 tests · 2 deployed services on AWS | ||||||||||
|
|
||||||||||
| --- | ||||||||||
|
|
||||||||||
|
|
@@ -15,9 +15,9 @@ We started from a V1 hackathon prototype (`gemini-social-asset`) and rewrote it | |||||||||
| ─────────────────────────────────────────────────────────────────────── | ||||||||||
| Monolithic main.py → modular (api/pipeline/workers) → ECS Fargate | ||||||||||
| In-memory state → Redis + Celery coordination → ElastiCache | ||||||||||
| Sequential pipeline → MapReduce fan-out/fan-in → 20 concurrent | ||||||||||
| Gemini only → pluggable provider registry → Kimi live | ||||||||||
| No tests / CI → 111 unit + 5 integration + M5/M6 → GitHub Actions | ||||||||||
| Sequential pipeline → MapReduce fan-out/fan-in → cap=29 concurrent | ||||||||||
| Gemini only → pluggable provider registry → Kimi (Anthropic Messages) | ||||||||||
| No tests / CI → 157 unit + 32 skipped + M5/M6 → GitHub Actions | ||||||||||
| ``` | ||||||||||
|
|
||||||||||
| ## Work Breakdown (Parallel Tracks) | ||||||||||
|
|
@@ -29,9 +29,10 @@ We started from a V1 hackathon prototype (`gemini-social-asset`) and rewrote it | |||||||||
| | Apr 4–8 | **M4** — SSE pipeline visualizer, voting animation | **M3** — SSE manager, checkpoints, multi-user validation | Contract #71 §2 — SSE events | | ||||||||||
| | Apr 8–11 | **M4** — results page, polish | **M3-5** — integration tests, deploy workflow | First full E2E on AWS | | ||||||||||
| | Apr 11–15 | Experiments helper, design-language port | **M5** — M5-1/2/3 backpressure, recovery, cache experiments | Both: M5-4 Locust, M6 ElastiCache | | ||||||||||
| | Apr 15–18 | S1 grid viz, S4 vote matrix, observability | Deploy hardening, Terraform state import, destroy workflow | Final polish | | ||||||||||
| | Apr 15–18 | S1 grid viz, S4 vote matrix, observability | Deploy hardening, Terraform state import, destroy workflow | First E2E with full viz + resilience | | ||||||||||
| | Apr 18–20 | Business-case doc, deck iterations, Campaign → Script rename across deck/frontend/backend, lessons-series refresh | M5-distributed-patterns experiments (fan-out, stragglers, idempotency), experiment overview, PDF export, M5-4 rerun | Final submission package | | ||||||||||
|
|
||||||||||
| **PR split:** Sam 69 (62%), Jess 43 (38%). Every PR reviewed by the other. | ||||||||||
| **PR split:** Sam 77 (61%), Jess 50 (39%). Every PR reviewed by the other. | ||||||||||
|
|
||||||||||
| ## Problems Encountered & How We Broke Them Down | ||||||||||
|
|
||||||||||
|
|
@@ -47,17 +48,23 @@ We started from a V1 hackathon prototype (`gemini-social-asset`) and rewrote it | |||||||||
| | 8 | **One bad video killed whole S1 run** | Sparse TikTok transcripts hit schema validation | Skip-and-continue (#156): mark video skipped, let S2 aggregate the rest | | ||||||||||
| | 9 | **Stragglers (99/100) hung pipeline** because of long retry budget | UI showed "Pipeline appears stalled" at 99/100 | 95% completion threshold with SETNX-guarded transition (#165) | | ||||||||||
| | 10 | **S3 client-side routes 404'd** after deploy — "Start Pipeline" bounced to home page | User-reported | S3 error doc only serves ROOT index.html; switched path-based routes to query params (#134) | | ||||||||||
| | 11 | **Straggler-experiment chart left its concurrency assumption implicit** — raw 94.8% savings number looked misleadingly strong | Team-review of the deck | Kept the result but added explicit best/worst-case framing; noted cap=29 reality is closer to 80–85% | | ||||||||||
| | 12 | **"Campaign Studio" branding didn't match the artifact** — the tool generates ten short-form video scripts, not a marketing campaign | Deck rehearsal with Sam | Renamed across frontend (8 surfaces), deck, docs, backend OpenAPI title, and 6 lessons (#180, #182) | | ||||||||||
| | 13 | **Lessons series narrated V1-vs-V2 history** — distracting from the current architecture | Review for final submission | Rewrote lessons 01, 02, 14, 15, 23 to explain current state only (#182) | | ||||||||||
|
|
||||||||||
| ## Process Discipline That Held | ||||||||||
|
|
||||||||||
| - **Interface contract (issue #71) upfront** — documented every Redis key, every SSE event, every API endpoint. Let Sam and Jess work independently for weeks and integrate cleanly. | ||||||||||
| - **One PR, one fix** — 112 PRs averaged 4 files each. Every PR title used conventional prefixes (`feat:`, `fix:`, `chore:`, `docs:`) for grep-friendly history. | ||||||||||
| - **Hard branch protection on `main`** — Sam and Jess set a GitHub ruleset that *physically blocks* direct pushes and requires ≥1 approving review from the other team member before merge (admin override disabled). This turned "we should review each other's work" from a norm into an enforced gate. Effect: every one of the 112 merged PRs has at least one reviewer's signature; neither of us can ship without the other reading the diff. On multiple occasions Jess's review caught issues Sam missed (and vice-versa) before they hit production. | ||||||||||
|
Comment on lines
58
to
59
|
||||||||||
| - **One PR, one fix** — 112 PRs averaged 4 files each. Every PR title used conventional prefixes (`feat:`, `fix:`, `chore:`, `docs:`) for grep-friendly history. | |
| - **Hard branch protection on `main`** — Sam and Jess set a GitHub ruleset that *physically blocks* direct pushes and requires ≥1 approving review from the other team member before merge (admin override disabled). This turned "we should review each other's work" from a norm into an enforced gate. Effect: every one of the 112 merged PRs has at least one reviewer's signature; neither of us can ship without the other reading the diff. On multiple occasions Jess's review caught issues Sam missed (and vice-versa) before they hit production. | |
| - **One PR, one fix** — 127 PRs averaged 4 files each. Every PR title used conventional prefixes (`feat:`, `fix:`, `chore:`, `docs:`) for grep-friendly history. | |
| - **Hard branch protection on `main`** — Sam and Jess set a GitHub ruleset that *physically blocks* direct pushes and requires ≥1 approving review from the other team member before merge (admin override disabled). This turned "we should review each other's work" from a norm into an enforced gate. Effect: every one of the 127 merged PRs has at least one reviewer's signature; neither of us can ship without the other reading the diff. On multiple occasions Jess's review caught issues Sam missed (and vice-versa) before they hit production. |
Copilot
AI
Apr 20, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The parenthetical says the 32 skipped integration tests are "gated on AWS creds", but the skipped experiment/integration modules are actually gated on environment variables like PIPELINE_BASE_URL / ELASTICACHE_URL being set (see backend/tests/experiments/test_e2e_pipeline.py and test_elasticache_integration.py). Suggest updating the wording to match the actual skip conditions.
| - **Tests before features** — 105 unit tests existed before the first real pipeline run. Grew to 157 passing (+ 32 skipped integration tests gated on AWS creds). Caught the `RateLimitError` retry countdown bug pre-deploy. | |
| - **Tests before features** — 105 unit tests existed before the first real pipeline run. Grew to 157 passing (+ 32 skipped integration tests gated on integration env vars such as `PIPELINE_BASE_URL` / `ELASTICACHE_URL`). Caught the `RateLimitError` retry countdown bug pre-deploy. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The duration math looks off: 2026-03-22 → 2026-04-20 is ~29 days (~4.1 weeks), not ~4.5 weeks. Suggest adjusting the approximation (or dropping it) so the header stays internally consistent.