---
id: df02571d-47b7-4dab-9077-73ecb58da12e
title: 'f0rge repo list: discover f0rge repos on the box (DEFERRED — owner deciding scan vs remember)'
state: open
labels:
- deferred
assignees: []
milestone: null
created: 2026-09-08T10:21:54.787248721Z
updated: 2026-09-08T21:54:44.457070830Z
---
id: df02571d-47b7-4dab-9077-73ecb58da12e
title: 'f0rge repo list: discover f0rge repos on the box (DEFERRED — owner deciding scan vs remember)'
state: open
labels:
- deferred
assignees: []
milestone: null
created: 2026-09-08T10:21:54.787248721Z
updated: 2026-09-08T21:49:03.109262846Z
---
id: df02571d-47b7-4dab-9077-73ecb58da12e
title: 'f0rge repo list: discover f0rge repos on the box (DEFERRED — owner deciding scan vs remember)'
state: open
labels:
- deferred
assignees: []
milestone: null
created: 2026-09-08T10:21:54.787248721Z
updated: 2026-09-08T21:45:18.210985138Z
---
STATUS: DEFERRED by owner 2026-09-08 — do NOT work until the owner
says go. Filed because the cost of forgetting exceeds the cost of
filing. Label: deferred.

TRIGGER: the fix-issue-record agent spontaneously tried `f0rge repo
list` mid-mission while looking for other f0rge repos to poke. The
gh-literal shape pattern-matches (gh repo list is a first-class gh
command), and the fleet value is real: an agent in repo A should be
able to discover the other f0rge repos on the box.

DESIGN FORK to think through (owner):
(a) SCAN — f0rge repo list scans a configured root (~/src or
~/.config/f0rge/root) for dirs containing .forge/, prints
path + remote + open-issue count (derived at print time). Zero
stored state, always current, bitter-lesson-clean.
(b) REMEMBER — a touch-log: the CLI appends to
~/.config/f0rge/repos.yml on init/clone/pr-merge; list prints it.
Convenience state only, NEVER authoritative (repos born outside
the log must still be discoverable via scan).

Open questions for the owner: include non-.forge clones or filter
to .git+.forge? does the folder-mirror invariant apply (a repo
verb has no .forge/repos/ folder — it is a user-level verb like
spec, arguably outside the in-repo entity invariant)? multi-owner
sharing? shell-history-style pruning?

CONSTRAINT (bitter lesson): never store derived state as truth; if
we "remember", it is a cache — scan is the source of truth.

FIX LATER, only after the owner picks a fork.

REFINEMENT after the triggering incident was dissected with the
owner (2026-09-08):
The agent reached for repo list with CROSS-REPO INTENT, not
discovery-for-its-own-sake: it found a bug while working in wr1te
and wanted to FILE IT ON THE F0RGE TRACKER using f0rge itself —
issue create against another project's .forge. It gave up on the
failed verb with no fallback (no whole-computer search), so the
finding went to chat instead of the ledger. The loop that makes
this valuable: bug found in project A that belongs to project B
gets ROUTED into B's tracker the same session, by the agent that
found it. Today the router is the owner; the forge could be.

gh-literal precedent hardens the shape: gh repo list + gh issue
create -R <owner/repo> are a PAIR — discovery feeding targeting.
Our local version: f0rge repo list (scan paths) + --repo <path>
on issue/pr verbs (target another repo's .forge). Same-owner
multi-repo is simpler than federation: no trust layer, just
discovery + targeting + write discipline (file + commit into the
target repo's tree). Also: when the target is not found, the scan
must say WHERE it looked (the give-up was a silent dead end — the
same class as #37 parse hints).

STILL DEFERRED. Owner deciding: scan vs remember; how --repo
validates target state (uncommitted .forge? concurrent agents? —
likely just document + refuse on dirty .forge).

PROVENANCE THREAD (owner Q 2026-09-08, appended): can f0rge tell
local vs -R external filing? Only at create-time — the resulting
file is identical either way; a "via -R" marker is a STAMP, not a
distinction. Judgement: dont stamp the entity (derived state; gh
doesnt; and provenance must never become policy/trust tiers).
Two clean audit homes: (a) commit-level — external filing commits
a distinct message ("issue from <repo>: #N") so provenance is a
git-log query, zero schema; (b) optional author field (spec
already has Optional author on comments; gh shows issue author)
auto-stamped from git config or the -R remote — the upgrade path
if visible provenance is ever wanted. Lean (a); never policy on
provenance.

ALT PLAN — operator guidance note (owner 2026-09-08, STILL
DEFERRED; the note is recorded as an option, not built): if an
agent runs f0rge repo list, it returns a brief note:
  "f0rge is a local forge; follow project or operator
  instructions to find other projects"
and exits 0. Purpose: eliminate the observed SILENT DEAD END (the
triggering agent gave up when the verb failed and never searched).
A placeholder that answers beats a missing command that stalls.
Zero machinery: no scan, no registry, no provenance. The full
design fork (scan vs remember) and the provenance thread (optional
author, auto-stamped from -R) stay deferred with this issue —
the note is the cheapest thing that passes, and if it proves
insufficient the fork is still there. Owner: still thinking; there
are unresolved issues with the fuller design.
