Cursor rule
.cursor/rules/bundle-bracket-pr.mdcBundle, bracket, and live-data invariants before opening a PR
Cursor rules
Quality
79/100
Scores the file, not the repository.Length
504 words
7 headings · 0 code blocksRepository
27
— · pushed 0 days agoLast changed
2 days ago
First indexed 2 days ago.1234567# Bundle & bracket PR readiness89Before marking a data-heavy feature merge-ready, run **`pnpm -r build && pnpm -r typecheck && pnpm -r test && pnpm lint`** (mirror CI — build first because cli/mcp import `@claudinho/core` from dist; `build` alone does not typecheck).1011## Bundled schedule invariant1213`schedule.*.json` is a **resultless skeleton**: no scores/status, no confirmed nations in knockout slots.1415- `sanitizeBundledFixture` must restore topology placeholders for KO home/away.16- `gen:schedule` must **fail** if any knockout fixture carries a real nation flag.17- Test degraded `getBracket()` on the bundle: seed/winner slots stay `tbd`, never `confirmed`.1819## Knockout resolution2021- Advance winners from **score OR `winnerCode`** (ESPN `competitor.winner` for penalties).22- Always test FT draw + `winnerCode` — routine in knockouts.23- Group slots project from live standings once **≥1 match played** (`hasGroupStarted`); **`confirmed`** when every team has played a full round-robin (`played >= n - 1` for `n` teams); **`(proj.)`** only mid-group. TBD at 0 games or when standings are degraded.2425## Topology indexing2627- Bracket node index must match ESPN winner refs (e.g. "Round of 32 3 Winner"), not kickoff sort order.28- If live post-round data is unavailable, add a **guard test** against bundled `matchId` ↔ index and document the assumption.29- **Spot-check when R32 starts (2026-06-28):** confirm ESPN's "Round of 32 N Winner" refs align with ascending event id.3031## Live hybrid paths3233- When knockout fetch fails but standings succeed: set `source` from standings provider.34- Share/MCP: inner `formatBracketList({ footer: false })`, outer layer adds attribution/notices **once**.35- CLI/MCP wrappers: option types must match the formatter (`ShareBracketOptions`, not `ShareSnippetOptions`).36- **Surface parity:** see `.cursor/rules/surface-parity.mdc` — every bracket formatter path passes `tz` + `locale`; statusline knockouts indirect-resolve via cached `getKnockoutFixtures` (hot path fail-closed).3738## Pre-merge QA3940After `pnpm -r build`, run **`pnpm release:qa`** (`scripts/release-qa.sh`). Eyeball every section; tripwires at the end encode the 0.8.x bracket regressions (calendar month, tz threading, share disclaimer).4142## Adversarial tests (add when touching bracket/schedule)4344| Scenario | Assert |45|----------|--------|46| FT level + `winnerCode` | Winner advances |47| `fetchWindow` throws, standings OK | Projected groups + `source` set |48| Bundle-only bracket | No real flags in R32+ slots |49| Group at 0 games played | Slots stay `tbd`, no `(proj.)` |50| Group at 2/3 played, standings live | Leaders show flags + `(proj.)` |51| Group fully played (round-robin complete) | Winner + runner-up `confirmed`, no `(proj.)` |52| `toolGetBracket` `tz: UTC` vs `America/Mexico_City` | Calendar date/time differs on cross-midnight kickoff |53| Knockout kickoffs span >1 week | Output includes month + day (not weekday-only) |54| `formatShareBracket` social + compact | Same date format as CLI list |55| `formatShareBracket` / `toolGetBracket` | Each disclaimer line once |56| Statusline knockout countdown (cached fixtures) | Real nations or `⚽ —`; never `🏳️` |57| Statusline stale cache during live KO | `live · syncing…` without `🏳️`; resolved pairing when cache has it |58| Empty fixtures cache at phase boundary | Re-polls after short TTL (~60s), not 15min |59
Also in arturogarrido/claudinho
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| arturogarrido/claudinho.cursor/rules/change-discipline.mdc · 27 | Cursor rules | no sections | 30/100 | yesterday | |
| arturogarrido/claudinho.cursor/rules/release-discipline.mdc · 27 | Cursor rules | lint-formatgitperformancedeployment+1 | 63/100 | 2 days ago | |
| arturogarrido/claudinho.cursor/rules/surface-parity.mdc · 27 | Cursor rules | lint-formattesting-strategyperformancedo-not | 68/100 | 2 days ago | |
| arturogarrido/claudinho.cursor/rules/trust-boundary.mdc · 27 | Cursor rules | do-not | 58/100 | yesterday | |
| arturogarrido/claudinhoAGENTS.md · 27 | AGENTS.md | setuptestlint-formatstyle+8 | 84/100 | yesterday | |
| arturogarrido/claudinhoCLAUDE.md · 27 | CLAUDE.md | lint-formatperformanceagent-behaviour | 72/100 | 2 days ago |
Similar configs
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| hiromaily/go-crypto-wallet.cursor/rules/typescript.mdc · 126 | Cursor rules | setupbuildtestlint-format+6 | 100/100 | 3 days ago | |
| TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 45 | Cursor rules | testlint-formatstylearch+5 | 100/100 | 3 days ago | |
| markstev/mark-starter.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+6 | 99/100 | 3 days ago | |
| Allymahmoud/case-intake-platform.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 3 days ago | |
| dodgecfr/combatfilms-webapp.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 3 days ago | |
| deifos/clipmira-subtitles.cursor/rules/frontend.mdc · 1 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 3 days ago | |
| TechSquidTV/Hermes.cursor/rules/20-hermes-api-tests.mdc · 45 | Cursor rules | teststyletesting-strategysecurity+3 | 97/100 | 3 days ago | |
| langflow-ai/langflow.cursor/rules/docs_development.mdc · 153k | Cursor rules | setupbuildtestlint-format+7 | 97/100 | 3 days ago |
