# Cross-project filing (file-don't-fix) When work surfaces that belongs to a DIFFERENT project than the one this session is working in, do not edit that project — file the work on ITS tracker and continue. The owning project's own session picks it up with full context. ## Finding the target's tracker Query the global project index (derived from every `config-write`, at `~/.cc-os/projects.json`): ``` os-backlog projects # full index as JSON os-backlog projects # filter by project name ``` Each row: canonical repo path -> `{name, tracker, remote, updated_at}`. If the target project has no row, it hasn't been routed yet — tell the user rather than guessing. ## Filing mechanics by tracker kind - `forgejo:/` — `tea issues create --repo / --title "..." --description "..."` - `github:/` — `gh issue create --repo / --title "..." --body "..."` - `planka:` (planka-only targets) — `os-backlog card-add --board --title "..." [--description "..."]` Routing inside the target project still follows ITS boundary rule (ADR-0033: Planka is state, git issues are specs) — a durable spec goes to the git-issue tracker even if the project also has a board. ## Discoverer block (append verbatim to the issue/card description) ``` -------- **Discoverer:** , session , . ``` Session id source: the SessionStart hook receives it as the `session_id` field of its stdin JSON; a live session can also find it in its transcript filename. If it is genuinely unavailable, write `session id unavailable` — never fabricate one.