diff --git a/kb/diagram/assets/archcenter-refs-index.json b/kb/diagram/assets/archcenter-refs-index.json index 3ec89f1..364e4f6 100644 --- a/kb/diagram/assets/archcenter-refs-index.json +++ b/kb/diagram/assets/archcenter-refs-index.json @@ -1,5 +1,5 @@ { - "cache_dir_mtime": 1777161774.8360987, + "cache_dir_mtime": 1777171058.9167857, "entries": { "active-data-guard-far-sync-dba-oracle": { "drawio": "kb/diagram/assets/archcenter-refs/active-data-guard-far-sync-dba-oracle/active-data-guard-far-sync-dba.drawio", diff --git a/tools/archcenter_description_fetcher.py b/tools/archcenter_description_fetcher.py index cd96a0c..7f1f02c 100644 --- a/tools/archcenter_description_fetcher.py +++ b/tools/archcenter_description_fetcher.py @@ -169,6 +169,16 @@ def main() -> None: print(f" {s:25s} {n}", file=sys.stderr) print(f"\nReport: {args.report.relative_to(PROJECT_ROOT)}", file=sys.stderr) + # Bump CACHE_DIR mtime so archcenter_pattern_lookup invalidates its + # persisted JSON index — POSIX doesn't propagate child-file changes + # (e.g. new _description.md inside an existing slug) to the parent + # dir's mtime, so we touch it explicitly. + if counts.get("fetched"): + try: + CACHE_DIR.touch(exist_ok=True) + except OSError: + pass + if __name__ == "__main__": main() diff --git a/tools/archcenter_pattern_lookup.py b/tools/archcenter_pattern_lookup.py index 1289b98..04bae0f 100644 --- a/tools/archcenter_pattern_lookup.py +++ b/tools/archcenter_pattern_lookup.py @@ -402,7 +402,15 @@ def main() -> None: "before scoring (opt-in; requires " "ANTHROPIC_API_KEY). Useful for natural-language " "queries the synonym table doesn't cover.") + parser.add_argument("--rebuild-index", action="store_true", + help="Force-rebuild the cached archcenter-refs " + "index (kb/diagram/assets/archcenter-refs-index.json). " + "Use after a manual KB edit if mtime didn't bump.") args = parser.parse_args() + if args.rebuild_index and CACHE_INDEX_FILE.exists(): + CACHE_INDEX_FILE.unlink() + print(f"[lookup] removed stale index at {CACHE_INDEX_FILE.relative_to(PROJECT_ROOT)}", + file=sys.stderr) queries: list[str] = list(args.queries) if args.query: diff --git a/tools/archcenter_zip_downloader.py b/tools/archcenter_zip_downloader.py index 9915ce1..29caa32 100644 --- a/tools/archcenter_zip_downloader.py +++ b/tools/archcenter_zip_downloader.py @@ -211,6 +211,16 @@ def main() -> None: print(f" {status:30s} {n}", file=sys.stderr) print(f"\nReport: {args.report.relative_to(PROJECT_ROOT)}", file=sys.stderr) + # Bump cache-dir mtime so the pattern-lookup index invalidates. + # New downloads create new subdirs (POSIX bumps the parent mtime), + # but re-downloads or unzip-overwrites of existing slugs do not — + # so we touch explicitly. + if any(counts.get(k) for k in ("downloaded", "zip_error", "no_drawio_after_extract")): + try: + args.cache_dir.touch(exist_ok=True) + except OSError: + pass + if __name__ == "__main__": main()