All 59 of Gera's open propflowai PRs as of 19:03Z, each with its verdict from a read-only survey. Finished: 59 of 59. Progress: the cleanup board.
| #19603 | Already merged MERGED | feat(conversations): emergency on-call emails, calls and pickups show on the resident's th Emergency on-call calls/emails/pickups show on the resident thread as team notices (part 3) evidencegh pr view state=MERGED |
| #19608 | Already merged MERGED | feat(conversations): a call forwarded to the maintenance line shows on the caller's thread A forwarded maintenance-line call shows on the caller thread as a team notice (part 2) evidencegh pr view state=MERGED; find-pane OPENED #19577,#19608 |
| #19607 | Leave: someone is working on it LEFT with its live owner | feat(voice): Clara answers Situs Group's line β bind to production Triage, route to situs- Bind Situs Group's line to production Triage, route to situs-front-door (Situs line part 3) evidenceDRAFT; depends on #19591 and #19592 (both OPEN, BLOCKED); last commit 17:35Z; lane transcript quiet since 17:54Z, parent c2a7b30b ALIVE |
| #19611 | Leave: someone is working on it GREEN, WAITING ON GERA: comment "@claude review" (workflow-file review needs a person) | chore(ci): the docs-only fence's own prose no longer denies the `unlabeled` route #19536 a The docs-only fence's own prose stops denying the unlabeled release route #19536 added (row bug-the-docs-only-fence-applies-a-hold...) evidencelast commit 17:34Z; lane quiet since 17:50Z, parent 8d699f3b ALIVE and mentioned it at 19:18Z; +39/-14 1 file |
| #19626 | Leave: someone is working on it MERGED | chore(work-orders): remove the "+ New Work Order" button from the Work Orders page Remove the "+ New Work Order" button from the Work Orders page evidenceMERGEABLE/CLEAN; propflow-code-reviewer APPROVED at head c6f8c331; last commit 17:53Z; lane quiet since 18:11Z, Driver 5447c10a ALIVE |
| #19630 | Leave: someone is working on it MERGED (by its owner) | chore(scope): delete the dead one-company-at-a-time states (dashboard, Clara insights) Delete the dead one-company-at-a-time states (dashboard, Clara insights) evidencelast commit 19:06Z; APPROVED at head 5377f735 19:17Z; CI in progress; Driver 5447c10a ALIVE |
| #19633 | Leave: someone is working on it MERGED | fix(scope): tenant + prospect detail open at All companies; email log answers several comp Tenant + prospect detail pages open at All companies; email log answers several companies evidencelast commit 18:31Z; APPROVED at head 55573596; merge-tree vs origin/main clean (0 conflicts); GitHub mergeable UNKNOWN; worktree file touched <60 min (data/admin-audit.jsonl only); lane quiet since 18:38Z, Driver ALIVE mentioned it 19:19Z |
| #19634 | Leave: someone is working on it MERGED | fix(tests): the escaped-DynamoDB trace names the reader, not an empty list (part 1 of 2) Escaped-DynamoDB trace names the reader, not an empty list (part 1 of 2) evidencefind-pane OPENED #19634,#19666 lane WRITING 1s ago; worktree src file modified <60 min; last commit 18:37Z |
| #19639 | Leave: someone is working on it LEFT with its live owner | feat(renewals): the board answers "All companies" β a bounded page of every company's buil Renewals board answers All companies with a bounded page of every company's buildings evidencefind-pane OPENED #19639 lane WRITING 5s ago; last commit 18:38Z |
| #19640 | Leave: someone is working on it LEFT with its live owner | fix(home): How-it-works card as tall as the Solutions panels (480 phones/iPad, 550 desktop How-it-works card matches the Solutions panel heights (480 phones/iPad, 550 desktop) evidenceMERGEABLE/CLEAN; APPROVED at head 0b0b1032; last commit 18:47Z; Driver 048857ea (claude-redesign-landing) quiet 17.6 min |
| #19641 | Leave: someone is working on it MERGED | test(life-safety): put the gas door's RUNTIME reach arm under a mutation control Put the gas door's RUNTIME reach arm under a mutation control evidencefind-pane OPENED #19641 lane WRITING 2s ago; control.ts modified <60 min; APPROVED at head b74a8a70; merge-tree clean |
| #19642 | Leave: someone is working on it MERGED | feat(search): answer "All companies" from a bounded corpus instead of refusing (part 1) Search answers All companies from a bounded corpus instead of refusing (part 1) evidencelane transcript written 19:18Z; worktree touched <60 min; last commit 18:46Z |
| #19643 | Leave: someone is working on it MERGED | ci(review): re-dispatch a review refused for a stale workflow copy from main, once per hea Re-dispatch a review refused for a stale workflow copy, from main, once per head evidencelast commit 19:02Z; lane written 19:15Z; test file modified <60 min; claude[bot] APPROVED at head dbf9dea7 |
| #19644 | Leave: someone is working on it MERGED | fix(vendors): the vendor page's jobs answer every selected company, never 'pick a company' The vendor page's jobs answer every selected company, never 'pick a company' evidencegera-propflow review 19:14Z; lane written 19:14Z; Driver ALIVE |
| #19648 | Leave: someone is working on it MERGED (by its owner) | fix(cost): the 09:00Z spine cron stops starting a whole-table scan it cannot finish The 09:00Z spine cron stops starting a whole-table scan it cannot finish (dock appfolio-sync-reads) evidencelast commit 19:02Z; claude[bot] APPROVED at head b3fbcd44 19:14Z; lane WRITING 11s ago |
| #19653 | Leave: someone is working on it MERGED (by its owner) | feat(scope): one shared "Choose one company" state β Portfolio Intelligence, Atlas, Ask Cl One shared "Choose one company" state for Portfolio Intelligence, Atlas, Ask Clara (part 1/2) evidencegera-propflow review at cf8427fe 19:16Z (newer than fetched head d129c48d, so pushing right now); worktree test modified <60 min |
| #19660 | Leave: someone is working on it MERGED | fix(clara): a no-home caller with a call-center backup is connected, never read the close A no-home caller with a call-center backup is actually connected, never read the close evidencelane transcript written 19:21Z; worktree results file modified <60 min; APPROVED at head b9ed5f27; merge-tree clean |
| #19666 | Leave: someone is working on it MERGED | fix(tests): the lease-answer gauntlet stops calling real DynamoDB β one stub, two named tu The lease-answer gauntlet stops calling real DynamoDB (part 2 of 2) evidencefind-pane OPENED #19634,#19666 lane WRITING; MERGEABLE/CLEAN; APPROVED at head 17e6131d |
| #19670 | Leave: someone is working on it LEFT with its live owner | Buildings table: centred columns, one-line Self-guided header, header tooltips Buildings table: centred columns, one-line Self-guided header, header tooltips evidencesession e659b78f ALIVE (2 min); last commit 18:57Z; claude[bot] APPROVED at head d97f1674 |
| #15349 | Needs a person WAITING ON GERA: earlier decision page b91801885 | fix(integrations): opening a connections status page writes nothing and refreshes no Micro Opening a connections status page stops writing a health stamp and stops forcing a Microsoft token refresh (read-only status, PR 3 of 3) evidencemain still calls checkChannelHealth in company-channels/status/route.ts:173,241 and admin/companies/[id]/connections/route.ts:113,182; MERGEABLE; draft; π’ at e3f751b25 (head 12db3cd1d is merge-main only); required review red only from the hold |
| #15419 | Fix conflicts, then merge GREEN, WAITING ON GERA: take out of draft (adds a daily report-only production schedule) | feat(admin-status): a daily check reports which login skips two-factor (smoke-mfa part 1) Daily report-only check that names which login skips two-factor in production and whether it is a platform admin (smoke-mfa part 1) evidenceno smoke-mfa-exemption detector on main; π’ at head 7d92ed0d8; CONFLICTING 4 files (automations.toml, cron-inventory doc, cron-scope-inventory.ts + its drift test) |
| #15434 | Needs a person WAITING ON GERA: earlier decision page b91801885 | fix(auth): production scripted sign-ins use the two-factor test login; test grades get the Production scripted sign-ins use the two-factor nightly login; grading exclusion gets its own setting (smoke-mfa part 2) evidenceusesProdSigninIdentity and GRADING_EXCLUDED_GRADER_USER_IDS absent on main; siblings #15457 (2b) and #15638 (2c) merged but defer identity choice to this PR; π‘ at head; CONFLICTING 3 files (2 runbooks, smoke-password-no-fallback drift test) |
| #15794 | Fix conflicts, then merge GREEN, HELD for an attended merge (merge before #15798) | ci(scripts): a runnerless script marks itself β retire the shared unreachable-baseline JSO scripts/ runner ratchet reads a per-file marker and deletes the shared unreachable-baseline JSON (WS2 part 2 of 2) evidencescripts/ci/scripts-unreachable-baseline.json still on main; part 1 #16196 merged; CONFLICTING 2 files (the JSON, check-scripts-runner-ratchet.ts); Unit Tests red (5s); π’ dismissed at head |
| #15798 | Finish and merge GREEN, HELD for an attended merge (after #15794) | [HOLD] docs(reviewer): scripts/ runner ratchet is read by per-file marker (after #15794) Reviewer prompt paragraph updated for the per-file scripts-runner marker (after #15794) evidencereviewer-core.md:18 on main still names the JSON; MERGEABLE; π’ at head |
| #15820 | Being checked CLOSED, rebuilt as #19731 (GREEN, HELD: caution tag) | ci: bookkeeping guard pins reach the PR selector (WS1 class a, part 2) Let bookkeeping guard pins reach the PR selector so queue failures surface on the PR first (WS1 class a part 2) evidence#15860 (merged 10-03 19:02Z) took bookkeeping pins out of the merge-queue gate and #16932 (10-06) out of the queue Full set, so the queue first-fails this targets no longer happen; ci.yml:3060 still exports GUARD_PIN_KINDS=fence on PRs; CONFLICTING 2 files (ci.yml, guard-select.test.ts) |
| #15873 | Fix conflicts, then merge GREEN, HELD for an attended merge (caution tag) | test(guards): each pipefail exemption lives in its own script, not a central list (WS2 row Each pipefail exemption lives as a comment in its own script instead of a central GRANDFATHERED list (WS2 row 4) evidenceGRANDFATHERED still at shell-pipefail-ratchet.test.ts:67 on main; π’ at head ec4b7aef6; CONFLICTING 1 file (the test) |
| #16220 | Needs a person WAITING ON FEDE: test Microsoft sign-in setup (b92009969) | feat(outlook): PKCE on the person calendar sign-in β one-time server-side verifier (p3-att PKCE on the Outlook person calendar sign-in with a one-time server-side verifier (p3-attachment-r3) evidenceno PKCE in src/app/api/integrations/outlook on main; MERGEABLE; draft; Unit Tests red on a 10-03 run two commits behind head; no verdict at head |
| #16943 | Needs a person WAITING ON FEDE: test Microsoft sign-in setup (b92009969) | feat(calendar): Outlook person sign-in records its calendar endpoint beside primary (p3-r3 Outlook person sign-in records its calendar endpoint beside primary (p3-r3 part 3a) evidenceno connectCalendarEndpoint in outlook routes on main; MERGEABLE; draft; plan review π΄ contradicts (decider f2842d58f ruled B: endpoint must not copy the token); π‘ at 57492b5c8 |
| #16944 | Fix conflicts, then merge CLOSED, rebuilt as #19709 (MERGED: security fix) | fix(voice): a spoken number never passes the property-manager gate A spoken phone number can never pass the property-manager gate on a voice call with no caller id evidenceresolvePmGate on main still keys on resolvedCallerPhone (wide chain) at voice/tools/[tool]/route.ts:572-600; CONFLICTING 4 files incl. route.ts and package.json; π’ only at older cd4e82a3e, no verdict at head |
| #17180 | Finish and merge GREEN, HELD for an attended merge (caution tag) | ci: test-file lists reach vitest by the binary, never npx; the guard manifest rides an art Test-file lists reach vitest by binary not npx, guard manifest travels as an artifact (scaling cliffs 1/3) evidenceci.yml:3226 on main still runs npx vitest run ... $GUARD_FILES; MERGEABLE CLEAN; π’ at head 79bcf7237; required checks pass |
| #17189 | Finish and merge GREEN, HELD for an attended merge (caution tag; merge soon, main drift ejects it) | ci: every page of a run's jobs reaches the deciders; open-PR lists cannot truncate silentl Every page of a run's jobs reaches the deciders; open-PR lists cannot silently truncate (scaling cliffs 3/3) evidencemain still reads jobs?per_page=100 at ci-followups.yml:163 and auto-merge-all.yml:1824, watchdog --limit 100 at review-verdict-watchdog.yml:361; MERGEABLE CLEAN; π’ at head |
| #17342 | Needs a person WAITING ON GERA/FEDE: remove the automatic hold (decisions page b92009969) | chore(admin-handoff): two comments #15710 made stale (part 7 follow-ups) Two comments #15710 made stale (sensor exit line and administeringParty doc) evidencelink-user-to-spine.ts:129 on main still says already a person at; MERGEABLE; π’ at head; required review red only from hold |
| #17850 | Adopt and finish LEFT with its live owner (pushed its own fix; Fede's hold remains) | chore(p9-deletions): operator text and the ops runbook name pmsCredentialUserId, not owner Operator text and ops runbook name pmsCredentialUserId, not ownerId (step 10 Fy part 3) evidencedocs/runbooks/ops.md:61,73 on main still say ownerId; π΄ at head 72d843fca: required Unit Tests red, property-owner-id-retired.drift.test.ts positive-control floors fall below minimum after merge with main |
| #17881 | Close: already done another way CLOSED (replaced by #18550) | fix(leasing): the tour slot hold runs at every building β retire the per-building ramp (p9 Tour slot hold runs at every building; retire the per-building ramp evidence#18550 (merged 2026-10-10, 6b2665505d6) deleted the ramp list; slot-hold-flag.ts and isSlotHoldEnabled gone from main; CONFLICTING 7 files |
| #17890 | Fix conflicts, then merge QUEUED to merge (approved, type check passed) | fix(ci): release-staleness-alert stops trusting the committer-date fallback (release-stale release-staleness-alert stops falling back to the committer date when merged_at is unreadable evidencemain release-staleness.mjs:92-94 still falls back to the committer date; #16185 (10-06) fixed the earlier cause and this is the follow-up it missed; CONFLICTING 1 file (test); no review verdict, no required checks reported |
| #17891 | Close: already done another way CLOSED (replaced by #17293) | fix(red): pin the clock in leasing-tools' shared-handset reschedule test (heavy-lane-red # Pin the clock in the leasing-tools shared-handset reschedule test (heavy-lane-red #17288) evidence#17293 (2daf5a73cd5) pinned that block's clock (PINNED_NOW / NEAR_WEEKDAY); issue #17288 closed 10-07 |
| #17910 | Needs a person WAITING ON AWS: index-limit raise requested 10-08 (case 179146220300089) | feat(conversations): a building's list reads conversation-building-list-index β the swap ( A building's conversation list reads conversation-building-list-index (p9-conv-index part 5b, the swap) evidenceconversations route on main does not read the index; parts 0-5a merged; draft; CONFLICTING 2 files (conversations/route.ts, dynamo/conversation.ts); no verdict |
| #17996 | Needs a person MERGED (Gera's yes on b91492058, executed and receipted) | [HOLD] fix(email): a mailbox-less building replies from the sibling mailbox that holds the A building with no mailbox replies from the sibling building mailbox that holds the thread root (selector part 2/2) evidencepart 1 #17973 merged; no sibling rung in send-mailbox-selector.ts on main; MERGEABLE; π’ at head |
| #18189 | Needs a person WAITING ON GERA: earlier decision page b91938829 | A handyman's job at an apartment building names its unit or a shared area (p9-asset-type-v A handyman's job at a residential building must name its unit or a shared area (p9-asset-type part 3a) evidenceno UNIT_UNKNOWN/common_area on main; part 2 #18165 and 1b #19397 merged; draft; CONFLICTING 1 file (handle-create-work-order.ts); π‘ at older sha |
| #18235 | Close: already done another way CLOSED (replaced by #17328) | fix(leasing): a lead email ending in a silent empty reply now gets its one outcome stamp ( Lead email ending in an empty reply gets a lead-outcome stamp (Sentry 1FB) evidencemain process-email-record.ts:1339-1344 already records held/skipped 'empty-reply:*' outcome on the empty-reply exit; blame b4fab788ff5 = #17328 (10-07 02:49, 1h after this stranded commit) |
| #18236 | Close: already done another way CLOSED (replaced by #17847) | fix(capture-drift): the website visitor thank-you is noise, not drift (sentry) Website visitor thank-you emails read as noise, not capture drift evidencemain email-noise-filters.ts classifyEmailDelivery step 3 'nonParticipant declared true -> website-visitor send = noise', landed by e5fee7ddaf8 (#17847); this branch is the subject-match alternative |
| #18389 | Close: already done another way CLOSED (replaced by #18396) | fix(voice): tool dedup force-deletes orphans held only by deleted agents' branches Stop apply-sync going red on 25 ElevenLabs tool-delete 409s by force-deleting orphans held by deleted agents' ghost branches evidence#18396 (merged 10-10 bf1b244b514) fixed the same red step by skipping 409s; main dedup-elevenlabs-tools.ts:22,284,335 'expect a 409 skip' |
| #18503 | Adopt and finish MERGED | fix(leasing): a denied applicant who asks for a closed day is routed to the team, not told Denied applicant asking for a closed day is routed to the team, not told only 'that day won't work' (#18496 review follow-up) evidencenot on main (clara-leasing.ts:1410 still old text); merge-tree with main clean; π’ at head 8ac446a9a; CLEAN |
| #18847 | Fix conflicts, then merge GREEN, HELD on its own conditions (live test call in office hours + eval re-run; merging syncs prod voice prompts) | fix(voice): Leasing dials a person only for a leasing caller; a hand-back without leasing Leasing dials a person only for a real leasing caller; other person-asks take a message (main-line greeting part 3a) evidencedistinctive rules ('ANYONE ELSE ASKING FOR A PERSON IS NEVER DIALLED') absent from main leasing.ts; π’ at head 330b63ea2 |
| #18891 | Needs a person WAITING ON GERA: earlier decision page b91775948 | fix(ci): the production promote window defaults to 30 minutes again, pinned by a test that Put the production promote batch window code default back to 30 min, pinned by a test evidencemain promote-window.env still DEFAULT=5; repo variable PROMOTE_WINDOW_MINUTES already 30; held for decision b91774562, which is RESOLVED(withdrawn) and re-raised as a two-question page |
| #18936 | Needs a person WAITING ON GERA: earlier decision page b91801885 | fix(auth): a staff sign-in code is never texted from a line PropFlow does not own (registr Staff sign-in codes are never texted from a line PropFlow does not own (registry-checked sender) evidenceno main commit on mfa-sms-sender.ts since 10-12; body: prod sends codes from Camellia's line today, merge would stop all staff SMS codes until prod sender moves; draft |
| #19129 | Needs a person WAITING ON GERA/FEDE: remove the automatic hold (decisions page b92009969) | refactor(scripts): the ratchet's triage note becomes one line per sentence (bug-704) Record the tour-decider-replay ratchet ruling and make the baseline note one line per finding (bug-704) evidencegreen at head 0c2cb37ed, review check 'Merge hold: hold-for-review label'; label applied by docs-only-fence workflow via AUTOMERGE_TOKEN (shows as fede-propflow); session comment 10-14 08:49 'needs ONE human click' |
| #19348 | Leave: someone is working on it LEFT with its live owner | Maintenance: after-hours heads-up email to on-call for Clara's routine work orders After-hours routine work orders email the company's on-call people a heads-up (customer ask, Gera 'Email only') evidenceroot-fix pushed 17:17Z after queue ejection; π’ APPROVED at head d226406f9 17:21Z; CLEAN; e659b78f transcript 4 min old |
| #19368 | Fix conflicts, then merge LEFT with its live owner (came back and pushed) | fix(voice): a status call about an emergency reads the chain; the gas bullet covers a page Emergency status call-backs read the on-call chain; gas bullet only applies once a page went out (#18543 E6, #18540) evidenceπ΄ BLOCKING at head 30ff1db98: new guard keys on 'caller had a chain here in 2h', so a NEW gas/life-safety emergency in that window pages nobody; chain_ringing absent from main |
| #19406 | Needs a person WAITING ON FEDE/GERA: ship the no-building line fix? (b92009969) | fix(voice): an inbound call to a line that names no building no longer takes the caller's An inbound call to a line naming no building no longer adopts the caller's own building (supersedes closed #18173) evidencebody 'DRAFT ON PURPOSE - waiting on a founder'; design-final Β§10 step 4 + #7731 + board row p6-fail-open clause (b) make deleting the fall-back a Fede+Gera call; draft, no review run |
| #19426 | Adopt and finish MERGED | A job's unit is optional in the type system β ST-129's type strip (p9-asset-type-vocabular A work order's unit becomes optional in both type trees, each reader handles absence honestly (ST-129 type strip) evidencedraft; all checks green at head e1f163e85; review SKIPPED because draft; body: 'authoring lane is a sub-agent with no turn to resume' |
| #19499 | Needs a person LEFT with its live owner (security driver) | fix(leasing): a vendor lookup that cannot answer no longer admits to outreach (false-zero Vendor-lookup failure in the outreach gate blocks auto-enrolment instead of admitting (false-zero part 1) evidenceSmith comment: decider f3f16ea55 ruled WAIT; overturning pinned test outreach-trigger.test.ts:1126 'FAIL-OPEN: a role-lookup error never drops a genuine lead' is a deliberate decision; replay coverage under 30 days; Unit Tests red; draft |
| #19506 | Needs a person WAITING ON GERA/FEDE: remove the automatic hold (decisions page b92009969) | chore(tours): the slot hold is not ramped any more β correct six prose sites that still sa Correct six comment sites still saying the tour slot hold is ramped (retired by #18550) evidencecomment-only; π‘ non-blocking at head fdcef9925; hold-for-review applied by docs-only-fence (as fede-propflow) 08:02Z; same 'ONE human click' comment as #19129 |
| #19548 | Adopt and finish MERGED (decider f4b014d79) | feat(ci): the one proof that needs a production build gets a lane, fenced to stage twice A CI lane that builds, serves in production mode and runs the stage MFA-reset proof evidenceπ’ APPROVED at head 9c48ad3ca; lane step red BY DESIGN (no stage identity, exit 5), not a required check; driver says .github is a dangerous path so the merge is the decider's |
| #19590 | Leave: someone is working on it MERGED | fix(identity): the email lease-answer gate reads this building's population, and an unread Email lease-answer gate reads this building's population; an unreadable read no longer says 'not a resident' (ruling ffb66ae40 part 3) evidencesession comment 19:01Z: only red is DDB Escape Gate, proven pre-existing on main; fix is #19666 (behind #19634) opened by a live lane of 8d699f3b |
| #19591 | Needs a person MERGED | feat(phones): register Situs's main line as forwarding into Clara (loop guard) Register Situs's real main line as forwarding into Clara so the loop guard refuses it as a transfer target evidenceπ’ APPROVED at head 62c625850; stale failed 'review' job beside a passing one; owner sessions live, push 16:45Z |
| #19592 | Needs a person MERGED | feat(voice): import Situs's Clara number into ElevenLabs on merge, unassigned (Situs line, Import Situs's Clara number +17207404240 into ElevenLabs on merge, no agent bound (part 1) evidenceπ’ APPROVED at head d7a3a99ca; merge triggers sync-phone-numbers.yml POST into prod EL and rewrites the Twilio voice webhook; owner live |
| #19593 | Leave: someone is working on it LEFT with its live owner | feat(scripts): dry-run-first provisioner for Situs Group's front-door nameplate (Situs lin Dry-run-first script to create PROP#situs-front-door on the real Situs company (part 2) evidenceπ‘ non-blocking at head b30ca63e0; CLEAN; merging only adds a script; --apply is Gera's and the prod-property hook refuses it without his phrase |
| #19600 | Needs a person WAITING ON GERA/FEDE: remove the automatic hold (decisions page b92009969) | test(incoming-resident): count the #19540 refusal (zero so far, window and controls named) Count the #19540 inbound-resident refusals (zero so far) and pin the log line the count depends on evidenceπ’ APPROVED at head f02415751; hold-for-review by docs-only-fence (as fede-propflow) 17:15Z; fence's own comment says the docs-only claim is withdrawn so the hold is releasable; last push 17:26Z |