diff --git a/AGENTS.md b/AGENTS.md index ca9fa0ba17..1ed4d681ba 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,7 +5,7 @@ - Describe what Marko does, never what it lacks. No "there is no X", and no workarounds that route around the framework. - Do not document compile errors. The compiler reports them with a code frame. This covers content that reframes them, such as a table mapping another framework's attribute names onto Marko's. - Do not document errors, warnings, or checks that only a `MARKO_DEBUG` build produces. State the rule, not the message. -- Never document a known bug as intended behavior. Grep `agent-feedback/bugs.md` in the `marko` repo first; a hit means file the defect and leave the docs alone. +- Never document a known bug as intended behavior. Grep `agent-feedback/` in the `marko` repo first; a hit means file the defect and leave the docs alone. - Drop a topic that loses its main claim to the rule above. What remains is the least verified part of it. - Prefer filing a defect to writing a caveat that teaches readers to live with one. @@ -121,4 +121,4 @@ ## Agent feedback -Anything actionable but out of scope for the current task — a suspected bug, cleanup, a perf/size win, tooling friction, or code that was confusing — must be recorded in [`agent-feedback/`](agent-feedback/README.md) before finishing. Don't silently drop it, and don't fix it inside an unrelated diff. +Anything actionable but out of scope for the current task (suspected bug, cleanup, perf or size win, tooling friction, confusing code) must be filed in [`agent-feedback/`](agent-feedback/README.md) before finishing. Never drop it silently. Never fix it inside an unrelated diff. diff --git a/agent-feedback/README.md b/agent-feedback/README.md index c79150a904..53b82b15a7 100644 --- a/agent-feedback/README.md +++ b/agent-feedback/README.md @@ -1,39 +1,65 @@ # Agent Feedback -Actionable observations that were **out of scope for the task that surfaced them**. If something is in scope, fix it instead. Do not expand a task's diff to fix issues recorded here. +Actionable observations that were out of scope for the task that surfaced them. In scope: fix it. Out of scope: file it here. Never expand a task's diff to fix an item recorded here. -## When to add an entry +One item per file in `items/`, named `YYYY-MM-DD-.md`. -While working on any task, record anything a future contributor should act on: +## When to file -- a suspected bug you couldn't pursue → `bugs.md` -- duplication, dead code, inconsistency, refactor opportunities → `cleanup.md` -- runtime speed or bundle size opportunities → `perf.md` -- friction in builds, tests, tooling, or repo workflows → `dx.md` -- code or docs that were confusing, and what would have clarified them → `unclear.md` +Anything a future contributor should act on: -## Rules +- `bug`: a suspected defect left unpursued +- `cleanup`: duplication, dead code, inconsistency, refactor opportunity +- `perf`: speed, memory, payload or bundle size, build time +- `dx`: friction in builds, tests, tooling, or repo workflows +- `unclear`: code or docs that were confusing, and what would have clarified them -1. **Search the category file first.** If an entry already covers it, don't duplicate; append a corroborating sentence only if you have new information. -2. **Be self-contained.** Include enough detail (paths, symbols, reasoning) that someone can act without re-discovering your analysis. Never reference "my earlier analysis" or conversation context. -3. **Cite by stable symbol, not line number.** Line numbers rot with the next edit; anchor the primary citation to the nearest enclosing stable symbol (exported function, class, variable, or a heading for docs). A line number may appear in the body as a secondary hint. -4. **Append to the end** of the category file. -5. Entries are **removed when resolved** (delete, don't mark done; git history is the archive). -6. **Verify before recording.** A guess is not feedback. +## Rules -## Resolving a "won't fix" item +1. **Verify first.** A guess is not feedback. Every item ends with a check that reproduces the claim. +2. **Dedupe first.** `grep -ril '' agent-feedback/items`. If a file covers it, edit that file only when you add new information. +3. **Check the code site.** An intent comment there means the behavior is deliberate. Do not file it. +4. **Self-contained.** Paths, symbols, reasoning. Never reference conversation context or "earlier analysis". +5. **Cite by stable symbol**, never line number. +6. **State the defect and the check.** Never describe what works. Never narrate a landed fix. +7. **Direction is preventive for `unclear` and `dx`.** Name what would have stopped the trip: a comment, a doc line, a lint rule, a compile error, a debug-only warning. The goal is that the next agent does not hit it. +8. **Resolve by deleting the file in the same PR as the fix.** A partial fix rewrites the file to what remains. +9. **Won't-fix is a maintainer's call, never an agent's.** Add a comment (two lines max) at the code site stating the behavior and why it is deliberate, then delete the file. The comment is what stops re-filing. Never consult git history to learn whether something was resolved; if it is not in `items/` and not commented at the site, it is unresolved. -When a maintainer has explicitly deemed an item "won't fix" / "not worth it", resolve it by adding a brief inline comment at the code site that captures the decision (so it is not re-filed), then remove the entry. Only on such an explicit call — never on your own initiative. +## Item format -## Entry format +`items/YYYY-MM-DD-.md`: ```md -## +--- +type: bug | cleanup | perf | dx | unclear +impact: high | med | low +effort: high | med | low +site: +--- + +# -`` › `` | 2026-07-02 | impact: | effort: +<2-6 sentences: the problem, why it matters, a concrete direction. Cut evidence a fixer can re-derive from the site.> -<2–6 sentences: the problem, why it matters, and a concrete suggested direction, -ending with the check that re-verifies the claim (a command, input, or -observation). Cut evidence beyond what a fixer needs to act; further detail is -re-derived from the citation. Additional file paths inline as needed.> +Check: ``` + +`impact`: what breaks or is lost if ignored. `effort`: expected size of the fix. Both are the filer's estimate; triage re-judges. + +## Repo notes + +The markojs.com site: docs as markdown under `docs/`, a `@marko/run` app under `src/`, plus the browser playground. The root `AGENTS.md` holds the documentation writing guidelines and they govern any docs change; read it too. + +**Reproduce a claim.** + +- Docs content: `grep` the page, then verify the behavior it describes against Marko runtime source, a fixture snapshot, or a compiled probe. An existing docs sentence is not evidence. +- Anchors and slugs: `github-slugger` resolves collisions in document order, so a second heading with the same slug becomes `#name-1`. Check with the slugger directly rather than guessing. +- Playground and site behavior: `pnpm run dev`, then reproduce in the browser. +- Build-derived output (page ``, generated llms bundles): `pnpm run build`, then read `src/routes/docs/_compiled-docs/`. + +**Guard tests.** `pnpm test` (`vitest run`). A docs-structure claim (every page indexed, every anchor resolving) is best guarded by a test that walks `docs/**/*.md`, not by a snapshot of one page. + +**Pre-ship.** `pnpm run lint` (markdownlint over `docs/**/*.md`, then cspell) and `pnpm run type-check` (`marko-type-check`). `pnpm run build` when the change can affect generated output. + +**Gotchas.** `pnpm run lint` runs cspell, which has a Node engine floor above some default installs and aborts on the version check before checking anything; the husky pre-commit hook hits the same wall. Never document a known Marko bug as intended behavior: file the defect instead. Never use an em dash in docs, and grep `' - '` too, since a spaced hyphen doing the same job is the same problem. diff --git a/agent-feedback/bugs.md b/agent-feedback/bugs.md deleted file mode 100644 index 08a3b8c577..0000000000 --- a/agent-feedback/bugs.md +++ /dev/null @@ -1,15 +0,0 @@ -# Suspected Bugs - -Out-of-scope defects noticed while working on something else. Format and rules: [README.md](README.md). - -## Point `core-tag.md`'s `