Catch up governed curve campaign and analysis workflow - #10
Conversation
Code review — PR #10 (Catch up governed curve campaign and analysis workflow)Reviewed at Bugs / regressions1. AI reasoning and expected-sale source are no longer rendered anywhere (
If dropping AI notes is intentional, please also delete 2. identified = identified.drop_duplicates(subset=["ad_id", "url"], keep="last")
combined = pd.concat([identified, unidentified], ignore_index=True)
3. Preflight can be silently skipped for URLs it cannot parse ( url_targets = [target for url in exact_urls if (target := _carsales_url_target(url))]
targets = url_targets or [(args.make, args.model)]
4. if status not in TERMINAL_STATUSES:
print("import_deferred=true ...")
return 0A scheduler/wrapper sees success while zero rows were imported. Prefer a distinct non-zero exit (or at minimum a Risky heuristics that need coverage5. 6. 7. -return re.compile(rf"\b{escaped}\b", re.IGNORECASE)
+return re.compile(rf"(?<!\w){escaped}(?!\w)", re.IGNORECASE)This is not equivalent for aliases whose first/last character is non-word ( 8. 9. if series_code.startswith(("AXAH", "AXVH", "ZWE")):
return "Hybrid"Series→drivetrain knowledge lives in 10. Falsy- UI robustness (minor)
ProcessThe commit set mixes source/logic changes with ~90k lines of governed curve snapshots and evidence CSVs. Per |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a676675aee
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if not vps_mode: | ||
| # Production is intentionally runtime-only. These pages can write governed | ||
| # inputs or launch scraper work, so they remain development-only surfaces. |
There was a problem hiding this comment.
Hide links to pages excluded from VPS routing
When vps_mode=True, this condition leaves the authoring pages unregistered, but the production-default pages/00_SCRAPER_OPERATIONS.py still unconditionally links to pages/7_AUTOTRADER_SCRAPER.py, and pages/03_CURVES.py still offers a st.switch_page button for Curve Builder. Clicking these controls on the VPS therefore targets pages absent from Streamlit navigation; the Curves fallback even tells the user to use a sidebar entry that no longer exists. Hide or replace these controls in VPS mode, or retain the pages as hidden routable entries.
Useful? React with 👍 / 👎.
Summary
7WqoauuNvqzoVM5jO, raising covered sold vehicles from 4,592 to 4,696Why
The previous code deployment deliberately preserved all
CSV_data, which also left governed curves and repair pricing stale on production. The new release path separates VPS-owned runtime data from Git-governed business inputs, validates and backs up both release layers, records hashes and row counts, and rolls back if activation fails.Validation
venv\Scripts\python.exe -m pytest -q— 734 passedvenv\Scripts\python.exe scripts\readiness_smoke.py— passedvenv\Scripts\python.exe scripts\governance_checks.py check— 408/408 observed tags covered, 0 monotonicity errorsvenv\Scripts\python.exe scripts\project_memory.py check— passedRuntime boundary
This PR still updates GitHub source and governed evidence only. It has not been deployed to the DigitalOcean VPS, and VPS-owned runtime data has not changed. Production release is intentionally blocked until this PR is reviewed, merged to
main, and the working release paths are clean.