Jon explicitly clarified on 2026-05-06 that the previous hesitation around live RPP spend is no longer in play.
Jon reconfirmed this later on 2026-05-06: the old "ask before spending RPP" rule is not active. If RPP answers the Pillar 1 question faster or improves the chance of reaching the 95% target, use it.
Operational rule from here: use RPP whenever it helps Pillar 1, especially for canonical 50 subjects, known GT comparables, direct-ID checks, bounded production replays, request-shape diagnostics, and validation slices. Do not pause merely to ask for RPP-budget approval.
The guardrail is traceability, not avoidance:
search_run_id, api_call_log, response IDs, request params,
candidate rows, and miss buckets wherever the harness supports it;This supersedes older notes below that mention live-spend gating,
RPP_BUDGET_APPROVED, or per-conversation RPP approval. If a legacy harness
still requires RPP_BUDGET_APPROVED=1 as a mechanical switch, set it for the
approved Pillar 1 run; do not treat it as a fresh decision gate.
Mitcham has been reinterpreted with production semantics, using persisted DB evidence only and no new RPP calls.
reports/pillar1-mitcham-live-diagnostic-2026-05-05.mdreports/pillar1-mitcham-live-diagnostic-2026-05-05.jsonscripts/pillar1-mitcham-live-diagnostic.jstest/pillar1-mitcham-runner.test.jsCorrected Mitcham result:
scoring.js hard-filter retained target coverage: 3/3Why this matters: autopilot/index.js imports top-level scoring.js, where
commercial/industrial area range issues are soft flags. The older 2/3 retained
metric came from the live diagnostic's explicit legacy floorAreaMin: 100
post-filter, not from the production scorer. CLID 12354803 is therefore a
returned/production-retained row under current production semantics, not a true
RPP miss and not a proven production retained miss.
Current next Pillar 1 action: re-run/update the whole-cohort miss reclassification using production-retained semantics. Use RPP freely where it helps classify or recover residual misses under that corrected classification.
Fresh verification:
node --test test/pillar1-mitcham-runner.test.js test/pillar1-geebung-runner.test.js autopilot/adapters/rpp-direct-adapter-classify-unit-family.test.js
node --check scripts/pillar1-mitcham-live-diagnostic.js
node -e "JSON.parse(require('fs').readFileSync('reports/pillar1-mitcham-live-diagnostic-2026-05-05.json','utf8')); console.log('json ok')"
Result: 15 focused tests pass; syntax/JSON checks pass.
As of 2026-05-05 ~20:00 AEST:
May 4 50; May 4 50 remains an explicit cohort option and
?cohort=may4_50 still works.Host: truemarket.palermostudio.com http://127.0.0.1:8880/grid2 returns
200, and the local API returns current 2026-05-05 complete runs.https://truemarket.palermostudio.com/grid2 still returns 502
because truemarket.palermostudio.com resolves to tailnet node
100.89.228.28 (opencode), while this workspace/dashboard is on
100.76.227.78 (ubuntu). Treat this as tailnet/DNS/ingress, not a Grid2
data bug.reports/pillar1-geebung-live-diagnostic-2026-05-05.md,
pipeline run b10b67b4-ca4d-4825-9a63-28cac53209a8.floorArea >= 100
on a bounded COMMERCIAL sold search returned 0/3; the same bounded
search without the RPP floorArea request filter returned 3/3 from
139 gross / 121 retained, with 18 area post-filter discards.priceMin >= 400000 but strips
floorAreaMin / floorAreaMax before calling RPP. Area is a post-filter
evidence gate. See autopilot/adapters/rpp-direct-adapter.js and
docs/PILLAR_1_LEARNINGS.md §34.reports/truemarket-plan.source.json and copied to canvas/public.Fresh verification:
node --test test/pillar1-geebung-runner.test.js test/pillar1-gt-preflight.test.js test/recall-pool-coverage.test.js test/api-call-log-property-ids.test.js test/candidate-rejection-log.test.js test/test-gamblor16-dashboard-db.js autopilot/adapters/rpp-direct-adapter-classify-unit-family.test.js
node --check scripts/pillar1-geebung-live-diagnostic.js
node --check scripts/pillar1-gt-preflight.js
node --check autopilot/adapters/rpp-direct-adapter.js
node --check scripts/build-canvas-live-status.mjs
node --check scripts/render-plan-vector.mjs
Result: 58 tests pass; syntax/JSON checks pass.
Mitcham bounded live diagnostic was completed and then clarified with production retained semantics:
scripts/pillar1-mitcham-live-diagnostic.jstest/pillar1-mitcham-runner.test.jsreports/pillar1-mitcham-live-diagnostic-2026-05-05.mdreports/pillar1-mitcham-live-diagnostic-2026-05-05.json217a1231-c3fc-421f-a327-75c33b6b0f03BUSINESS.BUSINESS|COMMERCIAL with RPP floorArea >= 100: 540 RPP total, 200
gross page rows, 0/3 hits.BUSINESS|COMMERCIAL without RPP floorArea: 2036 RPP total, 200 gross
page rows, 3/3 gross hits, 2/3 legacy diagnostic retained hits, 3/3
production hard-filter retained hits.UNIT page-0 legs: 0/3 hits with and without RPP floorArea.12354803 is rejected only by the diagnostic legacy
post-filter. Production scoring.js treats the area mismatch as a soft flag,
so it is production hard-filter retained.Do not lose sight of the cohort. Pillar 1 is currently focused on improving the 50-subject commercial/industrial pilot cohort, specifically the cleanly measured residual pool-coverage misses.
Pillar 1 success is retrieval / pool coverage:
Jon clarified the pool-size trade-off on 2026-05-05: gross pool size is not the primary objection. A broader gross pull is acceptable if post-filtering produces a workable pool and materially improves coverage. Example: 2,000 gross results post-filtered to 1,000 with 100% coverage is acceptable. The bad outcome is a large or medium gross pull with weak/no post-filtering and poor coverage, e.g. 1,000 gross results and only 50% coverage. Therefore, treat pool delta as a ranking/cost risk to instrument and control, not as an automatic Pillar 1 failure when coverage is strong.
Pillar 1 is not ranking. R@20/R@30 and scorer behaviour are downstream Pillar 2 evidence. Do not treat ranking as a Pillar 1 acceptance criterion.
Current known state:
docs(pillar-1): add type-aware recovery plande0267d1a679dd1e7e56d3cf51030630c0b4b71dActive Pillar 1 focus from here:
Do not tell the next agent that the active Pillar 1 objective is ranking, Pricefinder, dashboard polish, or Young/Robina alone.
McDougalls Hill is now the next concrete no-RPP micro-plan:
reports/pillar1-mcdougalls-hill-microplan-2026-05-05.mdreports/pillar1-mcdougalls-hill-microplan-2026-05-05.jsonRPP SOP login/root-cause check is now complete:
reports/pillar1-mcdougalls-hill-rpp-root-cause-2026-05-05.mdreports/pillar1-mcdougalls-hill-rpp-root-cause-2026-05-05.json/tmp/rpp-cookies-fresh.json failed with HTTP 401; Playwright refresh
succeeded and preflight passed.LAND and added hidden floorArea >= 100; that
explains the close land/development misses.LAND got 3/5, close COMMERCIAL got 1/5, remote
COMMERCIAL/RETAIL got 1/5.LAND expansion. Next action is a
bounded McDougalls runner that logs gross rows, retained rows, discard
reasons, response IDs, and strict hit CLIDs.Approved live McDougalls diagnostic is now complete:
scripts/pillar1-mcdougalls-live-diagnostic.jstest/pillar1-mcdougalls-runner.test.jsreports/pillar1-mcdougalls-hill-live-diagnostic-2026-05-05.mdreports/pillar1-mcdougalls-hill-live-diagnostic-2026-05-05.jsonLAND: 3 gross / 3 retained / hits 16593218, 16593224,
4162254COMMERCIAL: 2 gross / 2 retained / hit 17726059COMMERCIAL/RETAIL: 2 gross / 1 retained / hit 45197164, one
discard for distance_outside_ringPortsmith RPP diagnostic is now complete:
reports/pillar1-portsmith-rpp-diagnostic-2026-05-05.mdreports/pillar1-portsmith-rpp-diagnostic-2026-05-05.json111 Hartley Street, Portsmith QLD 487070ff1ed2-e92c-4acb-8e02-29666fb7ec14090f97f9-7e32-4e9d-875a-43e1bc1ba6e6 /
d9de28c6-565e-49ff-929c-627ba5e1cb6d6904717; it was then absent
from the persisted candidate pool, proving a post-fetch/client-filter/
persistence loss for that row.6904717: returned by exact RPP search, lost after fetch6905209: hidden floorAreaMin=100 exclusion; recovered when floor filter
removed6905479: exact date-window exclusion; recovered when date_to extended
to 2025-12-265762656: current RPP type is HOUSE; recovered in HOUSE page 1, not C/I
search16076306: direct ID exists but lacks sale date/price in direct detailDo not run the canonical 50-pilot from today's Lighthouse result.
Latest live Lighthouse A/B truth:
Bounded RPP miss verification is complete:
reports/lighthouse-ab-miss-analysis-2026-05-05.mdreports/lighthouse-ab-missing-comps-2026-05-05.jsonPlain English: RPP has the properties. Our current request shape is not bringing them into the candidate pool.
Next useful move: bounded request-shape narrowing, not bigger pools.
Current next-experiment plan:
reports/pillar1-next-request-shape-2026-05-05.mdKant implemented the no-RPP preflight layer in /tmp/bellend-lighthouse:
scripts/lighthouse-5subj-ab.jstest/lighthouse-5subj-ab.test.jsbuildPillar1RequestShapeCandidates() and validateNoRppRequestShapePreflight()node --test test/lighthouse-5subj-ab.test.js passed 9/9.Bacon ran the first no-RPP request-shape preflight, then Peirce resolved the Ascot evidence gap on the Lighthouse package branch:
reports/pillar1-request-shape-preflight-2026-05-05.md3479221, 7728456132391817160415UNIT, sale date, price, and distance; local historical fixture reports/unit-candidates-sample-5k-2026-04-22.jsonl:3946 supplies missing area provenance for the same CoreLogic ID (building_area_sqm=71, land_area_sqm=118).validateNoRppRequestShapePreflight() now records evidenceProvenanceByTarget and reports missing area evidence ahead of misleading same-size type failures.node --test test/lighthouse-5subj-ab.test.js passed 11/11.bb34e97 on origin/karl/clb-2472-lighthouse-package-2026-05-05.Chandrasekhar then added the bounded live execution path:
c08f3b0 on origin/karl/clb-2472-lighthouse-package-2026-05-05--bounded-request-shapeRPP_BUDGET_APPROVED=1. Under the current 2026-05-06 posture this env var is a mechanical run switch, not a fresh approval requirement.POOL_DELTA_CAP=200 still enforced.UNIT micro-leg stays 4km rather than expanding to 33.6km.node --test test/lighthouse-5subj-ab.test.js -> 15/15node scripts/lighthouse-5subj-ab.js --bounded-request-shape -> exits 2 at budget gatenode scripts/lighthouse-5subj-ab.js --bounded-request-shape --dry-run -> VALID, subjects only Robina/Bathurst/Ascot, no RPP callsA bounded live attempt was started after approval but is INVALID / partial:
reports/pillar1-bounded-live-partial-2026-05-05.mdRPP_BUDGET_APPROVED=1 POOL_DELTA_CAP=200 node scripts/lighthouse-5subj-ab.js --bounded-request-shape (historical harness switch; not a fresh approval gate under the 2026-05-06 posture)1126 vs Arm A 757, delta +369, cap breachapi_call_log rejected rows because the harness had not created the parent pipeline_runs row first; normal DB call counts are therefore unreliable for this partial attempt.f26d355 fix(pillar-1): harden bounded run logging gatesnode --test test/lighthouse-5subj-ab.test.js -> 16/16Robina breach analysis is complete:
reports/pillar1-robina-breach-analysis-2026-05-05.mdsearch_runs.radius_km = 270 from cached baseline run ad0f8db8, while the no-RPP preflight assumed Robina 10km.COMMERCIAL|RETAIL, $2m-$8m, 2022-10-20..2024-10-21, 270km, no area floor.1424 matches at 270km, but about 108 at 10km; the radius mismatch explains the +369 breach.ef270c8 fix(pillar-1): lock Robina bounded radiusnode --test test/lighthouse-5subj-ab.test.js -> 18/18; bounded dry-run remains valid.Senior review completed:
reports/search-parameter-drift-review-2026-05-05.mdSELECT.Top findings:
(property_family, density), calibrated around p95 / 95% comparable coverage.search_parameters_master;PIPELINE_SOP.md now reflects the missing-comparable workflow:
rpp_calls proving call sequence and spend discipline.Remote refs have been refreshed with:
git fetch --all --prune --tags
Branch state:
/home/jon/work/projects/truemarket: master is aligned with origin/master, but has local uncommitted checkpoint/SOP/report/canvas work./tmp/flanders-h6-persist-gap: fast-forwarded to origin/master; no local edits./tmp/bellend-lighthouse: package branch created, rebased, tested, and pushed.Lighthouse worktree status:
karl/clb-2472-lighthouse-package-2026-05-05origin/karl/clb-2472-lighthouse-package-2026-05-05origin/master (79f075a)16f8dddnode --test test/lighthouse-5subj-ab.test.js test/repository-api-call-log-backfill.test.jssplit: CLB-2472 runtime auth leftovers.Canvas:
https://truemarket-canvas.pages.dev/79f075a.Dashboard:
truemarket.servicetruemarket-dashboard.servicegpt-5.4-mini) completed dashboard freshness review.dashboard/public/funnel/index.html.3210, 3450, and 3403; :3000 is not listening.https://truemarket.palermostudio.com/ still returns 502 due to Cloudflare/Tailscale routing, not stale dashboard app content.gpt-5.4-mini) rechecked the route chain:127.0.0.1:3403 -> 200127.0.0.1:8880 with Host: truemarket.palermostudio.com -> 200a090fb4d-3163-435f-806f-d9435e3d48c0 remote ingress only includes studiochimp.palermostudio.com -> http://localhost:8880 plus fallback http_status:404truemarket.palermostudio.com is missing from the tunnel configcloudflared tunnel route dns cannot safely fix it heretruemarket.palermostudio.com -> http://localhost:8880 above fallback and bind the hostname to tunnel a090fb4d-3163-435f-806f-d9435e3d48c0.Barney / cc-connect:
cc-connect.service is active.1478214436325163048./home/jon/work/projects/truemarket.gpt-5.4-mini): completed dashboard freshness/status check.origin/karl/clb-2472-lighthouse-package-2026-05-05.f26d355 logging gate + ef270c8 Robina radius lock).RPP_BUDGET_APPROVED=1 POOL_DELTA_CAP=200 node scripts/lighthouse-5subj-ab.js --bounded-request-shape. Under the current 2026-05-06 posture, RPP_BUDGET_APPROVED=1 is a harness switch, not a fresh approval gate.