Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
02095f9
♻ refactor: Main source files as ES Modules
vict0rsch Jul 20, 2025
7e321da
🏗 build: Use Rollup to bundle modules to `iife`
vict0rsch Jul 20, 2025
df0dc0d
♻ refactor: Use bundled entry points in html files & manifest
vict0rsch Jul 20, 2025
1154222
✨ feat: New function to analyse the contents of `.js` files
vict0rsch Jul 20, 2025
1f01530
🧪 test: Tests as ES Modules too
vict0rsch Jul 20, 2025
7d6fc5b
🏗 build: Gulp uses Rollup
vict0rsch Jul 20, 2025
99a5f32
♻ refactor: Simplify map_functions.py
vict0rsch Jul 20, 2025
f9d933d
♻ refactor: Use `.bundle.js` pattern
vict0rsch Jul 20, 2025
d394409
🐛 fix: Remove legacy assignments to window and module.exports
vict0rsch Jul 20, 2025
36494cc
🐛 fix: Map HTML & Manifest to `.bundle.js`
vict0rsch Jul 20, 2025
ccf28cc
♻ refactor: Remove gulp altogether and replace with Rollup
vict0rsch Jul 31, 2025
840bc79
✨ feat: Debug utility in DEV mode (`PMDebug`)
vict0rsch Jul 31, 2025
a745340
♻ refactor: Use `octokit` natively
vict0rsch Jul 31, 2025
b43ef4f
🐛 fix: Prevent double popup main script run
vict0rsch Jul 31, 2025
caf21f8
✨ feat: Enable debuging on all HTML pages
vict0rsch Aug 1, 2025
167a750
🧪 test: Fix tests module & data paths
vict0rsch Aug 1, 2025
3d127b2
🏗 build: Dev mode debug imports
vict0rsch Aug 1, 2025
c6a95d9
🐛 fix: Fix variable definitions and config url match return types
vict0rsch Aug 1, 2025
a8f711b
🧪 test: Fix test sources truncation & chrome discovery
vict0rsch Aug 1, 2025
77b3e6a
🧪 test: Add test to make sure the extension is loaded
vict0rsch Aug 1, 2025
98e46c2
🐛 fix: Delete all __keys when migrating
vict0rsch Aug 2, 2025
248ec94
♻ refactor: Catch PWC error of discontinued API
vict0rsch Aug 2, 2025
f8dc5d4
🐛 fix: Missing import
vict0rsch Aug 2, 2025
0b5c1f4
🧪 test: Work on sync test
vict0rsch Aug 2, 2025
f91aec8
🏗 build: Dev Bundle
vict0rsch Aug 2, 2025
7ebe90b
🧪 test: First UI tests
vict0rsch Aug 2, 2025
5abdcb0
🐛 fix: Prevent content script exec on non-abs. Arxiv pages
vict0rsch Aug 8, 2025
39b4977
🐛 fix: Disable PWC API Calls
vict0rsch Aug 8, 2025
0b44ea6
✨ feat: Add getPapers debug util
vict0rsch Aug 8, 2025
d126b52
♻ refactor: Rename button to `done-` instead of legacy `cancel`
vict0rsch Aug 8, 2025
717f918
🧪 test: Add Memory Items UI tests
vict0rsch Aug 8, 2025
154c7f0
🐛 fix: Adapt `loadPaperMemoryUtils`
vict0rsch Aug 8, 2025
4e44ee5
♻ refactor: Move `setPreferencesAndReload` to `browser.js`
vict0rsch Aug 8, 2025
44bf71c
♻ refactor: Use directly the util functions (`miniHash`)
vict0rsch Aug 8, 2025
5a576e9
🐛 fix: Placeholder error using `findEl`
vict0rsch Aug 8, 2025
636bebd
🧪 test: v0 popup search
vict0rsch Aug 8, 2025
d050aab
🧪 test: Passing search tests
vict0rsch Aug 11, 2025
232fc4b
🧪 test: Faster tests
vict0rsch Aug 11, 2025
7e22051
♻ refactor: Refactor popup main execution + `getCurrentUserTab`
vict0rsch Oct 17, 2025
4ac950d
🐛 fix: Close window after website url click
vict0rsch Oct 17, 2025
7020e91
🧪 test: Improve existing tests
vict0rsch Oct 17, 2025
f781d67
🧪 test: New test-menu
vict0rsch Oct 17, 2025
841c4ec
🧪 test: New test-popup-paper-ui
vict0rsch Oct 17, 2025
a743dd8
🧪 test: Fix broken test imports & PM utils usage
vict0rsch Oct 17, 2025
df7d483
🐛 fix: Fix indents
vict0rsch Oct 17, 2025
ee1a38f
🏗 build: Dev bundle
vict0rsch Oct 17, 2025
e32e098
Fix ACM paper parsing & Tests in CI (#333)
vict0rsch Oct 18, 2025
565478a
🐛 fix: Improve BioRxiv parsing
vict0rsch Oct 19, 2025
fb2d7a6
🧹 chore: Remove hidenotif warning
vict0rsch Oct 19, 2025
14edd99
🐛 fix: NeurIPS parsing
vict0rsch Oct 19, 2025
003ea1b
🐛 fix: Fix PubMed Central parsing
vict0rsch Oct 19, 2025
33962c4
🐛 fix: Fix PMLR parsing
vict0rsch Oct 19, 2025
9642320
🐛 fix: More robust PMC parsing
vict0rsch Oct 19, 2025
3c2af70
🧪 test: Set botPrevention for APS
vict0rsch Oct 19, 2025
57dca26
🧪 test: Improve logging for papers ignored
vict0rsch Oct 19, 2025
d9960bb
🐛 fix: Fix ChemRxiv parsing
vict0rsch Oct 20, 2025
7294355
🐛 fix: Fix Frontiers parsing
vict0rsch Oct 20, 2025
6a557c7
🧪 test: Add missing sources test urls
vict0rsch Oct 20, 2025
33a78bd
🧪 test: Test all known sources have at least 1 test url
vict0rsch Oct 20, 2025
d6d30f7
🧪 test: Milestone: all test-storage pass ✨
vict0rsch Oct 20, 2025
39d42f1
🔄 ci: Add test-storage
vict0rsch Oct 20, 2025
6760278
🐛 fix: Fix HAL PDF parsing
vict0rsch Oct 21, 2025
647d95c
✨ feat: Handle multiple possible venues to match
vict0rsch Oct 21, 2025
2a87b57
✨ feat: `tmpBrowser.js` node script to debug interactively
vict0rsch Oct 21, 2025
f8aed8a
🧪 test: Slightly larger (200) `pageTimeout`
vict0rsch Oct 21, 2025
84ec0cd
🔄 ci: Add retries with `nick-fields/retry@v3` action
vict0rsch Oct 21, 2025
6e5fb28
🧪 test: Better test venues parsed
vict0rsch Oct 22, 2025
e987c8c
🐛 fix: Add env variable to control tmpBrowser.js
vict0rsch Oct 23, 2025
0ee68b5
🧪 test: Working local test-storage.js
vict0rsch Oct 23, 2025
11aae65
🏗 build: Dev bundle
vict0rsch Oct 23, 2025
c5fad39
🔄 ci: Log screenshots on failed paper parsings
vict0rsch Oct 23, 2025
ef12603
🔄 ci: Longer test timeout
vict0rsch Oct 23, 2025
cdb0943
🧪 test: botPrevention for Cell journal
vict0rsch Nov 13, 2025
1555384
🧪 test: Fix AIP, OUP in #paperToAbs
vict0rsch Nov 13, 2025
db3cabe
🐛 fix: Ensure bool in isPaper
vict0rsch Nov 13, 2025
2273bf1
🏗 build: Add to_firefox and from_firefoxy Python funcs
vict0rsch Nov 15, 2025
16aca48
🐛 fix: Arxiv CORS -> background
vict0rsch Nov 15, 2025
daded35
♻ refactor: sync Cell data parsing
vict0rsch Nov 15, 2025
a6374a7
🧪 test: WIP fix cell
vict0rsch Nov 15, 2025
70dc506
🧪 test: WIP web-ext run
vict0rsch Nov 15, 2025
274a3b5
🏗 build: Dev bundle
vict0rsch Nov 15, 2025
34b6d38
🏗 build: Update lock files
vict0rsch Nov 16, 2025
a06e9b1
🧹 chore: Improve Firefox dev xp w/ `web-ext`
vict0rsch Nov 16, 2025
883a3d2
🧹 chore: Update feeedback form link
vict0rsch Nov 18, 2025
8160e45
🏗 build: Update to use Firefox Developper Edition
vict0rsch Nov 18, 2025
2cf12de
🧹 chore: Remove todo comment
vict0rsch Nov 18, 2025
1ffb20c
🧹 chore: Remove mentions of gulp
vict0rsch Nov 18, 2025
fe4caf0
🧹 chore: Remove `cellData` check in `makeCellPaper`
vict0rsch Nov 18, 2025
1411074
🧪 test: Interactive debugging script
vict0rsch Nov 18, 2025
bbee5f4
🧪 test: Working `test-utils.js`
vict0rsch Nov 18, 2025
8a5f4f3
🔄 ci: Add dev actions tests
vict0rsch Nov 18, 2025
b7f4cc8
🔄 ci: Fix CI nomenclature
vict0rsch Nov 18, 2025
47448e5
🔄 ci: WIP: debug uv
vict0rsch Nov 19, 2025
8119910
🔄 ci: Fix build CI
vict0rsch Nov 19, 2025
7aeeba8
🏗 build: Add web-ext dev dep
vict0rsch Nov 19, 2025
921b2fc
🔄 ci: typo -> build:ff
vict0rsch Nov 19, 2025
9ce584c
🐛 fix: Don't always take screenshots
vict0rsch Nov 23, 2025
ff48e94
🏗 build: Clean up scripts
vict0rsch Nov 23, 2025
c4347f0
♻ refactor: Update botPreventions
vict0rsch Nov 23, 2025
48908ac
🧪 test: Script to manually test urls with botPrevention
vict0rsch Nov 23, 2025
7cfc322
🧪 test: Include name of scripts in args logs
vict0rsch Nov 23, 2025
ba97e47
🔄 ci: Better tests: use a matrix to parameterize test exec for all files
vict0rsch Nov 23, 2025
ebbe00b
🧪 test: Add meta test to check all test scripts are run
vict0rsch Nov 23, 2025
76c0513
🐛 fix: Missing menu item in config
vict0rsch Nov 23, 2025
3235e0a
🐛 fix: Typo in python call
vict0rsch Nov 23, 2025
7718d88
🐛 fix: Wrongful automatic addition of dark mode in rollup
vict0rsch Nov 23, 2025
b7a0677
📝 docs: Update contributions guidelines
vict0rsch Nov 23, 2025
b1eddfa
🧪 test: Add a test for the menu
vict0rsch Nov 23, 2025
af5d2ac
🧪 test: Add logs to visitPaperPage
vict0rsch Nov 23, 2025
e926b4e
🧪 test: Immediate screenshot
vict0rsch Nov 23, 2025
7609b00
🧹 chore: Clean up visitPaperPage logs
vict0rsch Nov 24, 2025
ad6158d
🐛 fix: Typo in screenshot path
vict0rsch Nov 24, 2025
96f49b7
🔄 ci: Attempt at fixing test-menu on the CI
vict0rsch Nov 24, 2025
bb55773
chore: YAML formatting via prettier
vict0rsch Mar 9, 2026
ecc6d81
test: `dontScreenshot` option in `visitPaperPage`
vict0rsch Mar 9, 2026
008d839
build: bundles
vict0rsch Mar 9, 2026
bd96ecf
ci: add PAT to repo secrets
vict0rsch Mar 9, 2026
0381fd8
feat: migrate build system from Rollup to WXT (#338)
vict0rsch Apr 12, 2026
a64fc31
fix: regenerate lockfile with npm 10 for Node 22 CI compat (#339)
vict0rsch Apr 13, 2026
ff8fb9b
Fix bugs and harden against XSS across the extension (#340)
vict0rsch Apr 13, 2026
47fe49e
ci: enable wxt-based store submissions from GitHub Actions (#342)
vict0rsch Apr 20, 2026
0716de7
chore: prettier
vict0rsch Apr 20, 2026
437a477
test: manual storage test to run in actual browser
vict0rsch Apr 20, 2026
54fbb1f
chore: add prettier format config + npm script
vict0rsch Apr 20, 2026
1dac805
chore: format
vict0rsch Apr 20, 2026
9f1c860
build: update submit script to zip first
vict0rsch Apr 20, 2026
f19e998
feat: prevent abstracts from being stored in bibtex field
vict0rsch Apr 20, 2026
d040edf
fix: manual-open-urls.js url matching
vict0rsch Apr 20, 2026
222ce40
fix: manual-open-urls.js refactor data structure
vict0rsch Apr 21, 2026
1b18d72
refactor: BasePaperSource registry and programmatic source index (#343)
vict0rsch Apr 23, 2026
ebf02e1
refactor: move source-specific parser-helpers
vict0rsch Apr 24, 2026
d90d7ca
Replace Select2 with Tom Select and align assets/tests (#344)
vict0rsch May 29, 2026
b395826
feat: initial agentic infra (#345)
vict0rsch May 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .claude/rules/grill-with-docs-for-new-features.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Use /grill-with-docs For Development

When a user asks to develop this codebase, use the `/grill-with-docs` skill before implementation.

## Required behavior

- Start a grilling session to resolve terminology, scope, and trade-offs.
- Ask one question at a time and wait for user feedback before continuing.
- If a question can be answered from the codebase or docs, check there first.
- Proceed to implementation only after the development intent is clear.
18 changes: 18 additions & 0 deletions .claude/rules/keep-system-architecture-up-to-date.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Keep System Architecture Doc Up To Date

## Policy

`system-architecture.md` is the source of truth for the repository architecture.

## Required behavior

When a task changes the system architecture (components, boundaries, data flow, key abstractions, integrations, or deployment topology), update `system-architecture.md` in the same task.

If no architecture impact exists, explicitly confirm that no update is needed.

## Verification checklist

- Architecture-impacting code changes include corresponding `system-architecture.md` updates.
- New or changed architectural terms are reflected consistently.
- Mermaid diagrams remain accurate when affected.
- No secrets are introduced in documentation.
23 changes: 23 additions & 0 deletions .claude/rules/mirror-providers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Mirror Providers Rule

## Policy

Keep both provider folders aligned:

- skills are mirrored between `.claude/skills/` and `.cursor/skills/`
- rules are mirrored between `.claude/rules/` and `.cursor/rules/`

## Required behavior

When creating, updating, renaming, or deleting a skill or rule in one provider folder, apply the equivalent change to the other provider folder in the same task.

## Allowed differences

Only vendor-required differences are allowed (format or loader specifics). Core guidance and intent must remain equivalent.

## Verification checklist

- Both provider folders contain equivalent skill directories and rule files.
- Names map consistently across providers.
- Referenced local docs/scripts resolve in each provider folder.
- No secrets are introduced.
47 changes: 47 additions & 0 deletions .claude/skills/grill-with-docs/ADR-FORMAT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# ADR Format

ADRs live in `docs/adr/` and use sequential numbering: `0001-slug.md`, `0002-slug.md`, etc.

Create the `docs/adr/` directory lazily — only when the first ADR is needed.

## Template

```md
# {Short title of the decision}

{1-3 sentences: what's the context, what did we decide, and why.}
```

That's it. An ADR can be a single paragraph. The value is in recording *that* a decision was made and *why* — not in filling out sections.

## Optional sections

Only include these when they add genuine value. Most ADRs won't need them.

- **Status** frontmatter (`proposed | accepted | deprecated | superseded by ADR-NNNN`) — useful when decisions are revisited
- **Considered Options** — only when the rejected alternatives are worth remembering
- **Consequences** — only when non-obvious downstream effects need to be called out

## Numbering

Scan `docs/adr/` for the highest existing number and increment by one.

## When to offer an ADR

All three of these must be true:

1. **Hard to reverse** — the cost of changing your mind later is meaningful
2. **Surprising without context** — a future reader will look at the code and wonder "why on earth did they do it this way?"
3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons

If a decision is easy to reverse, skip it — you'll just reverse it. If it's not surprising, nobody will wonder why. If there was no real alternative, there's nothing to record beyond "we did the obvious thing."

### What qualifies

- **Architectural shape.** "We're using a monorepo." "The write model is event-sourced, the read model is projected into Postgres."
- **Integration patterns between contexts.** "Ordering and Billing communicate via domain events, not synchronous HTTP."
- **Technology choices that carry lock-in.** Database, message bus, auth provider, deployment target. Not every library — just the ones that would take a quarter to swap out.
- **Boundary and scope decisions.** "Customer data is owned by the Customer context; other contexts reference it by ID only." The explicit no-s are as valuable as the yes-s.
- **Deliberate deviations from the obvious path.** "We're using manual SQL instead of an ORM because X." Anything where a reasonable reader would assume the opposite. These stop the next engineer from "fixing" something that was deliberate.
- **Constraints not visible in the code.** "We can't use AWS because of compliance requirements." "Response times must be under 200ms because of the partner API contract."
- **Rejected alternatives when the rejection is non-obvious.** If you considered GraphQL and picked REST for subtle reasons, record it — otherwise someone will suggest GraphQL again in six months.
77 changes: 77 additions & 0 deletions .claude/skills/grill-with-docs/CONTEXT-FORMAT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# CONTEXT.md Format

## Structure

```md
# {Context Name}

{One or two sentence description of what this context is and why it exists.}

## Language

**Order**:
{A concise description of the term}
_Avoid_: Purchase, transaction

**Invoice**:
A request for payment sent to a customer after delivery.
_Avoid_: Bill, payment request

**Customer**:
A person or organization that places orders.
_Avoid_: Client, buyer, account

## Relationships

- An **Order** produces one or more **Invoices**
- An **Invoice** belongs to exactly one **Customer**

## Example dialogue

> **Dev:** "When a **Customer** places an **Order**, do we create the **Invoice** immediately?"
> **Domain expert:** "No — an **Invoice** is only generated once a **Fulfillment** is confirmed."

## Flagged ambiguities

- "account" was used to mean both **Customer** and **User** — resolved: these are distinct concepts.
```

## Rules

- **Be opinionated.** When multiple words exist for the same concept, pick the best one and list the others as aliases to avoid.
- **Flag conflicts explicitly.** If a term is used ambiguously, call it out in "Flagged ambiguities" with a clear resolution.
- **Keep definitions tight.** One sentence max. Define what it IS, not what it does.
- **Show relationships.** Use bold term names and express cardinality where obvious.
- **Only include terms specific to this project's context.** General programming concepts (timeouts, error types, utility patterns) don't belong even if the project uses them extensively. Before adding a term, ask: is this a concept unique to this context, or a general programming concept? Only the former belongs.
- **Group terms under subheadings** when natural clusters emerge. If all terms belong to a single cohesive area, a flat list is fine.
- **Write an example dialogue.** A conversation between a dev and a domain expert that demonstrates how the terms interact naturally and clarifies boundaries between related concepts.

## Single vs multi-context repos

**Single context (most repos):** One `CONTEXT.md` at the repo root.

**Multiple contexts:** A `CONTEXT-MAP.md` at the repo root lists the contexts, where they live, and how they relate to each other:

```md
# Context Map

## Contexts

- [Ordering](./src/ordering/CONTEXT.md) — receives and tracks customer orders
- [Billing](./src/billing/CONTEXT.md) — generates invoices and processes payments
- [Fulfillment](./src/fulfillment/CONTEXT.md) — manages warehouse picking and shipping

## Relationships

- **Ordering → Fulfillment**: Ordering emits `OrderPlaced` events; Fulfillment consumes them to start picking
- **Fulfillment → Billing**: Fulfillment emits `ShipmentDispatched` events; Billing consumes them to generate invoices
- **Ordering ↔ Billing**: Shared types for `CustomerId` and `Money`
```

The skill infers which structure applies:

- If `CONTEXT-MAP.md` exists, read it to find contexts
- If only a root `CONTEXT.md` exists, single context
- If neither exists, create a root `CONTEXT.md` lazily when the first term is resolved

When multiple contexts exist, infer which one the current topic relates to. If unclear, ask.
88 changes: 88 additions & 0 deletions .claude/skills/grill-with-docs/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
name: grill-with-docs
description: Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.
---

<what-to-do>

Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.

Ask the questions one at a time, waiting for feedback on each question before continuing.

If a question can be answered by exploring the codebase, explore the codebase instead.

</what-to-do>

<supporting-info>

## Domain awareness

During codebase exploration, also look for existing documentation:

### File structure

Most repos have a single context:

```
/
├── CONTEXT.md
├── docs/
│ └── adr/
│ ├── 0001-event-sourced-orders.md
│ └── 0002-postgres-for-write-model.md
└── src/
```

If a `CONTEXT-MAP.md` exists at the root, the repo has multiple contexts. The map points to where each one lives:

```
/
├── CONTEXT-MAP.md
├── docs/
│ └── adr/ ← system-wide decisions
├── src/
│ ├── ordering/
│ │ ├── CONTEXT.md
│ │ └── docs/adr/ ← context-specific decisions
│ └── billing/
│ ├── CONTEXT.md
│ └── docs/adr/
```

Create files lazily — only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs/adr/` exists, create it when the first ADR is needed.

## During the session

### Challenge against the glossary

When the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?"

### Sharpen fuzzy language

When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account' — do you mean the Customer or the User? Those are different things."

### Discuss concrete scenarios

When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts.

### Cross-reference with code

When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?"

### Update CONTEXT.md inline

When a term is resolved, update `CONTEXT.md` right there. Don't batch these up — capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md).

`CONTEXT.md` should be totally devoid of implementation details. Do not treat `CONTEXT.md` as a spec, a scratch pad, or a repository for implementation decisions. It is a glossary and nothing else.

### Offer ADRs sparingly

Only offer to create an ADR when all three are true:

1. **Hard to reverse** — the cost of changing your mind later is meaningful
2. **Surprising without context** — a future reader will wonder "why did they do it this way?"
3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons

If any of the three is missing, skip the ADR. Use the format in [ADR-FORMAT.md](./ADR-FORMAT.md).

</supporting-info>
15 changes: 15 additions & 0 deletions .cursor/rules/grill-with-docs-for-new-features.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
description: Use grill-with-docs for development work
alwaysApply: true
---

# Use /grill-with-docs For Development

When a user asks to develop this codebase, use the `/grill-with-docs` skill before implementation.

## Required behavior

- Start a grilling session to resolve terminology, scope, and trade-offs.
- Ask one question at a time and wait for user feedback before continuing.
- If a question can be answered from the codebase or docs, check there first.
- Proceed to implementation only after the development intent is clear.
18 changes: 18 additions & 0 deletions .cursor/rules/keep-system-architecture-up-to-date.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Keep System Architecture Doc Up To Date

## Policy

`system-architecture.md` is the source of truth for the repository architecture.

## Required behavior

When a task changes the system architecture (components, boundaries, data flow, key abstractions, integrations, or deployment topology), update `system-architecture.md` in the same task.

If no architecture impact exists, explicitly confirm that no update is needed.

## Verification checklist

- Architecture-impacting code changes include corresponding `system-architecture.md` updates.
- New or changed architectural terms are reflected consistently.
- Mermaid diagrams remain accurate when affected.
- No secrets are introduced in documentation.
23 changes: 23 additions & 0 deletions .cursor/rules/mirror-providers.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Mirror Providers Rule

## Policy

Keep both provider folders aligned:

- skills are mirrored between `.cursor/skills/` and `.claude/skills/`
- rules are mirrored between `.cursor/rules/` and `.claude/rules/`

## Required behavior

When creating, updating, renaming, or deleting a skill or rule in one provider folder, apply the equivalent change to the other provider folder in the same task.

## Allowed differences

Only vendor-required differences are allowed (format or loader specifics). Core guidance and intent must remain equivalent.

## Verification checklist

- Both provider folders contain equivalent skill directories and rule files.
- Names map consistently across providers.
- Referenced local docs/scripts resolve in each provider folder.
- No secrets are introduced.
47 changes: 47 additions & 0 deletions .cursor/skills/grill-with-docs/ADR-FORMAT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# ADR Format

ADRs live in `docs/adr/` and use sequential numbering: `0001-slug.md`, `0002-slug.md`, etc.

Create the `docs/adr/` directory lazily — only when the first ADR is needed.

## Template

```md
# {Short title of the decision}

{1-3 sentences: what's the context, what did we decide, and why.}
```

That's it. An ADR can be a single paragraph. The value is in recording *that* a decision was made and *why* — not in filling out sections.

## Optional sections

Only include these when they add genuine value. Most ADRs won't need them.

- **Status** frontmatter (`proposed | accepted | deprecated | superseded by ADR-NNNN`) — useful when decisions are revisited
- **Considered Options** — only when the rejected alternatives are worth remembering
- **Consequences** — only when non-obvious downstream effects need to be called out

## Numbering

Scan `docs/adr/` for the highest existing number and increment by one.

## When to offer an ADR

All three of these must be true:

1. **Hard to reverse** — the cost of changing your mind later is meaningful
2. **Surprising without context** — a future reader will look at the code and wonder "why on earth did they do it this way?"
3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons

If a decision is easy to reverse, skip it — you'll just reverse it. If it's not surprising, nobody will wonder why. If there was no real alternative, there's nothing to record beyond "we did the obvious thing."

### What qualifies

- **Architectural shape.** "We're using a monorepo." "The write model is event-sourced, the read model is projected into Postgres."
- **Integration patterns between contexts.** "Ordering and Billing communicate via domain events, not synchronous HTTP."
- **Technology choices that carry lock-in.** Database, message bus, auth provider, deployment target. Not every library — just the ones that would take a quarter to swap out.
- **Boundary and scope decisions.** "Customer data is owned by the Customer context; other contexts reference it by ID only." The explicit no-s are as valuable as the yes-s.
- **Deliberate deviations from the obvious path.** "We're using manual SQL instead of an ORM because X." Anything where a reasonable reader would assume the opposite. These stop the next engineer from "fixing" something that was deliberate.
- **Constraints not visible in the code.** "We can't use AWS because of compliance requirements." "Response times must be under 200ms because of the partner API contract."
- **Rejected alternatives when the rejection is non-obvious.** If you considered GraphQL and picked REST for subtle reasons, record it — otherwise someone will suggest GraphQL again in six months.
Loading
Loading