RuleStack

Configs

Stacks

Compare

Diff

RuleStack

Configs

Stacks

Compare

Diff

Read API

RuleStack

Configs

Stacks

Compare

Diff

Read API

Configs/Cursor rules/arturogarrido/claudinho

Cursor rule

.cursor/rules/surface-parity.mdc

CLI, MCP, and share must pass the same format opts (tz, locale, flags)

Cursor rules

Quality

68/100

Scores the file, not the repository.

Length

602 words

4 headings · 1 code blocks

Repository

27

— · pushed 0 days ago

Last changed

2 days ago

First indexed 2 days ago.
arturogarrido/claudinho/.cursor/rules/surface-parity.mdcRawGitHub
1---
2description: CLI, MCP, and share must pass the same format opts (tz, locale, flags)
3globs: packages/{cli,mcp,core}/**/*
4alwaysApply: false
5---
6 
7# Surface parity (CLI / MCP / share)
8 
9Any user-visible formatter change must land on **all three surfaces** before merge:
10 
11| Surface | Verify |
12|---------|--------|
13| CLI | `packages/cli` command + `packages/cli/test/` |
14| MCP | `toolGet*` in `packages/mcp/src/tools.ts` + `packages/mcp/test/tools.test.ts` |
15| Share | `formatShare*` + `packages/mcp/test/share.test.ts` |
16 
17`scripts/release-qa.sh` exercises CLI + share rendering across locales and timezones; MCP arg threading is **not** rendered there — guard it with unit tests.
18 
19## Knockout surfaces live-resolve — never read the skeleton (the #1 recurring bug)
20 
21The bundled schedule's knockout slots are **resultless placeholders** (codes like `2A`/`2B`, flag `🏳️`). So a team-facing surface that reads the static bundle is **silently** blind to a confirmed knockout tie — no crash, no wrong data, just a stale placeholder. **Knockout live-resolve regressions** shipped repeatedly in different surfaces (root cause: skeleton reads, cache gaps, or both):
22 
23- v0.8.2 — R32 pre-draw seeds rendered static, didn't live-resolve.
24- v0.8.6 — bracket third-place slots never read the merged live `match.home/away`.
25- v0.8.7 — `next` / `share next` / MCP next-fixture resolvers read only the static bundle.
26- v0.8.8 — statusline next-match countdown read the static bundle (`🏳️ vs 🏳️` / `⚽ —` in knockouts).
27- v0.8.9 — empty fixtures cache stamped the full 15min TTL at phase boundaries; stale-cache `live · syncing…` still read the skeleton.
28 
29**Rule:** every team-facing surface must reach the live overlay (`getBracket` / `getNextFixtureForTeam` — the same `fetchWindow` the bracket uses), fail closed on outage, and attribute the provider only when the overlay served the chosen fixture. **Exception — statusline:** hot path cannot fetch; the cold-path refresher calls `getKnockoutFixtures` and caches to `CacheState.fixtures`; `renderPrompt` merges that slice over the bundle (countdown **and** `live · syncing…`), never leaking 🏳️. **Exception — MCP `fixtures://{date}` resource:** deliberately static ("Static fixture list"; a resource URI carries no tz and gets no live overlay) — do not "fix" it to live-resolve without a maintainer decision; agents use `get_today`/`get_bracket` for resolved pairings.
30 
31| Surface | Entry point | Must |
32|---------|-------------|------|
33| CLI `bracket` / `next` | `cmdBracket` / `cmdNext` | call `getBracket` / `getNextFixtureForTeam` |
34| CLI `share bracket` / `share next` | `cmdShare` | same |
35| MCP `get_bracket` / `get_next_fixture` | `toolGetBracket` / `toolGetNextFixture` | same |
36| MCP `get_share_snippet{bracket,next}` | `toolGetShareSnippet` | same |
37| **statusline** | `renderPrompt` + `runRefresh` | hot path, NO network — indirect: refresher caches `getKnockoutFixtures` → `CacheState.fixtures`; `renderPrompt` merges them, **failing closed to `⚽ —`** when the cache lacks the pairing; unresolved placeholders dropped in syncing (never 🏳️). Empty successful fetch uses a **short TTL** (~60s); provider errors keep prior cache. **`cmdPrompt` and `cmdHook`** both spawn fixtures refresh in knockout phase. |
38 
39**Executable guard:** `packages/{cli,mcp}/test/knockout-surface-coverage.test.ts` pins one fake resolved tie (Mexico vs Ecuador) and asserts every surface renders the real nations, not `🏳️` (statusline from a seeded cache). **`statusline.test.ts` / `refresh.test.ts`** cover syncing + empty-cache TTL. **Adding a team-facing surface? Add it to that test and this table.**
40 
41## Format opts invariant
42 
43If a core formatter accepts `tz`, `locale`, `flags`, or `date`, **every wrapper** passes them from `CliConfig` / `CommonOpts`.
44 
45```typescript
46// ❌ BAD — locale only; tz silently drops to server local
47formatBracketList(view, { footer: false, locale: args.lang });
48 
49// ✅ GOOD
50formatBracketList(view, { footer: false, locale: args.lang, tz: args.tz });
51// or reuse fmtOpts(args) where shapes align
52```
53 
54## Regression tests
55 
56When adding a format option (e.g. `date: true` on `formatKickoff`):
57 
58- Add a **core** unit test for the option.
59- Add an **MCP tool test** proving `tz` changes output (e.g. UTC vs `America/Mexico_City` on a cross-midnight kickoff).
60- Update share tests if `formatShareBracket` / compact lines are affected.
61 

