BuildBotsBetter
BUILDBOTSBETTER
All Builds
Guided Build · ChatGPT Codex

Rental Leads / Rental Comps

Build an auditable comparison from objective property facts.

90–130 minuteswindows · macos · linuxFree practice; existing tool accounts may have plan limits.

Finish with: A source-linked rental-comparison report with deduplicated comparable properties, median asking rent, size normalization, sample size and documented limitations.

Progress stays in this browser. Export to keep a portable record.

Do this now

Walkthrough

A step demonstration outline; use optional narration while you follow it.

Resources for this step

Check the result

This browser checks the evidence format and your checklist. It cannot inspect your computer or certify a live login.

When it does not work

Finish-line test

Repeat the last product-specific checkpoint from a fresh practice input, preserve actual output, then complete the Build Bot Better guard and restore checks. Export the evidence.

Sources and verification limits

Sources checked 2026-10-05. External tool interfaces and plan availability can change; check the linked official source and local --help.

Complete lesson text and action cards

Source-owned text for offline reading and retrieval. Command success still requires actual local evidence.

Create an objective property profile

Open subject.json. Set area, bedrooms, bathrooms, square feet and currency for a practice property. Use property attributes only; do not collect protected characteristics or screen tenants.

Expected: The subject file contains numeric beds/baths/size, one area and a currency.

Set up the practice folder

Download the resource ZIP at the top of this Build. Extract it into a new folder you own (for example C:\BBBPractice on Windows, or ~/bbb-practice on macOS/Linux). Open a terminal in the extracted folder. Run the version command for your platform. All subsequent commands assume this folder.

Expected: Python reports version 3.10 or newer and the terminal is in the extracted resource folder.

windows

python --version
Get-Location
Get-ChildItem

macos

python3 --version
pwd
ls

linux

python3 --version
pwd
ls

Inspect comparable listings

Open comps.csv and verify the source URL, observation time, currency, size and rent for every row. Use permitted exports/manual observations. Keep asking rents distinct from completed lease rents; note concessions, utilities and fees separately.

Expected: The sample has complete objective attributes and traceable sources; no private tenant data is present.

Run the comparable filter

Run rental_comps.py using subject.json. Open rental-report.json and inspect the included IDs.

Expected: COMPS PASS reports 3 comparable properties and median 2000.0; normalized reference is 2000.0 USD.

windows

python rental_comps.py comps.csv --subject subject.json --out rental-report.json

macos

python3 rental_comps.py comps.csv --subject subject.json --out rental-report.json

linux

python3 rental_comps.py comps.csv --subject subject.json --out rental-report.json

Check sample size and normalization

For each included property divide monthly asking rent by square feet. Compare the median of these ratios with the median asking rent. Write why a three-property synthetic sample cannot establish market value.

Expected: The calculations explain 2.0 USD/sqft and a size-normalized 2000.0 reference for 1000 sqft; limitations are recorded.

Prove the filter respects property criteria

Copy subject.json to subject-empty.json and choose an area absent from the CSV. Rerun. Then add one malformed sqft value to a copy of comps.csv. Record the zero-sample result and the rejected-row reason.

Expected: The absent area yields sample_size 0 with no fabricated median; malformed rows are explicitly rejected.

windows

python rental_comps.py comps.csv --subject subject-empty.json --out empty-report.json

macos

python3 rental_comps.py comps.csv --subject subject-empty.json --out empty-report.json

linux

python3 rental_comps.py comps.csv --subject subject-empty.json --out empty-report.json

Prepare one source-linked lead

Fill lead-review.md for one included property. Record objective facts, observed time, concessions and the next manual action. Keep the report separate from tenant decisions.

Expected: One reviewed lead has the original URL, dated facts, fees/assumptions and a draft next action.

Deliver the final comparison

Use a permitted sample of your own or create at least four clearly synthetic property cases. Include a duplicate and one non-comparable. Run the report and explain every included/excluded ID, sample size and median.

Expected: COMPS PASS and a source-linked report are reproducible, with honest limits and no duplicate IDs.

windows

python rental_comps.py comps.csv --subject subject.json --out rental-report.json

macos

python3 rental_comps.py comps.csv --subject subject.json --out rental-report.json

linux

python3 rental_comps.py comps.csv --subject subject.json --out rental-report.json

Write a repeatable onboarding checklist

Fill in onboarding-checklist.md for your agent. Record AGENTS.md, the tool’s user settings and memory folder, the assigned workspace, permissions, guard location, backup schedule, and a final proof task. Keep the checklist in your project.

Expected: The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification.

Demonstrate the variable-path limit safely

Run workspace_guard.py --self-test. Read the source: the target is resolved before deciding. The variable_target case points at the home folder but performs no filesystem operation. Compare this with a hook that sees only command text.

Expected: GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed.

windows

python workspace_guard.py --self-test

macos

python3 workspace_guard.py --self-test

linux

python3 workspace_guard.py --self-test

Verify the actual protection in your tool

For CLI tools, open the hook/permissions screen and confirm the configured guard is active. Use your tool’s documented pre-command hook protocol; the BBB working reference is linked in Sources. Run a harmless directory listing, then a guard dry-run targeting the profile. Do not execute a destructive profile probe. Grok Bot has no proven local shell guard here: use project-only tasks and reviewed actions, with backups.

Expected: A harmless command runs, the guard dry-run returns DENY, and the checklist records the actual hook protocol and active state or the Grok Bot limitation.

Enable a real backup of memory and project files

Connect a second backup drive. Windows: configure System Protection as additional recovery and use a scheduled copy/File History that explicitly includes hidden agent folders. macOS: configure Time Machine and verify dot folders are included. Linux: use a home backup such as restic/Deja Dup; Timeshift omits /home by default. Download the copy-only profile backup script for your platform, inspect it, and adapt the folder list to your tool. Record the last successful scheduled run; protect backup access because it may contain credentials.

Expected: A backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded.

windows

.\profile-backup.ps1 -Destination D:\Backups\llm-profiles

macos

bash profile-backup.sh /Volumes/YourBackup/llm-profiles

linux

bash profile-backup.sh /media/YourBackup/llm-profiles

Practice a hash-verified restore

Run restore_drill.py with a separate backup directory. The script creates a new proof file, copies it, restores a second copy, and compares SHA256 hashes. Then restore one non-secret file from your actual agent memory backup into a separate scratch directory and open it; do not overwrite the live profile.

Expected: RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch.

windows

python restore_drill.py --backup-root D:\Backups\bbb-practice --work-root practice

macos

python3 restore_drill.py --backup-root /Volumes/YourBackup/bbb-practice --work-root practice

linux

python3 restore_drill.py --backup-root /media/YourBackup/bbb-practice --work-root practice