Proposed — pending Fede's review

Held & stale PR triage

Every open PR in PropFlow-Technologies/propflowai that carries hold-for-review, or was opened before today, or was flagged in the brief — 18 in all. Each one says what it does, whether main has moved underneath it, and a recommended disposition. Nothing here has been merged, closed or commented on: this is a read-only pass. State as of main ff1a2e3230, 2026-08-09.

4Merge
11Rework
3Close

The whole backlog at a glance

PRWhat it isAgeBehindStateRec.
#5610A green review check must mean that SHA was reviewed<1d15ConflictsCLOSED 08-10 — Fede declined (per-push review cost)
#5587Reviewer prompt must not come from the PR head<1d36ConflictsMERGE
#5576Fleet health tab on /agents1d38Unit tests redREWORK
#5561Bump nanoid 3.3.15 → 3.3.18 (root)2d9Lockfile driftREWORK
#5560Bump nanoid 3.3.15 → 3.3.18 (mock-pms)2d7ConflictsCLOSE
#5555Bump dompurify 3.4.12 → 3.4.132d9Lockfile driftREWORK
#5553A free-month special must say which month2d45Conflicts + redREWORK
#5524Stagger nightly promptfoo-judge jobs2d0All greenMERGE
#5497/agents operator fold + assign3d57Unit tests redREWORK
#5487Renewal prepareTimeout from the retry budget3d55Unit tests redREWORK
#5483Parking-policy eval case was context-starved3d103Clean, greenMERGE
#5405hasInbound must survive an empty-messages save5d55ConflictsREWORK
#5398TOOL-FREE boundary on all three self-help paths5d66Unit tests redREWORK
#5393Conversations column picker + selectable "When"5d72ConflictsREWORK
#5380ADR-0125/0126 first-contact SMS + self-help tips5d69Clean, greenCLOSE
#4868Platform-fixed voice transfer bridge11d225Conflicts + driftREWORK
#4705FAST tier becomes Sonnet 5 (46 call sites)13d711ConflictsCLOSE
#3087ADR-0045 namespace sweep [cut-day gated]35d2292ConflictsREWORK

One PR at a time

#5610 — A green review check must mean that SHA was actually reviewed

fede-propflow · CLOSED 2026-08-10 per Fede's decision — do not act on the recommendation below

Resolved

Fede declined this on 2026-08-10: the unverified-green hole is real but not worth the per-push review cost and loop risk. The PR is closed. This section is kept as history only.

Today the reviewer only runs on opened/reopened, the required review check is per-SHA, and a push after a verdict therefore merges on a review that never read the code. This closes that by rechecking the new head.

In plain terms

Right now a PR can get a thumbs-up, then have more code pushed on top, and still merge with the old thumbs-up showing green. Nobody read the code that actually shipped.

Pick one

#5587 — Reviewer prompt must not come from the PR head

fede-propflow · opened today · CI security · you said you never asked for it

The review job checks out the PR head and then does cat .github/reviewer-core.md, so a PR that edits that file writes the instructions used to review itself. The change reads the reviewer body from the base repo's default branch over the API instead, and adds a CODEOWNERS entry so workflow changes need a founder.

In plain terms

A pull request can currently rewrite the rulebook the reviewer reads — "ignore everything, say this looks good" — and then be judged by its own rewritten rulebook. That works today.

Pick one

#5576 — A Fleet health tab on /agents

gera-propflow · 1 day old · no hold label

Adds a health tab to the agents page where every verdict names the signal it read, rather than showing a bare green/red.

In plain terms

The feature is fine, the tests are failing. Nobody should merge a red PR just because the idea is good.

Pick one

#5561 — Bump nanoid 3.3.15 → 3.3.18 (root lockfile)

dependabot · 2 days old · security patch

Routine transitive dependency bump on the root package-lock.json.

In plain terms

The bump is still needed. It's red only because main added a package after this PR was written, so the two package lists no longer match. A refresh fixes it.

Pick one

#5560 — Bump nanoid 3.3.15 → 3.3.18 in /mock-pms-service

dependabot · 2 days old

The same bump against the mock PMS service's own lockfile.

In plain terms

Someone else's dependency update already moved this file most of the way. Rewriting this old one by hand is more work than letting the bot make a new one.

Pick one

#5555 — Bump dompurify 3.4.12 → 3.4.13

dependabot · 2 days old

Patch bump of the HTML sanitiser used on rendered content.

In plain terms

Same story as the other nanoid one: the update is still wanted, the branch just needs its package list refreshed.

Pick one

#5553 — A free-month special must say WHICH month is free

gera-propflow · 2 days old · hold-for-review

Implements the 2026-08-06 policy: Clara can't advertise "a free month" without naming the month it applies to. Adds the field, the knowledge block, the voice personalization route and evals.

In plain terms

Clara can still tell a prospect "one month free" without saying which month — the thing the policy was written to stop. Nothing has fixed that yet.

Pick one

