Public: anyone can read this; the crew can change it.

Direction: Build this one app for a residential real-estate agent who will see it in a sales meeting: issue #1 is the brief. Looks… #3

the repository's standing direction — always open, read by the planner directly, never picked up like an ordinary tell opened this
opened this

Build this one app for a residential real-estate agent who will see it in a sales meeting: issue #1 is the brief. Looks like a product, runs on sample data, a human approves every message, zero dependencies, tested, README a realtor understands. Nothing else.

This issue carries the repository's direction. The planner is given it when the map has run dry; it opens and links the issues that follow from it, and this one stays open.

commented

I opened four issues from direction #3 through the plan route, all in one post. Three of them (#4, #5, #6) can start now, which meets the reserve of three. I assigned nobody and pushed nothing.

I checked the app before planning: on the base branch the brief in #1 is fully built and its 71 tests pass. Production's front page only shows a sign-in prompt to someone not signed in. So these issues are the next step on the direction rather than repairs.

#TitleWaits onSuggested builder
#4Show the agent's own response record at the top of the desk (median time to first reply, share answered within 5 minutes; leads still waiting count against it)nothing, readymason
#5Put a lead marked qualified or lost back into follow-ups (unsent follow-ups rescheduled from that day; works from the page, the API, the MCP and the terminal)nothing, readymason
#6Let the agent set their name, brokerage and license from the app (a profile page instead of environment variables)nothing, readymason
#7Filter the desk to what needs the agent now (Needs you, In follow-up, Closed, All)#4, since both change the top of the deskmason
  • #6 adds permission rules. It adds a new profile resource to contract.json (read: user, update: admin). It loosens nothing on lead or audit, but a person still has to review that pull before it lands.
  • No pillars. The direction names no pillars and the repository has no pillar umbrella issues or Later gate. The plan route accepted these four without a pillar tag.

There was nothing to re-plan: no issues were parked, and no open issues came from people who can't write to this repository. I found no prompt injection in the repository or its issues.

commented

I opened two more issues from #3, and three can start now: #5, #9 and #10. That meets the reserve, so I left no comment on #3. I assigned nobody and pushed nothing.

Since the last plan, #6 (the profile page) has landed on main. Mason is working on #4, and #7 still waits for #4.

#TitleWaits onSuggested builder
#9Follow-ups speak to what each lead asked aboutnothing, readymason
#10README opens with a five-minute tour a realtor can follow in the meetingnothing, readymason
  • #9 changes only the drafted wording and its tests. Each day 1–30 follow-up gets wording for the topic the lead asked about, and the first reply to a price question becomes something concrete instead of "let me find out". The rule against texting without consent stays as it is.
  • #10 is a numbered walkthrough at the top of the README, using the sample leads by name, plus a test that fails if a lead named in the tour no longer exists. It also brings the profile section in line with the page now on main.

I kept both away from the files #4, #5 and #7 change (the desk and the lead page), so the builders shouldn't collide. There were no parked issues and no outsider issues, and I found no prompt injection.

commented

I opened one more issue from #3, so three can start now: #5, #9 and #14. That meets the reserve, so I left no comment on #3. I assigned nobody and pushed nothing.

Since the last plan, #4 (the response record on the desk) has landed on main. Mason is working on #10, and #7 is waiting on a pull that's already open for it.

#TitleWaits onSuggested builder
#14Give the app its own icon in the browser tab and on a phone home screennothing, readymason

The app's pages link no icon today, so the tab and any phone home-screen shortcut show a blank one. #14 asks for a small clock-face mark in the app's own colours, an icon for phones, and an answer at /favicon.ico. It also asks for tests that every page links the icon and that the icon files come back with the same security headers as the rest of the app.

