Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
4a8a3ea
fix: expand ledger scan roots and path handling
May 19, 2026
c2b436e
Expand project ledger coverage
May 19, 2026
fda06a9
feat: ingest Google Drive projects from inventory policy roots
May 19, 2026
8c4cbae
Add Matty-PC project discovery inventory
May 20, 2026
880bc2e
Add MacBook mirror roots to project ledger
May 21, 2026
c6427d6
Refresh project ledger mirror
May 22, 2026
577cdb1
Refresh project ledger snapshot
May 22, 2026
b16f079
Refresh project ledger mirror
May 23, 2026
fd84508
Refresh project ledger mirror
May 23, 2026
6a69b4a
Refresh canonical project ledger summary
May 23, 2026
1391003
Add project-ledger sidecar and refresh ledger
May 23, 2026
640d797
refresh identity sidecar
May 24, 2026
1d6874a
Refresh project-ledger session metadata
May 24, 2026
020256f
docs: refresh project ledger mirror
May 25, 2026
9bd42d3
chore: refresh project ledger sidecar
May 25, 2026
e6ebe17
Refresh project ledger snapshot
May 26, 2026
cd2fa99
chore: refresh project ledger session metadata
May 26, 2026
067ea57
Refresh project-ledger session sidecar
May 26, 2026
f3af4c4
Refresh project ledger for current session
May 26, 2026
ec449c7
Refresh project-ledger scan
Jun 1, 2026
1a044e4
Refresh project ledger markdown
Jun 2, 2026
5d53117
docs: refresh project-ledger session metadata
Jun 2, 2026
02695bd
Refresh project-ledger session metadata
Jun 2, 2026
08573f6
Refresh project ledger outputs
Jun 3, 2026
ac956a9
Refresh project-ledger session metadata
Jun 3, 2026
7a60641
Refresh project-ledger session metadata
Jun 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .project-ledger.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"project_key": "github.com/mschwar/project-ledger",
"display_name": "Project Ledger",
"description": "Ledger scanner for mixed project roots across machines and storage surfaces.",
"status": "active",
"tags": [
"ledger",
"git",
"tooling"
],
"canonical_url": "https://github.com/mschwar/project-ledger.git",
"repo_name": "project-ledger",
"shared": true,
"storage_scope": "shared",
"last_session_at": "2026-06-03T20:55:55Z",
"last_session_summary": "Refreshed the project-ledger scan, regenerated the raw outputs, synced the canonical homelab ledger mirror, and verified the MacBook peer was reachable while matty-pc SSH timed out; inventory-backed roots remained readable.",
"next_step": "Keep the scanner synced with new roots, stable identity sidecars, and the homelab ledger mirror.",
"last_push_at": ""
}
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ The scanner is config-driven and emits:
- `output/projects.csv`
- `output/projects.json`
- `output/projects.md`
- `docs/ledgers/projects-ledger.md` (canonical human-facing ledger mirror)

## Handoff Docs

Expand Down Expand Up @@ -52,13 +53,21 @@ python build_ledger.py --config ledger_config.json --output-dir output
- `children`: inspect each direct child directory and keep the ones that look project-like
- `git_repos`: recursively find directories that contain `.git`
- `self`: treat the root itself as one ledger entry
- `inventory_policy`: read a durable inventory artifact plus a policy file, then promote only the roots marked for ledger ingestion

The default config scans:

- the top-level children of `Documents`
- nested git repos under `Documents/repos`

Adjust the roots and excludes as needed for other machines, synced folders, or backup dumps.
Adjust the roots and excludes as needed for other machines, synced folders, backup dumps, or inventory-backed cloud surfaces.

For Google Drive or similar cloud-drive inventories, prefer a policy-backed root instead of recursive mount discovery. Point one root at the mounted folder for operator navigation, but drive candidate selection from:
- `inventory_jsonl`: durable metadata inventory
- `policy_path`: root classification policy
- `policy_crawl_treatments`: usually `["project_discovery"]`

That keeps project-ledger ingestion aligned with the homelab control-plane rule: inventory first, policy second, project promotion third.

If a directory matters but does not have enough obvious signals, add it under `force_include_names` for that root.

Expand Down
8 changes: 8 additions & 0 deletions RUNBOOK.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@ python -m unittest tests\test_build_ledger.py
5. Add `force_include_names` if important directories are low-signal.
6. Run the scanner and inspect the Markdown output before trusting the results.

For inventory-backed cloud roots:
1. Keep `path` pointed at the mounted folder only for operator navigation.
2. Set `discovery` to `inventory_policy`.
3. Point `inventory_jsonl` at the durable inventory artifact.
4. Point `policy_path` at the matching root-policy file.
5. Restrict `policy_crawl_treatments` to the intended promotion set, usually `project_discovery`.
6. Verify the resulting entries carry `google-drive:` style project keys and a source label that preserves the policy root.

## When A Project Is Missing

Check in this order:
Expand Down
Loading