[
  {
    "id": "AR-01",
    "title": "Why do star imports make my coding agent miss callers?",
    "rule": "Import names explicitly. Don't use from module import * in code that agents edit.",
    "family": "Names and imports",
    "url": "https://beta.llmgraph.in/agent-readable/ar-01/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-02",
    "title": "Do barrel files hide calls from coding agents?",
    "rule": "Re-export through an explicit list (__all__, named export { }), not export * chains.",
    "family": "Names and imports",
    "url": "https://beta.llmgraph.in/agent-readable/ar-02/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-03",
    "title": "What happens when two functions share a name?",
    "rule": "One public name, one definition: don't define the same function name in two modules a file can import together.",
    "family": "Names and imports",
    "url": "https://beta.llmgraph.in/agent-readable/ar-03/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-04",
    "title": "Do import aliases confuse coding agents?",
    "rule": "Alias imports only to resolve a real clash, and never alias a module to a one-letter name in shared code.",
    "family": "Names and imports",
    "url": "https://beta.llmgraph.in/agent-readable/ar-04/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-05",
    "title": "Why do fallback imports make agents edit the wrong code?",
    "rule": "No conditional imports that bind the same name to different objects (try/except ImportError fallbacks get a typed shim).",
    "family": "Names and imports",
    "url": "https://beta.llmgraph.in/agent-readable/ar-05/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-06",
    "title": "Why does my agent not see what importing this module does?",
    "rule": "Keep import side effects out of modules; registration happens in an explicit setup call.",
    "family": "Names and imports",
    "url": "https://beta.llmgraph.in/agent-readable/ar-06/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-07",
    "title": "Why does my coding agent miss calls made through getattr?",
    "rule": "Don't build method names as strings (getattr(obj, f\\\"handle_{x}\\\"), obj[name]()).",
    "family": "Dispatch and reflection",
    "url": "https://beta.llmgraph.in/agent-readable/ar-07/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-08",
    "title": "How do I write dispatch that type checkers can follow?",
    "rule": "Dispatch over a closed set with a typed mapping keyed by a literal type, or an explicit match.",
    "family": "Dispatch and reflection",
    "url": "https://beta.llmgraph.in/agent-readable/ar-08/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-09",
    "title": "How should plugin registries be written for coding agents?",
    "rule": "For open sets (plugins), register explicitly into a typed registry next to a typed contract.",
    "family": "Dispatch and reflection",
    "url": "https://beta.llmgraph.in/agent-readable/ar-09/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-10",
    "title": "Why can't any tool see calls made through eval?",
    "rule": "No eval/exec/Function() to call code.",
    "family": "Dispatch and reflection",
    "url": "https://beta.llmgraph.in/agent-readable/ar-10/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-11",
    "title": "Why does my agent break calls that go through **kwargs?",
    "rule": "Avoid **kwargs/...args pass-through layers that hide the real signature; spell the parameters or use ParamSpec/Parameters<>.",
    "family": "Dispatch and reflection",
    "url": "https://beta.llmgraph.in/agent-readable/ar-11/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-12",
    "title": "Do decorators hide function signatures from coding agents?",
    "rule": "Use functools.wraps / preserve signatures in decorators; don't let decorators replace a function with a different shape.",
    "family": "Dispatch and reflection",
    "url": "https://beta.llmgraph.in/agent-readable/ar-12/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-13",
    "title": "Why is Any a blind spot for coding agents?",
    "rule": "Annotate public function parameters and returns. Use Any/any only at a documented boundary.",
    "family": "Types and contracts",
    "url": "https://beta.llmgraph.in/agent-readable/ar-13/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-14",
    "title": "How should I type callbacks so agents can follow them?",
    "rule": "Type callback and handler parameters (Callable[...], function types), not object/Function.",
    "family": "Types and contracts",
    "url": "https://beta.llmgraph.in/agent-readable/ar-14/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-15",
    "title": "How do I make duck typing visible to type checkers?",
    "rule": "Use Protocol/interfaces for duck-typed parameters.",
    "family": "Types and contracts",
    "url": "https://beta.llmgraph.in/agent-readable/ar-15/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-16",
    "title": "Why do dict-shaped objects make agents guess?",
    "rule": "Prefer dataclasses/TypedDict/interfaces over free-form dicts for structured data passed between modules.",
    "family": "Types and contracts",
    "url": "https://beta.llmgraph.in/agent-readable/ar-16/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-17",
    "title": "Which type checker settings make code easier for agents?",
    "rule": "Turn on strict type checking in the paths agents edit (pyright strict / mypy strict / tsconfig strict).",
    "family": "Types and contracts",
    "url": "https://beta.llmgraph.in/agent-readable/ar-17/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-18",
    "title": "Why does monkeypatching break agent edits?",
    "rule": "No monkeypatching in production code. In tests, patch through the fixture/mock API at the import site.",
    "family": "Types and contracts",
    "url": "https://beta.llmgraph.in/agent-readable/ar-18/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-19",
    "title": "Why does reassigning methods hide callers from agents?",
    "rule": "Keep a function's callers findable: don't assign functions onto objects at runtime (obj.method = other).",
    "family": "Structure and state",
    "url": "https://beta.llmgraph.in/agent-readable/ar-19/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-20",
    "title": "Where should a registry live so coding agents can find it?",
    "rule": "No hidden global registries mutated from many modules; one module owns the registry.",
    "family": "Structure and state",
    "url": "https://beta.llmgraph.in/agent-readable/ar-20/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-21",
    "title": "Do metaclasses hide code from coding agents?",
    "rule": "Keep metaclass and __init_subclass__ generation out of edit paths; when you use it, document what it generates.",
    "family": "Structure and state",
    "url": "https://beta.llmgraph.in/agent-readable/ar-21/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-22",
    "title": "Why do __getattr__ proxies confuse coding agents?",
    "rule": "Avoid __getattr__ (and JavaScript Proxy) forwarding on domain objects; expose explicit methods.",
    "family": "Structure and state",
    "url": "https://beta.llmgraph.in/agent-readable/ar-22/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-23",
    "title": "How should generated code be handled for coding agents?",
    "rule": "Generated code is committed, or its generator is in the repo with the command to run it. Mark it, and tell agents to edit the source.",
    "family": "Structure and state",
    "url": "https://beta.llmgraph.in/agent-readable/ar-23/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-25",
    "title": "What to check before changing a function signature?",
    "rule": "Before changing a signature, list every caller and the dynamic sites that might reach it.",
    "family": "Agent workflow",
    "url": "https://beta.llmgraph.in/agent-readable/ar-25/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-26",
    "title": "How does an agent know an edit is finished?",
    "rule": "After an edit, re-check the callers of every changed function before declaring the task done.",
    "family": "Agent workflow",
    "url": "https://beta.llmgraph.in/agent-readable/ar-26/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-27",
    "title": "Is a list of callers ever the full list?",
    "rule": "Treat \\\"callers found\\\" as the full list only when the tool says the list is full.",
    "family": "Agent workflow",
    "url": "https://beta.llmgraph.in/agent-readable/ar-27/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-28",
    "title": "Why is find-and-replace a bad rename for coding agents?",
    "rule": "Rename through the language server's rename, not text replace.",
    "family": "Agent workflow",
    "url": "https://beta.llmgraph.in/agent-readable/ar-28/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-29",
    "title": "What should a coding agent run before finishing?",
    "rule": "Run the type checker and the affected tests before saying \\\"done\\\".",
    "family": "Agent workflow",
    "url": "https://beta.llmgraph.in/agent-readable/ar-29/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-30",
    "title": "What should an agent report when it can't verify an edit?",
    "rule": "Write down what you couldn't verify in the final message.",
    "family": "Agent workflow",
    "url": "https://beta.llmgraph.in/agent-readable/ar-30/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-31",
    "title": "Why does my coding agent miss Django signal receivers?",
    "rule": "Connect Django signals with an explicit sender, and keep the receivers in one signals.py per app, imported in AppConfig.ready().",
    "family": "Frameworks",
    "url": "https://beta.llmgraph.in/agent-readable/ar-31/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-32",
    "title": "Do string model references hide dependencies in Django?",
    "rule": "Import models directly when no import cycle forces a string. When a string is needed, use the absolute form \\\"app_label.ModelName\\\" and say why.",
    "family": "Frameworks",
    "url": "https://beta.llmgraph.in/agent-readable/ar-32/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-33",
    "title": "How do I keep FastAPI routes visible to coding agents?",
    "rule": "Declare dependencies as typed functions used through Annotated[..., Depends(fn)], and write routes as decorated functions on an APIRouter. Don't build routes in loops from strings.",
    "family": "Frameworks",
    "url": "https://beta.llmgraph.in/agent-readable/ar-33/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-34",
    "title": "Why does my agent break pytest fixtures it can't see?",
    "rule": "Keep fixtures in the nearest conftest.py, name them for what they return, and don't use autouse to change behaviour.",
    "family": "Frameworks",
    "url": "https://beta.llmgraph.in/agent-readable/ar-34/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-35",
    "title": "Where should I patch in pytest?",
    "rule": "Patch the name the code under test looks up, through monkeypatch or mocker, on the module object. Don't reassign module globals in a test.",
    "family": "Frameworks",
    "url": "https://beta.llmgraph.in/agent-readable/ar-35/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-36",
    "title": "Do higher-order components hide props from coding agents?",
    "rule": "In React, prefer hooks and explicit props over higher-order components that inject props.",
    "family": "Frameworks",
    "url": "https://beta.llmgraph.in/agent-readable/ar-36/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-37",
    "title": "Why does my agent miss dynamically imported components?",
    "rule": "In React and Next.js, don't call import() with a computed path for components agents edit.",
    "family": "Frameworks",
    "url": "https://beta.llmgraph.in/agent-readable/ar-37/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-38",
    "title": "How should Express routes be organised for coding agents?",
    "rule": "Register Express routes and middleware explicitly in one router module. Don't require route files by computed path.",
    "family": "Frameworks",
    "url": "https://beta.llmgraph.in/agent-readable/ar-38/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-39",
    "title": "How do I make event emitters traceable for coding agents?",
    "rule": "Declare event names as a typed union or enum with typed payloads. Don't emit free strings with any arguments.",
    "family": "Frameworks",
    "url": "https://beta.llmgraph.in/agent-readable/ar-39/",
    "last_verified": "2026-10-30"
  },
  {
    "id": "AR-40",
    "title": "How do DI containers hide calls from coding agents?",
    "rule": "Bind interfaces to implementations in one container module, using typed tokens and constructor injection.",
    "family": "Frameworks",
    "url": "https://beta.llmgraph.in/agent-readable/ar-40/",
    "last_verified": "2026-10-30"
  }
]