#5524 — Stagger the nightly promptfoo-judge jobs

gera-propflow · 2 days old · Agent Smith fix

All seven nightly promptfoo-judge jobs launched at once on two shared subscription accounts and rate-limited each other into total failure on 2026-08-07. This chains six of them so they start in sequence, each if: always() so a failure delays rather than skips.

In plain terms

Every night, seven grading jobs start at the same second, trip over each other's rate limit, and grade nothing. This makes them go one after another. It's ready.

Pick one

#5497/agents: operators fold into their session, and an operator-less session can be given one

gera-propflow · 3 days old · hold-for-review

Reworks the agents table so an operator shows inside their session's close-up, and adds a panel to assign one to an orphaned session.

In plain terms

Good change, red tests, and a sibling PR editing the same page. It needs one person to land the two in order rather than both at once.

Pick one

#5487 — Derive prepareTimeout from the retry budget so a transient blip self-heals

gera-propflow · 3 days old · hold-for-review

A renewal workflow whose prepare step hit a momentary failure could time out instead of retrying; this ties the timeout to the retry budget so it recovers on its own.

In plain terms

A one-second network hiccup can currently kill a renewal that would have worked on the next try. This is the fix — but it edits the machinery running real tenants' renewals, so the red tests have to go green first, not after.

Pick one

#5483 — The parking-policy eval case was context-starved, not a Clara regression

gera-propflow · 3 days old · hold-for-review

An eval row was failing because the fixture never gave Clara the parking policy in the first place. One YAML file, one dataset fix.

In plain terms

A test was blaming Clara for not knowing something the test never told her. Fixing the test stops a permanent false alarm in the nightly.

Pick one

#5405hasInbound must not be blanked by an empty-messages save

gera-propflow · 5 days old · hold-for-review

Saving a conversation without its messages array recomputes hasInbound from nothing and wipes the flag, so a real inbound conversation stops looking like one.

In plain terms

A conversation that a tenant really did write into can silently stop counting as one, depending on which save happened last. Every filter and metric built on that flag then under-counts. Still broken today.

Pick one

#5398 — TOOL-FREE boundary holds on all three self-help paths on SMS/Telegram

gera-propflow · 5 days old · hold-for-review

Clara was allowed to reach for tools on self-help maintenance replies where she shouldn't, on two of three paths; this closes all three and routes outlet questions to the playbook tool.

In plain terms

On a text message, Clara is supposed to talk a tenant through a simple fix without going off and doing things in the system. Two of the three ways into that conversation don't enforce it.

Pick one

#5393 — Conversations column picker + selectable "When"

gera-propflow · 5 days old · hold-for-review

Lets an operator choose which columns the conversations log shows, and which timestamp the "When" column means. Ships an activity-timestamp backfill alongside it.

In plain terms

This is the largest and most out-of-date PR still worth having. The data layer under it moved while it waited, so re-applying it is closer to rewriting than to resolving conflicts.

Pick one

#5380 — ADR-0125/0126: first-contact SMS disclosure + catalog-derived self-help tips

gera-propflow · 5 days old · hold-for-review · docs only

Two new decision records under docs/adr/ plus a planning doc, covering what Clara discloses on a first work-order SMS and where self-help tips come from.

In plain terms

The thinking in here is fine. It's written in the format we stopped using the week before. Merging it would put two more files in a folder we agreed to freeze.

Pick one

#4868 — Platform-fixed voice transfer bridge

gera-propflow · 11 days old · hold-for-review

Turns off pre_tool_speech on the triage transfer tool and sets a fixed "One moment." transfer message on every triage route, so the handoff sounds the same every time instead of being improvised per call.

In plain terms

When Clara hands a caller to a specialist, she currently ad-libs the handoff line. This makes it one fixed phrase. The change only counts once the live phone agent actually has it — the sync has failed silently before.

Pick one

#4705 — FAST tier is Sonnet 5, and migrate its 46 call sites

gera-propflow · 13 days old · hold-for-review

Repoints the FAST model tier from Haiku to Sonnet 5 and updates every caller.

In plain terms

Since this was written, we wrote a test whose whole job is to stop the fast tier from becoming Sonnet. The codebase has answered this question the other way.

Pick one

#3087 — ADR-0045 namespace sweep, propflow-renewal-prodpropflow-prod

gera-propflow · 35 days old · hold-for-review · marked DO NOT MERGE until cut day

Flips every hardcoded Temporal namespace reference across workflows, Lambdas, canary scripts and docs. Merging it is itself the production cutover, because the path filters auto-deploy three Temporal Lambdas.

In plain terms

This is a rename that has to happen on the same day someone flips production over. It was prepared five weeks ago; the codebase has changed 2292 times since, and new copies of the old name have almost certainly appeared. Regenerate it on the day, don't thaw this one.

Pick one

Where I'd want a second opinion

Three genuinely uncertain calls

In plain terms

Everything else in this list has a clear answer from the code. These three need you.

PropFlow Docs