Docs for strangers: real quick start, own-shelves guide, clone-safe stub guard
README rewritten for a fresh clone: working status, quick start with env-var table and per-stage commands, photo-taking guidance, a bring-your-own-shelves section (this repo carries the author's live data), tokenless workflows, and a dev section. New committed data/STUB_DATA.marker closes a real gap: the cache marker is gitignored, so a fresh clone had stub-derived to_add.csv with no guard — upload now refuses on either marker. Username docs: BGG_USERNAME in .env is the one place it's needed; config.toml is a fallback. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
02a7ac262c
commit
8e3cdc145f
+12
-3
@@ -415,14 +415,23 @@ def run_upload(
|
||||
rng = rng or random.Random()
|
||||
now = now or (lambda: datetime.now(UTC).isoformat(timespec="seconds"))
|
||||
|
||||
marker = cfg.cache_dir / "STUB_FIXTURES.marker"
|
||||
if marker.exists():
|
||||
# Two provenance markers guard the same fact from different angles: the
|
||||
# cache marker travels with the stub XML (gitignored, so a fresh clone
|
||||
# loses it), while data/STUB_DATA.marker is COMMITTED alongside the
|
||||
# stub-derived CSVs — so a clone can never upload placeholder ids.
|
||||
markers = [
|
||||
cfg.cache_dir / "STUB_FIXTURES.marker",
|
||||
cfg.data_dir / "STUB_DATA.marker",
|
||||
]
|
||||
marker = next((m for m in markers if m.exists()), None)
|
||||
if marker is not None:
|
||||
if not dry_run:
|
||||
typer.echo(
|
||||
f"Refusing to upload: {marker} exists — every resolved "
|
||||
"version_id is a synthetic stub placeholder. Once "
|
||||
"BGG_API_TOKEN arrives: delete both cache dirs, re-record "
|
||||
"fixtures, `resolve --force`, re-review, re-diff."
|
||||
"fixtures, `resolve --force`, re-review, re-diff, then "
|
||||
"delete the marker(s)."
|
||||
)
|
||||
raise typer.Exit(code=1)
|
||||
typer.echo(
|
||||
|
||||
Reference in New Issue
Block a user