Skip to main content

research

Research upstream and peer projects to inform Grida's design and implementation. Use when investigating how Chromium, Skia, Servo, Taffy, or peer canvas editors solve a problem before writing code. Covers source-code exploration and research document authoring under docs/wg/research/.

Informações da origem

Repositório
gridaco/nothing
Última atividade na origem
17 de julho de 2026 às 14:06
Idioma detectado do SKILL.md
inglês
Estrelas
50
Forks
3

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
research
description
Research upstream and peer projects to inform Grida's design and implementation. Use when investigating how Chromium, Skia, Servo, Taffy, or peer canvas editors solve a problem before writing code. Covers source-code exploration and research document authoring under docs/wg/research/.
# Code Research Skill Workflow for going from "how does X work?" to a documented survey grounded in prior art from upstream and peer projects. ## When to Use This Skill - Investigating how a browser engine solves a rendering/layout/compositing problem - Looking up undocumented Skia API behavior - Understanding CSS feature semantics before adding support - Comparing canvas editor architectures (excalidraw, tldraw) - Writing or extending `docs/wg/research/` documents --- ## How to Orient Yourself Before touching any external repo, check what Grida already knows. | What you need | How to find it | | ---------------------------- | ------------------------------------------------------------- | | Existing research on a topic | `docs/wg/research/chromium/index.md` (topic map) | | Code that cites sources | `grep "based on\|adapted from\|ported from" --include="*.rs"` | | Vendored third-party code | `ls third_party/` | | Feature docs for a subsystem | `ls docs/wg/feat-*/` | If already documented, cite it and move on. --- ## Reference Repositories **Local clones (optional):** If `~/Documents/GitHub/` exists, it may contain default-style clones (sibling dirs named by repo, e.g. `skia`). Prefer searching there before cloning or using only the web. | Repo | Lang | When to reference | Key paths | | ------------------------------------------------------ | ---- | ----------------------------------------------------------------------------- | ----------------------------------------------------- | | [chromium](https://github.com/chromium/chromium) | C++ | Skia usage, compositing, layer trees, paint scheduling, tiling, GPU resources | `cc/` `third_party/blink/renderer/` `components/viz/` | | [skia](https://github.com/google/skia) | C++ | Undocumented API behavior, GPU internals, filter details | `src/gpu/` `src/core/` `src/effects/` | | [rust-skia](https://github.com/rust-skia/rust-skia) | Rust | Rust binding ergonomics — our direct `skia-safe` dependency | `skia-safe/src/` | | [resvg](https://github.com/linebender/resvg) | Rust | SVG rendering, path conversion, filter effects | `crates/resvg/src/` `crates/usvg/src/` | | [servo](https://github.com/servo/servo) | Rust | CSS layout, DOM, Rust browser-engine patterns. We vendor its style system | `components/style/` `components/layout/` | | [stylo](https://github.com/servo/stylo) | Rust | CSS parsing and style resolution | `style/` | | [taffy](https://github.com/DioxusLabs/taffy) | Rust | Flexbox/Grid layout algorithms | `src/tree/` `src/compute/` `src/style/` | | [excalidraw](https://github.com/excalidraw/excalidraw) | TS | Canvas API optimization, rendering heuristics, interaction | `packages/excalidraw/renderer/` | | [tldraw](https://github.com/tldraw/tldraw) | TS | CRDT state model, modular SDK, DOM/SVG canvas | `packages/editor/` `packages/store/` | **Searching large repos:** use https://source.chromium.org/ for Chromium. Narrow to `cc/layers/` `cc/tiles/` `cc/trees/` (compositing), `cc/paint/` (recording), `cc/scheduler/` (frame scheduling). Servo: `components/style/properties/`, `components/style/stylist.rs`, `components/layout/`. Skia: `include/core/` `include/effects/`, GPU in `src/gpu/ganesh/` (GL) or `src/gpu/graphite/` (Metal/Vulkan). --- ## The Research Workflow 1. **Frame the question.** Specific and bounded. Bad: "how does Chromium handle rendering?" Good: "how does Chromium decide which layers get their own composited surface?" 2. **Check existing knowledge** in `docs/wg/research/` and code comments before going upstream. 3. **Explore the source** with targeted searches — never read entire codebases: ```sh grep "struct LayerTreeHost" --include="*.h" -r cc/ # owning type grep "ShouldCreateRenderSurface" --include="*.cc" -r cc/ # decision points grep "kDefault.*Tile\|kMax.*Memory" --include="*.h" -r cc/ # design constants ``` 4. **Extract findings:** **what** (mechanism + file path), **why** (rationale), **constants** (thresholds/heuristics). 5. **Document:** | Scope | Action | | ---------------------------- | --------------------------------------------- | | Quick answer | Code comment citing the source | | Reusable subsystem knowledge | Research doc in `docs/wg/research/<project>/` | | Confirming existing approach | Update the relevant research doc | --- ## Writing Research Documents > **A research document is a pure survey of how upstream solves a problem.** It describes > the upstream system on its own terms, in enough depth that a reader could reimplement > the design from the doc alone. It is **not** a plan, a proposal, or a gap analysis — > Grida should be essentially absent from these pages. Docs live in `docs/wg/research/<project>/`. Create new subdirectories as needed (`servo/`, `skia/`). ### Stay in survey mode Write as if Grida did not exist. The reader is someone trying to understand the upstream project — Chromium, Skia, Servo, etc. — not someone planning a Grida change. Concretely: - **Frame in upstream terms.** "Blink resolves `clip-path` by..." (✅) — not "Blink does X, which is what we'd need..." (❌). - **Use upstream names** for types, files, functions, constants. - **Quote the spec, the source, the upstream commit.** Anchor every claim to a file path or spec section. - **Compare upstream to upstream.** Chromium vs. resvg vs. Servo belongs here; Chromium vs. Grida does not. - **Spec gotchas, magic numbers, edge cases** are on-topic — they explain the upstream design. ### Keep Grida out of the body Forbidden in research docs: - "Relevance to Grida" / "What we borrow" / "What we differ on" sections. - Citations of `crates/grida/...` or any in-repo file path. - "Plan for our implementation" / "Implementation checklist" sections. - Sentences using "we", "our renderer", "our codebase", or "our fix" for Grida-side work. - "This is the gap blocking N fixtures" intros, "TODO" lists, "where the fix lands" footers. A neutral "the Rust binding for this Skia API is `skia_safe::FooBar`" is fine — it surveys the primitive. Becomes off-limits the moment the sentence ties it to Grida ("we use this at filename.rs:42"). ### Required structure 1. **Title and scope** — what subsystem, what questions it answers (in upstream terms). 2. **Source references** — upstream file paths (with commit hash if volatile). 3. **Architecture description** — how the upstream subsystem works, with diagrams for pipelines. 4. **Key data structures** — important types and relationships (use upstream names). 5. **Constants and heuristics** — magic numbers and their reasoning. 6. **Cross-project comparison** (when relevant) — Chromium vs. resvg vs. Servo vs. Skia, each on its own terms. **Conventions:** Upstream terminology. Short code excerpts (5–15 lines) with file path citations. Organize by concept, not by file. Update `index.md` when adding new docs. File names: lowercase, hyphenated, topic-descriptive. ### Review your draft before saving Treat this as a required step — past drafts have repeatedly slipped Grida-side content into research, and it's cheapest to catch right before save: - [ ] Search for `Grida`, `grida`, `crates/grida`, `our `, `we `, `we'd`, `we have`, `we use`. Every match must justify itself — usually by being removed. - [ ] Skim for headings like "Relevance to ...", "What we borrow", "What we differ on", "Plan for ...", "Implementation checklist", "Where our code is wrong". Delete them. - [ ] Check the intro and conclusion. Framed around an upstream question, or around a Grida gap? Reframe to upstream. - [ ] Check "See also" / "References". Internal Grida paths there are a smell. - [ ] If the doc would be useless to a reader who didn't know Grida exists, it isn't a research doc yet. Move the Grida-side content out. If you find yourself wanting to write "and here's how this maps to our renderer", stop — that's not what a research doc is for. --- ## Pitfalls - **Writing a Grida-flavored survey.** Most common failure mode — the brief is "research X" and the agent writes a survey ending in "here's how we should do it". Stay in survey mode. - **Researching what's already documented.** Check `docs/wg/research/` and code comments first. The Chromium research alone is 15 documents. - **Reading too broadly.** Arrive with a specific question, find the code path, extract the answer, leave. Use source.chromium.org. - **Confusing Skia docs with Skia behavior.** Skia's documentation is minimal and sometimes wrong. Read the implementation. - **Stale source references.** Reference stable concepts (struct names, enum variants) over line numbers. - **Mixing terminologies.** Research docs: upstream terms. Code comments: Grida terms with parenthetical upstream reference. --- ## Checklist - [ ] Framed a specific, bounded question - [ ] Checked existing research and code comments - [ ] Identified the right repo and narrowed to specific directories - [ ] Extracted findings with file paths, rationale, and constants - [ ] Wrote the research doc as a pure upstream survey — no Grida content - [ ] **Reviewed the draft** against the [review checklist](#review-your-draft-before-saving) — searched for `Grida`, `our`, `we`; deleted any planning sections - [ ] Updated `index.md` if a new research doc was created
Ver no GitHub