Sections

  • Surface parity (CLI / MCP / share)
  • Knockout surfaces live-resolve — never read the skeleton (the #1 recurring bug)
  • Format opts invariant
  • Regression tests

What it covers

lint-formattesting-strategyperformancedo-not

Stack — with the evidence

typescript

(1.00)

javascript

(1.00)

node

(1.00)

biome

(1.00)

cli-tool

(0.90)

vitest

(0.70)

monorepo

(0.60)

pnpm

(0.60)

github-actions

(0.60)

Glob targeting

  • packages/{cli
  • mcp
  • core}/**/*

Format

Cursor rules

The most expressive format here. Many small .mdc files, each with frontmatter declaring when it should load, so a rule about migrations only enters context when a migration is open. Costs the most to maintain and only one editor reads it.

What the corpus says about it

Repository

Owner
arturogarrido
Language
—
License
—
Archived
no

All configs in this repo

Also in arturogarrido/claudinho

Diff this repo’s formats

One 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?

The other instruction files in this repository
RepositoryFormatStackCoversScoreChanged
arturogarrido/claudinho.cursor/rules/bundle-bracket-pr.mdc · 27Cursor rulestypescriptjavascript+7buildtesttesting-strategygit+179/1002 days ago
arturogarrido/claudinho.cursor/rules/change-discipline.mdc · 27Cursor rulestypescriptjavascript+7no sections30/100yesterday
arturogarrido/claudinho.cursor/rules/release-discipline.mdc · 27Cursor rulestypescriptjavascript+7lint-formatgitperformancedeployment+163/1002 days ago
arturogarrido/claudinho.cursor/rules/trust-boundary.mdc · 27Cursor rulestypescriptjavascript+7do-not58/100yesterday
arturogarrido/claudinhoAGENTS.md · 27AGENTS.mdtypescriptjavascript+7setuptestlint-formatstyle+884/100yesterday
arturogarrido/claudinhoCLAUDE.md · 27CLAUDE.mdtypescriptjavascript+7lint-formatperformanceagent-behaviour72/1002 days ago
Diff against .cursor/rules/bundle-bracket-pr.mdc Diff against .cursor/rules/change-discipline.mdc Diff against .cursor/rules/release-discipline.mdc Diff against .cursor/rules/trust-boundary.mdc Diff against AGENTS.md Diff against CLAUDE.md

Similar configs

Same format, overlapping stack, ranked by quality.

Same format, overlapping stack, ranked by quality
RepositoryFormatStackCoversScoreChanged
hiromaily/go-crypto-wallet.cursor/rules/typescript.mdc · 126Cursor rulesgobun+5setupbuildtestlint-format+6100/1003 days ago
TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 45Cursor rulestypescriptpytest+15testlint-formatstylearch+5100/1003 days ago
markstev/mark-starter.cursor/rules/frontend.mdc · 0Cursor rulestypescriptturborepo+14setuptestlint-formatstyle+699/1003 days ago
Allymahmoud/case-intake-platform.cursor/rules/frontend.mdc · 0Cursor rulestypescriptturborepo+13setuptestlint-formatstyle+799/1003 days ago
dodgecfr/combatfilms-webapp.cursor/rules/frontend.mdc · 0Cursor rulestypescriptturborepo+15setuptestlint-formatstyle+799/1003 days ago
deifos/clipmira-subtitles.cursor/rules/frontend.mdc · 1Cursor rulestypescriptnextjs+5setuptestlint-formatstyle+799/1003 days ago
TechSquidTV/Hermes.cursor/rules/20-hermes-api-tests.mdc · 45Cursor rulestypescriptpytest+15teststyletesting-strategysecurity+397/1003 days ago
langflow-ai/langflow.cursor/rules/docs_development.mdc · 153kCursor rulespythonnode+16setupbuildtestlint-format+797/1003 days ago
RuleStack

Built by

Kynth Studio

Directory

Configs
Stacks
Compare formats
Diff two configs
Best AGENTS.md examples

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

RuleStack

RuleStack

Built by

Kynth Studio

Directory

Configs
Stacks
Compare formats
Diff two configs
Best AGENTS.md examples

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

RuleStack

RuleStack

Built by

Kynth Studio

Directory

Configs
Stacks
Compare formats
Diff two configs
Best AGENTS.md examples

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

RuleStack