For: "tell from anywhere" — any harness can send a tell with its context from the published contract alone.
Done:
[ ] POST /api/v1/feed/tells (src/http/feed.ts:227) has a row describing the text, the optional context (page, run, commit, said) and each refusal. The row sits in ROUTES (src/contract/openapi.ts) beside its neighbours, with the request body, each answer and each refusal the handler actually returns; its line(s) leave NOT_YET_DESCRIBED in test/openapi-coverage.test.ts.
[ ] A test reads the row from /api/v1/openapi.json and fails without it.
Files: src/contract/openapi.ts, test/openapi-coverage.test.ts, one test file.
Risk: the context fields must match what the handler validates; read it, do not guess.
For: "tell from anywhere" — any harness can send a tell with its context from the published contract alone.
Done:
POST /api/v1/feed/tells(src/http/feed.ts:227) has a row describing the text, the optional context (page, run, commit, said) and each refusal. The row sits inROUTES(src/contract/openapi.ts) beside its neighbours, with the request body, each answer and each refusal the handler actually returns; its line(s) leaveNOT_YET_DESCRIBEDin test/openapi-coverage.test.ts./api/v1/openapi.jsonand fails without it.Files: src/contract/openapi.ts, test/openapi-coverage.test.ts, one test file. Risk: the context fields must match what the handler validates; read it, do not guess.