Add property-pro community ability - #367
Merged
Merged
Conversation
Add Stage 1 product docs, fair-housing guardrails, and three fictitious markdown listing packets so we can implement the voice tour next. Co-authored-by: Cursor <cursoragent@cursor.com>
Implement hello-triggered room tours from markdown listing packets, fair-housing redirects, question logging, and a lobby that keeps visitors in PropertyPro until they say hello again. Co-authored-by: Cursor <cursoragent@cursor.com>
Contributor
🔀 Branch Merge CheckPR direction: ✅ Passed — |
Contributor
✅ Community PR Path Check — PassedAll changed files are inside the |
Contributor
✅ Ability Validation Passed |
Contributor
🔍 Lint Results✅
|
…vior Align triggers, lobby flow, contact fallbacks, and feature checklist with main.py; restore a clean community .openhome.json without local push IDs. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
- .openhome.json: the OpenHome CLI's own local tooling metadata (capability_id, version tracking), scaffolded by `openhome create` and committed by accident. Carries no ability behavior and is account/environment state, not source. - notes/PRODUCT_DISCOVERY.md: internal design notes (sample dialogue, non-goals, next-slice planning). Useful during development, not part of what ships. Kept everything the ability actually reads at runtime: main.py, fair_housing.md, the listing fixtures, and .gitignore (which correctly excludes the ability's own runtime-written files -- tour_questions.md, propertypro_prefs.json, knowledge_gaps.json -- from being committed). Updated README.md's project-layout tree and removed a link to the deleted notes file so nothing dangles.
…atch()
- .gitignore removed: none of the three files it listed were ever committed
(confirmed via git ls-files), so there was nothing for it to protect.
- HOTWORDS was checked with plain substring matching ("hw in t"), and "hi" is a
substring of ordinary words -- "this", "which", etc. A visitor mid-tour asking
"is this room big?" hit _is_restart() and got reset to the foyer greeting
instead of an answer. Replaced with a word-boundary regex, same style as the
EXIT_PATTERN already in this file.
- Removed does_match(): it duplicated trigger words in code that belong to the
dashboard config, a second source of truth that can drift from the first with
no ability to notice. RESTART_PATTERN stays, since that check happens entirely
inside the ability's own conversation loop (deciding whether an utterance means
restart vs. real question) and the dashboard has no way to make that call.
Verified: previously-false-positive inputs ("is this room big?", "which room has
the fireplace") no longer trigger a restart; real restart phrases (hello, hi,
start tour, property pro, showing tour) still do.
…kground) Stale files removed: - fixtures/listings/88-canal-loft-richmond.md and 7-pine-sparse-chesterfield.md -- neither is reachable through the running ability. active_listing_id is set once from propertypro_prefs.json and there is no voice command anywhere in main.py that changes it, so these only ever loaded if someone hand-edited that file. - fixtures/LISTINGS.md -- an index of the three fixtures above, zero references from main.py, and now stale (documents two files that no longer exist). README updated to match: dropped the two rows and the dead LISTINGS.md link, corrected the "switch fixtures" instructions to say plainly that no voice command does this yet, removed the tree entry. Bug fixed while reading through main.py for anything left behind: _match_room_nav checked "back"/"next" as plain substrings, the same class of bug as the does_match() HOTWORDS issue fixed last commit. Concretely, on the one listing that ships, the tour's actual last room is named "backyard" -- asking "is there a backyard?" from the basement matched "back" and navigated to upstairs instead of the backyard. Fixed with word-boundary patterns (NEXT_ROOM_PATTERN / BACK_ROOM_PATTERN), matching EXIT_PATTERN's existing style in the same file. "next" keeps one residual, harder-to-avoid ambiguity (it's also a preposition -- "next to", "next door"), noted in the code comment rather than silently left. Verified against the real shipped listing: navigating to backyard now resolves correctly (index 6), the restart-phrase fix from the prior commit is intact, and main.py still parses and imports cleanly.
uzair401
approved these changes
Aug 31, 2026
uzair401
left a comment
Contributor
There was a problem hiding this comment.
Solid ability, the fair-housing guardrails are handled well. Trimmed unused fixture/notes files, removed the does_match() duplication, and fixed two substring-matching bugs (_is_restart and room navigation) that misfired on ordinary words like "this" and "backyard". Approving.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
tour_questions.md.Test plan
python3 validate_ability.py community/property-pro/passeshello,start tour,begin tour,property proMade with Cursor