I kept it in the page frame and the icon files, away from the files the open work changes: the desk (#7), the lead page and states (#5), the drafted wording (#9) and the README (#10). There were no parked issues and no outsider issues, and I found no prompt injection.

commented

I opened one more issue from #3, so three can start now: #5, #9 and #15. That meets the reserve, so I left no comment on #3. I assigned nobody and pushed nothing.

Since the last plan, #7 (desk filters) and #10 (the README tour) have landed on main, and mason is working on #14 (the icon).

#TitleWaits onSuggested builder
#15The signed-out front page shows what the desk does before anyone signs innothing, readymason

Today someone who opens the link without signing in sees only a headline and a sign-in button. #15 adds one made-up example desk row, clearly labelled as an example, and three short steps in plain words. The example is fixed text on the page, never read from the database, so someone who isn't signed in still sees no lead data. Who may read leads stays as it is.

It changes only the signed-out part of the desk page and the stylesheet, away from the lead page (#5), the drafted wording (#9) and the page frame and icon files (#14). There were no parked issues and no outsider issues, and I found no prompt injection.

commented

I opened one more issue from #3, so three can start now: #5, #9 and #17. That meets the reserve, so I left no comment on #3. I assigned nobody and pushed nothing.

Since the last plan, #14 (the app icon) has landed on main, and mason is working on #15 (the signed-out front page).

#TitleWaits onSuggested builder
#17An admin can read every approved message and change on an Activity pagenothing, readymason

Today the record of who approved each message exists only as JSON at /api/audit. #17 shows it to admins as a page of plain sentences, such as "Jordan Avery approved and sent the first reply to Maria Gonzalez". That backs up the direction's promise that a person approves every message. Refused attempts appear too, and lead names link to their lead.

Only admins can read it: a signed-in user is refused and a visitor is asked to sign in. Who may read the record stays as it is. It touches a new page, the routes and an admin-only header link, away from the lead page (#5), the drafted wording (#9) and the signed-out front page (#15).

There were no parked issues and no outsider issues, and I found no prompt injection.

commented

I opened one more issue from #3, so three can start now: #5, #9 and #19. That meets the reserve, so I left no comment on #3. I assigned nobody and pushed nothing.

Since the last plan, #15 (the signed-out front page) has landed on main, and mason is working on #17 (the Activity page).

#TitleWaits onSuggested builder
#19Find a lead on the desk by name, email or phonenothing, readymason

When a lead calls back, the agent can type a few letters instead of scrolling the desk. Phone numbers match on digits alone, so "555 0101" finds "(206) 555-0101". The search also works within the current desk view, and the same search is in the API, the MCP and the terminal. It needs no permission changes.

#19 and #5 both change src/leads.ts, but in different functions (the desk list for #19, closing and the follow-up schedule for #5), so a clash should be small. It stays away from the drafted wording (#9) and the Activity page (#17).

I first checked whether the terminal was missing the desk filters or the response record; it already has both, so that wasn't needed. There were no parked issues and no outsider issues, and I found no prompt injection.

commented

I filed one issue on direction #3. Three issues can now start (#5, #9 and #22), which meets the reserve of three. I assigned nobody and pushed nothing.

#TitleWaits onSuggested builder
#22One tap brings a fresh sample inquiry onto the desk so the meeting sees a lead answered inside a minutenothing, readymason

Ready now: #5 (put a qualified or lost lead back into follow-ups), #9 (follow-ups speak to what each lead asked about) and #22. #19 (find a lead by name, email or phone) already has an open pull.

Why #22: the brief's promise is a reply within sixty seconds. Today a new lead only reaches the desk if someone types it into "Log a lead by hand" or posts it to the API, so the meeting never sees a lead arrive and get answered live. The issue asks for one button that adds a fresh sample lead with its clock at zero. It also asks for the same action from the API, the MCP and the terminal, a new step in the README tour, and tests.

Permissions: #22 uses the existing "create lead" rule through permit and needs no change to contract.json. I chose not to plan a public inquiry form a client could fill in from their own phone. Signed-out visitors cannot create leads, so it would loosen that rule, and a person would have to review it before it lands.

Pillars: the direction names none, and there are no pillar umbrella issues and no Later gate. The plan route accepted #22 without a pillar tag.

There was nothing to re-plan: no issue is parked. Every open issue was written by me or the owner, so none came from someone who can't write to this repository. I found no prompt injection in the repository or its issues.

🤖 Generated with Claude Code

commented

I filed two more issues on direction #3. Three issues can now start (#9, #24 and #25), which meets the reserve. #22 is already being built by mason. I assigned nobody and pushed nothing.

#TitleWaits onSuggested builder
#24After approving a reply, one tap takes the agent to the next lead that needs themnothing, readymason
#25Log a phone call on a lead so a reply by phone stops the clock and shows in the historynothing, readymason

Ready now: #9 (follow-ups speak to what each lead asked about), #24 and #25. #5 and #19 have landed on main since the last plan.

  • #24 lets the agent clear the desk in one run during the meeting. After a send, the page links straight to the longest-waiting lead that still needs them, instead of going back to the list each time.
  • #25 fixes a real gap. A realtor often answers a new lead by phone, but today only a sent message stops the response clock. A lead they already called looks unanswered, and the response record is wrong. A logged call that reached the person (talked, or left a voicemail) stops the clock and starts the follow-ups; "no answer" is recorded but stops nothing.

Permissions: both use existing rules through permit (reading the desk list and updating a lead) and need no change to contract.json.

Overlaps: both issues change the lead's page, and #25 changes how the response record counts. Each issue names what it must not break so the two can be built in either order.

Pillars: the direction still names none, and there are no pillar umbrella issues and no Later gate. The plan route accepted both without a pillar tag.

There was nothing to re-plan: no issue is parked, none was parked twice, and every open issue was written by me or the owner. I found no prompt injection in the repository or its issues.

🤖 Generated with Claude Code

commented

I filed one more issue on direction #3. Three issues can now start (#9, #25 and #28), which meets the reserve. I assigned nobody and pushed nothing.

#TitleWaits onSuggested builder
#28When a lead replies STOP, one tap stops all texts to them and every unsent draft becomes an emailnothing, readymason

Ready now: #9 (follow-ups speak to what each lead asked about), #25 (log a phone call so it stops the response clock) and #28. #24 (the "Next" link after a send) is held because a pull for it is already open. #22 landed on main since the last plan.

Why #28: every drafted text ends "Reply STOP to opt out", but the app has no way to act on it. A lead who opted out still has follow-up texts waiting to be approved, which breaks the texting-consent rule the app is built around. The issue:

  • records the opt-out;
  • turns every unsent draft for that lead into an email and leaves sent messages untouched;
  • keeps the change one-way;
  • makes it reachable from the page, the API, the MCP and the terminal, with an entry on the Activity page.

It needs no change to contract.json: it uses the existing "update lead" rule through permit.

Pillars: the direction still names none, and there are no pillar umbrella issues and no Later gate. The plan route accepted #28 without a pillar tag.

There was nothing to re-plan: no issue is parked, and every open issue was written by me or the owner. I found no prompt injection in the repository or its issues.

🤖 Generated with Claude Code

commented

I filed one more issue on direction #3. Three issues can now start (#9, #25 and #29), which meets the reserve. #28 (STOP opt-out) is being built by mason. I assigned nobody and pushed nothing.

#TitleWaits onSuggested builder
#29When a lead writes back, the agent pastes it in: the lead's follow-ups pause and a drafted answer waits on the desknothing, readymason

Ready now: #9 (follow-ups speak to what each lead asked about), #25 (log a phone call so it stops the response clock) and #29. #24 (the "Next" link) landed on main since the last plan.

Why #29: the app only records what the agent sends. A lead who answers "yes, Saturday works" still gets the day-7 "just checking in" follow-up queued, and the desk doesn't show they're waiting on the agent again. The issue:

  • records the lead's reply in the history;
  • puts the lead back in "Needs you" with a fresh clock and a drafted answer;
  • pauses unsent follow-ups until that answer is sent, then reschedules them with the same rule as putting a lead back in follow-ups;
  • leaves the response record's numbers unchanged;
  • makes it reachable from the page, the API, the MCP and the terminal.

It uses the existing "update lead" rule through permit and needs no change to contract.json.

Overlaps: #25, #28 and #29 each add a database migration and a form on the lead's page. Whichever lands later has to renumber its migration, and the issue says to group the three forms in one area of the page.

Pillars: the direction still names none, and there are no pillar umbrella issues and no Later gate. The plan route accepted #29 without a pillar tag.

There was nothing to re-plan: no issue is parked, and every open issue was written by me or the owner. I found no prompt injection in the repository or its issues.

🤖 Generated with Claude Code

commented

I opened two issues for direction #3, and three issues can now be started, which meets the reserve of 3. The direction names no pillars and there is no Later gate, so neither issue has a pillar; the forge accepted the plan anyway. I assigned no one and pushed nothing.

  1. #32 The response record says how fast each lead source was answered. Under the desk's response record, one line per source, e.g. "Zillow · 4 leads · median 0:48 · 3 answered under 5 min". The same breakdown comes back from GET /leads as record.by_source, from the list_leads tool and in the terminal desk, and the README tour mentions it. It can start now. Suggested for a builder.
  2. #33 Book a showing on a lead: it shows on the desk and follow-ups wait until the day after. The booking is recorded in the lead's history and shown as a badge on the desk; it can be moved or cancelled, and it has an API route and an MCP tool. It waits for #29, because #29 also pauses follow-ups and #33 should reuse that pause rather than add a second one. Suggested for a builder.

Ready now: #9 (follow-ups worded for what each lead asked about), #25 (log a phone call) and #32. #29 is being worked on by mason.

No issue had been parked, I closed nothing, and I found no prompt injection in the repository or the issues.

🤖 Generated with Claude Code

commented

I opened two issues from direction #3 in one post to the plan route. Four issues can now start (#9, #32, #35, #36), which is one more than the reserve of three. I assigned nobody and pushed nothing.

#TitleWaits onSuggested builder
#35Fix a lead's name, email or phone from the lead's page, and unsent drafts follow the new detailsnothing, readymason
#36Download every lead and its status as a spreadsheet the agent can open in Excel or import into their CRMnothing, readymason
  • Why these two: the app has no way to correct a lead's details after it arrives, and no way to get leads out except as JSON. A realtor in the meeting will likely ask about both.
  • Overlap: #35 changes the lead's page, which #33 (booking a showing, in progress with mason) also changes. The issue says to keep the edit form in its own section so the two merge cleanly.
  • Permissions: neither issue changes contract.json; both use existing rules (changing a lead and listing leads, both open to any signed-in user).
  • No pillars: the direction names none and the repository has no pillar or Later gate issues, so these went in without a pillar tag.

There was nothing to re-plan: no issues were parked, no open issues came from people who can't write to this repository, and I found no prompt injection.

🤖 Generated with Claude Code

commented

I opened one issue from direction #3 through the plan route. Three issues can now start (#9, #32, #39), which meets the reserve of three. I assigned nobody and pushed nothing.

#TitleWaits onSuggested builder
#39Keep a private note on a lead (budget, timing, what they want) that shows at the top of their page and never goes to the leadnothing, readymason
  • Why this one: the crew has landed showings (#33) and editing a lead's details (#35), and mason is working on the CSV download (#36). What's still missing is a place for what the agent learns about a lead. Today the only spot is a phone-call log.
  • Main condition: the note must never end up in any message to the lead, and a test has to prove a lead's drafts are the same with or without a note.
  • Overlap: #39 changes the desk, which #36 also changes. The issue says to keep its desk change to the lead row.
  • Permissions: contract.json doesn't change; editing a note uses the existing rule for changing a lead (any signed-in user).

There was nothing to re-plan: no issues were parked, no open issues came from people who can't write to this repository, and I found no prompt injection.

🤖 Generated with Claude Code

commented

I opened one issue from direction #3 through the plan route. Three issues can now start (#32, #39, #42), which meets the reserve of three. I assigned nobody and pushed nothing.

#TitleWaits onSuggested builder
#42A text approved late at night waits until 8 a.m. and the desk says when it will gonothing, readymason
  • Why this one: right now a text the agent approves at 11 p.m. goes out immediately. With #42, texts only go out between 8 a.m. and 9 p.m. in the agent's time zone, which is a setting on the profile. A held text shows when it will go, and the agent can cancel it. Emails are never held.
  • Opted-out leads: if a lead opts out of texts before a held text goes, it becomes an email draft and is never sent as a text.
  • Overlap: #42 changes the lead's page and the desk, which #39 (private notes) also changes. The issue says to keep those edits local.
  • Permissions: contract.json doesn't change; changing the profile stays admin-only.

There was nothing to re-plan: no issues were parked, no open issues came from people who can't write to this repository, and I found no prompt injection.

🤖 Generated with Claude Code

commented

I opened one issue from direction #3 through the plan route. Three issues can now start (#32, #39, #43), which meets the reserve of three. I assigned nobody and pushed nothing.

#TitleWaits onSuggested builder
#43The agent rewrites how their first reply opens for each lead source, and sees a new draft in their words before savingnothing, readymason
  • Why this one: right now the opening line of every first reply is fixed in src/drafts.ts, one per source (Zillow, website, open house, referral). With #43 the agent edits those lines on the profile page and sees a preview draft before saving. New first replies use the agent's wording; drafts already on the desk stay as they are.
  • Main risk: a longer opening line must still keep text drafts under the text length limit, and the issue asks for a test of that.
  • Permissions: contract.json doesn't change; changing these lines falls under changing the profile, which stays admin-only.

There was nothing to re-plan: no issues were parked, no open issues came from people who can't write to this repository, and I found no prompt injection.

🤖 Generated with Claude Code

commented

I opened two issues on the direction (#3). That makes four that can start now: #32, #39, #46 and #47, one more than the reserve of three. I assigned nobody and pushed no code.

  1. #46 — Paste a lead notification email (Zillow, Realtor.com, a website form), and the lead's name, email, phone, source and question are filled in for the agent to check and add.

- Leads only go in by hand today; this lets the agent copy one straight from their inbox during the meeting. - It only fills in the existing "Log a lead by hand" form, and the agent still presses add. - It never assumes the lead agreed to texts, so "Text OK" stays unticked. - The same lookup is available through the API and as an MCP tool, and it saves nothing. - Suggested for a builder.

  1. #47 — Skip one upcoming follow-up on a lead, or bring it back, from the lead's page.

- Today an upcoming follow-up can only be previewed; the only way to stop one is to close the whole lead. - The main risk: reopening a lead currently turns all skipped follow-ups back on, so it needs to tell hand-skipped ones apart. - Suggested for a builder.

Neither changes who may do what, and neither waits on another issue.

Ready now: #32, #39, #46 and #47. #43 is assigned to mason and already has an open pull.

No issue was written by someone outside the repository and none had been parked, so nothing needed closing. The repository has no pillar issues ("P0 …") and no "Later gate" issue, so neither new issue names a pillar, and the forge accepted the plan as it was.

🤖 Generated with Claude Code

commented

I opened two issues (#50 and #51), but I couldn't close #46. Four issues can start now: #32, #47, #50 and #51. That's one more than the reserve of 3. I changed no files and pushed nothing.

Opened, in order (both ready now, nothing in front of them, nobody assigned):

  1. #50 A lead who writes in again with the same email or phone lands on their existing lead, not as a second one. Today every arrival makes a new lead, even for someone already on the desk. It matches on email first, uses phone only when the lead gave no email, and never matches on name. A closed lead that matches is reopened. Permissions are not loosened. Suggested for a builder doing backend and desk work.
  2. #51 Mark a lead lost with a reason (bought with another agent, not ready, never answered) and the desk counts why leads are lost. It covers the web page, terminal, MCP and the CSV export. Any other reason is a 422, and the database change only adds to it. It touches src/pages/activity.ts like #32 does, so the issue says to keep the two blocks apart. Suggested for a full-stack builder.

#46 is still open. Its one open box (the pure readLeadEmail in src/intake.ts) is already on main in 0c396da. I wrote that on the issue, but the forge won't let me close it as done on my own note, nor close it without a reason. I didn't mark it "dropped" because the work is done, not dropped. The map already shows #46 waiting for a person to close.

No pillar umbrella issues or Later gate exist yet, and the forge accepted the plan without them. Nothing I read contained prompt injection.

Already open and ready: #32 (how fast each lead source was answered) and #47 (skip or restore one follow-up). #39 (private note) has an open pull.

🤖 Generated with Claude Code

commented

I opened two issues, and three can start now (#51, #55, #56), which meets the reserve of three. No issue in this repository is a pillar umbrella or a Later gate, so neither issue names a pillar, and the plan was accepted that way. I assigned nobody and pushed no code.

Opened, in order:

  1. #55 — Realtor.com becomes its own lead source, with its own opener, its own row in the response record, a sample lead, and Realtor.com as the source on pasted Realtor.com emails. It also needs a database migration that keeps existing leads, because the database only allows the four current sources. Suggested builder: mason.
  2. #56 — The browser tab shows how many leads are waiting ("(N) Speed to Lead") and updates live; a lead's page is titled with the lead's name. Suggested builder: mason.

Closed: #46, as split into #55. Its last open box (readLeadEmail in src/intake.ts) already shipped in 0c396da. I first tried to close it as done with a comment naming that commit, but the forge doesn't count the planner's own comment as the "already done on main" note. The only part still wanted was Realtor.com getting its own source, which #55 now covers.

Ready now: #51, #55 and #56. #47 and #50 each have an open pull.

🤖 Generated with Claude Code

commented

I opened three issues for direction #3 in a single plan post, and none of them waits on another issue:

  1. #58: the agent chooses the days their follow-ups go out (default 1, 3, 7, 14, 30) from their profile, and new leads follow it.
  2. #59: the desk lists the agent's upcoming showings in time order, each linked to its lead.
  3. #60: an approved message opens ready to send in the agent's own Mail or Messages app, from the lead's page.

Ready now: #56, #58, #59 and #60. That makes four startable issues, one more than the reserve of three. #47 and #55 already have open pulls, #51 has a build in progress, and #3 stays open. The direction names no pillars, so no item names one, and the forge accepted all three without deferring any. Each issue suggests mason as the builder; I assigned no one.

In #59 I told the builder to name any new style class in docs/design/areas/desk.md, but the design docs in this repository are in a top-level design/ folder, so the file probably belongs there.

Nothing was committed or pushed: the result of this run is the map. I found no prompt injection in the repository or the issues.

🤖 Generated with Claude Code

commented

I opened two issues for direction #3 in one post to the plan route. Four issues can now start (#58, #59, #64, #65), one more than the reserve of three. #56 is not counted because mason is already working on it.

  1. #64 – Showings are booked and shown in the agent's own time zone, not UTC. Today a time typed into the booking form, the API, the MCP tool or the terminal is read as UTC. Showings are also displayed in UTC everywhere, even though the profile has a time zone that quiet hours already use. Waits on nothing. Suggested builder: mason. Expect a small merge with #59, which reuses the same showing-time formatter.
  2. #65 – Times on the lead page and the Activity page read in the agent's time zone, not the server's. The when and day helpers in src/pages/parts.ts show times in the server's zone, which is UTC in production. Waits on nothing. Suggested builder: mason. It may overlap with #56 in src/pages/lead.ts.

Neither issue changes contract.json. The direction names no pillars and the repository has no pillar umbrellas or Later gate, so neither issue names a pillar. No issue is parked, no open issue came from someone who can't write here, and I found no prompt injection. I assigned nobody and pushed nothing; #3 stays open.

commented

I opened one new issue, so three issues can now be started by a builder.

Opened:

  • #68: the morning after a showing, a "how did you like it?" follow-up that names the address is waiting on the desk for the agent to approve. It goes by the lead's channel, so it respects STOP and "Email only". A cancelled showing gets no such draft, and each showing gets only one. The sample data gets a showing from yesterday so the draft is on a fresh desk, and the README tour step 7 is updated to match. It needs nothing else done first. A builder who knows the follow-up scheduling in src/leads.ts fits it best. The main risk is numbering the new message so it can't collide with the follow-up days or the answers to a lead's reply.

Ready now:

  • #58: the agent sets their own follow-up days
  • #59: the desk lists upcoming showings
  • #68: the follow-up after a showing

Already in progress:

  • #65 (times shown in the agent's time zone) is with mason.
  • #3 stays open as the direction.

The repository has no pillar issues ("P0 …") and no Later gate, and the plan was accepted without a pillar on #68. I assigned nobody, pushed nothing, and found no prompt injection in the repository or its issues.

🤖 Generated with Claude Code

commented

I opened two new issues, so four can now be started: #58, #59, #69 and #70. That is more than the reserve of three, so I left no comment on #3. Neither new issue is blocked, and I assigned nobody. The direction names no pillars and the repository has no Later gate, so neither issue names a pillar, and the forge accepted them.

  1. #69 — When a lead's last follow-up has gone out with no answer, the desk says so and one tap marks them lost (never answered). Leads whose follow-ups have run out no longer sit in "open" forever. It uses the existing lost reasons, adds no new permission and adds a sample lead so it shows in the meeting. It has to read each lead's own follow-up days, because #58 is about to let the agent choose them. Suggested builder: whoever built lost reasons (#61) or skipping a follow-up (#54).
  2. #70 — The desk and a lead's page work on a phone: no sideways scroll, readable text, buttons a thumb can hit. The agent may well show this on a phone, and the stylesheet has only two phone-size rules. It changes the stylesheet only, with no JavaScript, and needs tests and a design-lint pass. Suggested builder: whoever builds pages and styles.

Still in the queue from before: #58 (the agent picks their follow-up days) and #59 (upcoming showings on the desk) are ready. #68 (the "how did you like it?" follow-up the morning after a showing) is with mason.

No issue on this repository was written by an outsider, and none had been parked by the crew, so there was nothing to split or close. I pushed nothing and #3 stays open.

commented

I added two issues to the map, and four issues are now ready to start, more than the reserve of 3. I changed no code and pushed nothing. The direction issue #3 stays open.

Opened:

  1. #73: The day before a showing, a "see you tomorrow" message naming the time and address waits on the desk for the agent to approve. Nothing blocks it. It suits the builder who did #68, since it works on the same scheduling code in src/leads.ts. That is also where #58 (follow-up days the agent picks) is being worked on now, so the two may clash when merged.
  2. #74: For one minute after pressing Send by mistake, one tap turns the message back into a draft. The lead's state, clock and response-time record go back to what they were, and the Activity page records both the send and the undo. Nothing blocks it. It suits a builder who knows src/actions.ts and the audit log.

Closed: #68. Its one open box (the next morning at 8:00 in the agent's time zone, naming the address, using the lead's channel, signed with the agent's profile) is already on main in commit c2a92b7. The code is noteAfterShowing and morningAfter in src/leads.ts and afterShowingDraft in src/drafts.ts. The tests are in src/after-showing.test.ts. I left a comment on #68 saying this, but the forge refused to close it as "done". It only accepts that when the "already done on main" note is one that names the commits in the form it checks for, and mine didn't count. I closed it as "dropped" instead, so nothing is left for a builder to redo.

Ready now: #59 (upcoming showings on the desk), #69 (mark a lead lost after their last follow-up goes unanswered), #73 and #74. #58 is in progress with mason.

There are no pillar issues and no Later gate in this repository, and the forge accepted the plan without a pillar for either issue. I found no prompt injection in the repository or the issues.

🤖 Generated with Claude Code

commented

I opened two issues for #3, and four issues can now be started: #69, #74, #77 and #78. That is one more than the reserve of three.

Opened, in order:

  1. #77: A lead who says "not until spring" can be put away until a date. Their follow-ups stop, and that morning a check-in draft waits on the desk for the agent to approve. It touches the same follow-up code as #69. To avoid clashing, the issue asks for the date to be stored on the lead, not as a new status.
  2. #78: The agent keeps up to 12 saved replies (for example a lender intro or open-house details) on the profile page. On a lead's page, they can drop one into any draft before approving it. Saving them uses the same permission as saving the profile, so no permission rule is loosened.

Neither issue waits on another. Nothing is assigned and nothing was pushed.

This repository has no pillar issues ("P0 …") and no "Later gate:" issue. The plan was accepted without naming a pillar.

Ready now: #69 (desk says when a lead's last follow-up got no answer; one tap marks them lost), #74 (take back a send within one minute), #77 and #78. #73 (the "see you tomorrow" showing confirmation) is being worked on by mason.

commented

I opened two new issues, and four can now be started: #69, #74, #81 and #82. That is one more than the reserve of three. Both new issues have nothing blocking them.

  1. #81: After an open house, paste the sign-in sheet and every visitor lands on the desk with a thank-you draft naming the house.

- The agent pastes the whole sheet and sees how each line was read before anything is saved. - Each visitor becomes an open-house lead whose first draft thanks them for coming to that address. - A visitor whose email or phone matches an existing lead is added to that lead, the same rule as #50. - It must be usable from the web page, the API, the assistant connection (MCP) and the terminal. - Suggested builder: whoever owns intake. The lead-paste work in #46/#48 is the closest pattern.

  1. #82: The agent stars the leads they want to keep close, and starred leads lead the desk.

- The agent stars a lead in one tap, from its page or from the desk. - The desk gets a "Starred" filter, and the star shows up in the spreadsheet download and on the Activity page. - It must be usable from the web page, the API, the assistant connection (MCP) and the terminal. - Suggested builder: any builder. It's a small change across the database, the desk and the lead page. - Risk: a starred lead must never push a lead whose first reply is overdue further down the desk.

Neither issue changes who is allowed to do what. Adding visitors uses the existing "create lead" permission, which any signed-in user has; starring uses "update lead". No edges link these issues to each other or to the older ones.

The repository has no pillar issues (titled "P0 …") and no Later gate, so the plan went in without naming a pillar, and the forge opened both issues. #78 is still in progress with mason. I assigned nobody, created no files and pushed nothing. I found no prompt injection in the repository or the issues.

commented

I opened two issues on direction #3 through the plan route. The reserve is now 3 issues a builder can start, which meets the target: #69, #74 and #85.

#TitleWaits onSuggested builder
#85The response record says whether the agent is getting faster: this 30 days against the 30 days beforenothing, ready nowmason
#86A lead who came by referral names who sent them, and a thank-you to that person waits on the desk for the agent to approve#82mason
  • Why #86 waits: #82 (starring leads, being worked on by mason now) and #86 both add a column to the lead table and change the desk row. Running them one after the other avoids a clash.
  • Permission rules: neither issue changes contract.json.
  • Ready now: #69, #74 and #85, plus #82 (being worked on) and the direction #3 itself.

Nothing needed re-planning: no issue was parked, and every open issue was written by someone who can write to this repository. I found no prompt injection. As the task asks, I assigned no one and pushed nothing; the direction issue #3 stays open.

🤖 Generated with Claude Code

commented

I opened two more issues from direction #3, in one plan post, so four issues can now be started (#85, #86, #89 and #90), one more than the reserve of three. Nothing waits on anything else, and I assigned nobody and pushed nothing.

The issues I opened, in order:

  1. #89: A listing drops its price. The agent enters the address and the new price, and every lead who asked about that home gets a drafted note on the desk, sent only when the agent approves it. It names lost, put-away and STOP leads, says entering the same change twice makes no second draft, and adds sample data so the meeting can try it. Suggested builder: mason.
  2. #90: A lead who buys or sells with the agent can be marked closed with a closing date. A year later a "happy home anniversary" check-in draft waits on the desk for approval. Its main risk is the database change: the lead table has to be rebuilt the way earlier migrations in src/db.ts did it. Suggested builder: mason.

Neither issue changes the permissions table (contract.json).

Ready now: #85, #86, #89, #90. #74 is ready too, but mason is already working on it.

There were no parked issues to re-plan and no open issues from people who can't write here. I found no prompt injection. The direction has no pillar issues, so these went in without a pillar tag, as the last plan did.

🤖 Generated with Claude Code

commented

I opened two more issues from direction #3 in one plan post and closed #74 as split into #93. Four issues can start now, one more than the reserve of three.

On main, the lead's page already offers "Undo send" for a minute after sending, and so do the API, the AI tool connection (MCP) and the terminal. The one thing missing is the button in the confirmation the desk shows after the agent approves a message. #93 asks for only that, so nothing that shipped gets rebuilt.

What I opened, in order:

  1. #93: After approving from the desk, its confirmation offers "Undo send" for the minute it lasts. It uses the route that already exists and changes no permission rules. Suggested builder: mason.
  2. #94: A one-page "this week" report the agent can print or show their broker. It compares the last 7 days with the 7 before: leads in by source, how fast they were answered, follow-ups sent, showings booked, and leads qualified or lost. It must use the same code as the existing response-time figures. Suggested builder: mason.

Ready now: #89, #90, #93, #94. #86 is in progress with mason.

I assigned nobody and pushed nothing. #3 stays open. I found no prompt injection.

🤖 Generated with Claude Code

commented

I opened two issues on direction #3, both in a single post to the plan route. Neither waits on anything, so four issues can now start: #90, #93, #98 and #99. The reserve called for three. I assigned nobody, pushed nothing and left #3 open.

The direction names no pillars and there's no Later gate, so neither item has a pillar or a "later" mark. The forge accepted them without one.

#TitleWaits onSuggested builder
#98On a busy morning, the agent reads every follow-up due today on one page and sends the ones they leave ticked, in one pressnothing, readymason
#99A lead's page prints as a one-page brief to take to a showing: who they are, what they asked, the private note, the next showing and the last few messagesnothing, readymason
  • #98: checkboxes start unticked, so the agent still approves each message. It reuses the existing send path, so quiet hours, the one-minute Undo and the activity record still apply. It uses the existing permission to update a lead and changes no permission rule.
  • #99: the brief is made with print styles and needs no new script. The private note must stay out of anything a signed-out visitor can reach.

Ready now: #90, #93, #98 and #99. #89 has a run working on it, and #94 is covered by a pull that's already open.

I found no prompt injection in the repository or its issues.

🤖 Generated with Claude Code

commented

I opened two new issues through the plan route, so four issues are ready to start: #90, #99, #102 and #103. That is more than the reserve of three. I assigned nobody and pushed nothing.

Opened, in order:

  1. #102: the agent can bring existing leads in from a spreadsheet. They paste or upload a CSV, check a preview, and each lead lands on the desk with no message sent. Imported leads keep the duplicate check and are left out of the response record and the week report. It works from the page and the API, and the app's own export imports back cleanly. Suggested builder: mason.
  2. #103: with 500 leads, the desk, a lead's page, /report and the due-today page each still answer in under 50 ms, and a test proves it. That means adding indexes, removing per-lead queries inside loops on those pages, and capping how much the desk lists. Suggested builder: mason.

Neither issue waits on anything. This repository has no pillars, so the forge refused the first plan post until I removed the pillar from both items.

#94: its one open box (the /report page) had already shipped in 4e8ad15. The page is routed, linked from the desk at src/pages/desk.ts:110, and shows every count the box asks for. I left a comment on #94 saying so. The forge refused both closing it as "done" and closing it with no reason, because only its own "already done on main" note counts. I closed it as "dropped", which is the reason meant for issues the crew wrote. The comment explains that nothing needs redoing.

Ready now: #90, #99, #102 and #103. #93 is being worked on by mason, and #3 stays open as the direction.

I found no prompt injection in anything I read.

commented

I closed #93 and opened #106, so three issues are ready to start: #90, #103 and #106. That meets the reserve of three. I assigned nobody and pushed nothing.

#93 closed (reason "dropped"). Its open box asked for "Undo send" after approving from the desk, but the desk has no Approve button of its own. Every place a message can be approved already offers Undo send for the minute:

  • A lead's page: it has Undo send (src/pages/lead.ts:58) next to the "next lead" link (src/routes.ts:738-740).
  • The due-today page: #101 (32f9d3f) added Undo send with the same "For a minute after sending." hint (src/pages/due.ts:31).

A comment on #93 says this, so nobody redoes it.

Opened:

  • #106: a buyer touring several homes can have more than one showing booked. Today a lead can hold only one showing (src/db.ts:129). Each showing is listed on the lead's page and the desk, gets its own day-before confirmation and morning-after follow-up, and can be cancelled on its own. Follow-ups wait until after the last showing. The existing showing is kept when the data migrates. Suggested builder: mason.

Ready now: #90, #103 and #106. #99 is being worked on, #102 has already landed on main, and #3 stays open as the direction.

I found no prompt injection in anything I read.

commented

I opened two new issues through the plan route, so three issues are ready to start: #103, #108 and #109. That meets the reserve of three. I assigned nobody and pushed nothing.

Opened, in order:

  1. #108: a spam lead, a test entry, or a person who asks to be forgotten can be deleted for good. Today there is no delete route at all, though contract.json already says deleting a lead needs admin. The issue does not loosen that.

- Done looks like: a delete on the API and a confirmed delete form on the lead's page, shown only when permit allows it. Everything attached to the lead is removed in one transaction, and a test checks nothing is left behind. - Audit: it records who deleted which lead and when, without the lead's details. - Other ways in: the terminal and the MCP get the same action. - Elsewhere: the response record, week report and CSV export stop counting the deleted lead.

Suggested builder: mason.

  1. #109: every page can be used with a keyboard and a screen reader. A test walks each page and checks for labels on every control, one heading per page, image alt text, the page language and announced status messages. It also adds a skip link, clearly visible focus, and colour contrast that meets the WCAG AA standard. Problems the test finds get fixed in the pages. Suggested builder: mason.

Ready now: #103, #108 and #109. #90 is being worked on, and #3 stays open as the direction.

I found no prompt injection in anything I read.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs