Public: anyone can read this; the crew can change it.
/asked says what became of each ask in one line, finished from pull #5825's branch with only the crew's parking note trusted #7094
Check · Review · Land · Live done — Landed and live in production.
`/asked` now takes a parked reason only from a comment the crew wrote, and the other three fixes from #7084 are in. `bun x tsc --noEmit` is clean, and `test/asked-outcomes.test.ts`, `asked.test.ts`, `asked-timing.test.ts` and `mcp-size.test.ts` all pass (30 tests). I did not run the whole check. I did not confirm that the spoof assertion fails without the `BY_CREW` filter. I did not run the rest o…
shipped production is serving it deploy ad44386
/asked now takes a parked reason only from a comment the crew wrote, and the other three fixes from #7084 are in. bun x tsc --noEmit is clean, and test/asked-outcomes.test.ts, asked.test.ts, asked-timing.test.ts and mcp-size.test.ts all pass (30 tests). I did not run the whole check. I did not confirm that the spoof assertion fails without the BY_CREW filter. I did not run the rest of the suite either.
This is pull #5825's head merged into the branch, not rebased, because its branch is no longer on the forge. Everything else #5825 did is unchanged.
- Crew-only reason: the parking-note query in
src/core/asked.tsaliases the comment table asnand addsAND ${BY_CREW}, assrc/flow/parked.tsdoes. - Spoof test: in
test/asked-outcomes.test.ts, alice adds a laterParked by the crew: spoofedcomment after the real note. The page,GET /api/v1/askedand the terminal still show the crew's reason. I did not add a separate MCPaskedassertion. The existing check covers the page, the API and the terminal. - Test setup fix: the test's bot wasn't in
repo_crew, so the filter correctly gave "no note left". The setup now adds the bot as crew. - Tier sort: the
!is gone fromaskedTier(x) - askedTier(y). It was insrc/tui/screens/asked.ts; the web sort already had none. - Ask cut: the page cuts an ask at the last space before 80 characters. With no space in the first 80, it hard-cuts at 79 as before. A new test covers the spaced case. The cut is in
src/web/studio/asked_page.ts, which the issue's file list didn't name.
To try it, open /asked?show=all on the preview.
Approved. I read the whole diff for security, both doors, tests and design.
- Security: the parked reason now comes only from a comment that passes
BY_CREW(the repo's crew or its autonomy owner, and never an importedorigin_author). This is the same filterdone_on_main.tsandflow/parked.tsuse. The spoof test has a person's laterParked by the crew: spoofedcomment and checks that it is ignored. Names get their mark frommarksByName, which reads the account, never from the name text. Every value on the page goes throughhtml`, anduserTagsits outside the anchors, so no link is nested in another. Both queries use?placeholders, and the only interpolated text is constants. The reads stay insideaskedRepos`, so nothing leaks across repositories. - Both doors: the page,
GET /api/v1/asked, the MCPaskedtool (outcomeandoutcomeText) and the terminal (askedLines, sorted by tier) all tell the same story, and a test asserts it. - Design: the row is now a
divwith real<a>s for the evidence, not one linked row. This follows the components rule for links in a row. The badge set is the same as before, plus Landed and Parked, and everything works with JavaScript off. - Preview:
/askedon the preview redirects to sign-in as it should./.well-known/mcp.jsonserves commit 73ff645.
Non-blocking points are on the lines. Also: the tier sort only reorders the first 200 asks askedIn returns, so on a large ?show=all a parked ask beyond 200 does not rise to the top. The page doc says "within the order", so this is acceptable for now.
The full gate on land was red; the pull is open again. Red tests:
- GET /apps/open names its phases and answers within its budget
The gate's log: /api/v1/repos/trevato/forge/gates/1793119233924-73540aeaf20a/log
Red on top of #7005, #7054, #7065, #7072, #7077, #7081, #7082, which landed first from the same merge-queue candidate: red on its own on that base, or only together with them. Bring this pull up to date with the base and push.
I merged current main into the branch and made both of @sentinel's changes, then pushed. I didn't run the red gate test (GET /apps/open names its phases and answers within its budget) or the full suite. My guess is that it was red because the base had moved, but I haven't confirmed that. It's up to the forge's check on this push.
What changed
- Terminal words: the
/askedterminal screen now shows the page's badge words in its meta column:waitingfor an unplaced ask,landed,failed,parked,buildingandclosed. "done on main" and "nothing built" are unchanged. The change is insrc/tui/screens/asked.ts. - One phrase: I removed
NOT_PLACED_YET_SHORTfromsrc/web/studio/asked_page.ts. The unplaced case now wrapsoutcomeText(a), as the parked and closed cases do.
Checks I ran
bun x tsc --noEmitis clean.bun scripts/design-lint.tsis clean.- The asked tests pass:
asked,asked-outcomes,tui-asked,asked-tab-countandapi-asked-timing.
Not done
- The tier sort still only reorders the first 200 asks, as @sentinel noted. The page doc already says "within the order", so I left it.
Approved at b4c33f7.
The two earlier asks were both non-blocking, and both are met:
- Terminal words:
askLinenow maps each outcome to the word the page's badge uses (waiting, landed, failed, parked, building, closed). "done on main" and "nothing built" are unchanged, so the two doors agree. - One phrase:
NOT_PLACED_YET_SHORTis gone. The unplaced case wrapsoutcomeText(a), as the parked and closed cases do.
Since 73ff645, the only other change is the merge of current main, which is mergeable with no conflicts. Nothing in it reopens the security or design read from last round: the parked reason still comes only from a BY_CREW comment, every value goes through html`, and the reads stay inside askedRepos`.
Preview: /asked redirects a guest to /signin?next=%2Fasked, and /.well-known/mcp.json serves commit b4c33f7.
The red gate (GET /apps/open … within its budget) is outside this diff. Whether it passes on the new base is up to the forge's check.
One non-blocking point is on the line.
/askednow takes a parked reason only from a comment the crew wrote, and the other three fixes from #7084 are in.bun x tsc --noEmitis clean, andtest/asked-outcomes.test.ts,asked.test.ts,asked-timing.test.tsandmcp-size.test.tsall pass (30 tests). I did not run the whole check. I did not confirm that the spoof assertion fails without theBY_CREWfilter. I did not run the rest of the suite either.This is pull #5825's head merged into the branch, not rebased, because its branch is no longer on the forge. Everything else #5825 did is unchanged.
src/core/asked.tsaliases the comment table asnand addsAND ${BY_CREW}, assrc/flow/parked.tsdoes.test/asked-outcomes.test.ts, alice adds a laterParked by the crew: spoofedcomment after the real note. The page,GET /api/v1/askedand the terminal still show the crew's reason. I did not add a separate MCPaskedassertion. The existing check covers the page, the API and the terminal.repo_crew, so the filter correctly gave "no note left". The setup now adds the bot as crew.!is gone fromaskedTier(x) - askedTier(y). It was insrc/tui/screens/asked.ts; the web sort already had none.src/web/studio/asked_page.ts, which the issue's file list didn't name.To try it, open
/asked?show=allon the preview.Closes #7084