{"date": "2026-08-27", "from": {"k": "unit", "s": "cf-harness", "n": "kickoff/src/api > cancelTurn > resolves when the server takes the cancel"}, "to": {"k": "unit", "s": "cf-harness", "n": "console/src/api > cancelTurn > resolves when the server takes the cancel"}} {"date": "2026-08-27", "from": {"k": "unit", "s": "cf-harness", "n": "kickoff/src/api > cancelTurn > rejects with the reason a refused cancel reported"}, "to": {"k": "unit", "s": "cf-harness", "n": "console/src/api > cancelTurn > rejects with the reason a refused cancel reported"}} {"date": "2026-08-27", "from": {"k": "unit", "s": "cf-harness", "n": "kickoff/src/api > cancelTurn > rejects with the status a refusal carrying no body reported"}, "to": {"k": "unit", "s": "cf-harness", "n": "console/src/api > cancelTurn > rejects with the status a refusal carrying no body reported"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /health > returns the lanes that are running"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /health > returns the lanes that are running"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs > returns 400 for a limit outside 1 to 100"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs > returns 400 for a limit outside 1 to 100"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs > returns the newest jobs, twenty unless a limit is named"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs > returns the newest jobs, twenty unless a limit is named"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs//events > ends at once for an ended job read past its end"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs//events > ends at once for an ended job read past its end"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs//events > ends once, whatever stops it after its terminal event"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs//events > ends once, whatever stops it after its terminal event"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs//events > ends quietly when the service stops after its reader went away"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs//events > ends quietly when the service stops after its reader went away"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs//events > removes the service abort listener on cancel"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs//events > removes the service abort listener on cancel"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs//events > removes the service abort listener on request abort"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs//events > removes the service abort listener on request abort"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs//events > removes the service abort listener on terminal"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs//events > removes the service abort listener on terminal"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs//events > resumes after `after`, or after `Last-Event-ID`"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs//events > resumes after `after`, or after `Last-Event-ID`"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs//events > returns 400 for an `after` that is not a whole number"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs//events > returns 400 for an `after` that is not a whole number"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs//events > says it is alive while the job is quiet, and ends when the service stops"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs//events > says it is alive while the job is quiet, and ends when the service stops"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs//events > stops sending when its reader goes away"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs//events > stops sending when its reader goes away"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > GET /jobs//events > streams the stored events, then new ones, and ends after the job's terminal state"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > GET /jobs//events > streams the stored events, then new ones, and ends after the job's terminal state"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > accepts a boolean result schema and a request that narrows nothing"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > accepts a boolean result schema and a request that narrows nothing"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 201 with a new job and starts the lane, then 200 with the same job for the same request"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 201 with a new job and starts the lane, then 200 with the same job for the same request"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 400 for a body that is not JSON"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 400 for a body that is not JSON"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 400 for a body that is not an object"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 400 for a body that is not an object"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 400 for a fractional turn count"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 400 for a fractional turn count"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 400 for a missing caller"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 400 for a missing caller"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 400 for a result schema that is not a schema"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 400 for a result schema that is not a schema"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 400 for a turn count below one"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 400 for a turn count below one"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 400 for an empty profile"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 400 for an empty profile"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 400 for an empty task"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 400 for an empty task"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 400 for an overlong key"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 400 for an overlong key"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 400 for an unknown profile, and for a request beyond its profile"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 400 for an unknown profile, and for a request beyond its profile"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 400 for instructions that are not text"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 400 for instructions that are not text"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 400 for tools that are not names"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 400 for tools that are not names"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > POST /jobs > returns 409 for a key that names a different request"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > POST /jobs > returns 409 for a key that names a different request"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > authorization > returns 401 for a request without the token, or with another one"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > authorization > returns 401 for a request without the token, or with another one"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > one job > asks a job to stop"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > one job > asks a job to stop"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > one job > returns refused command details in the job snapshot and event stream"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > one job > returns refused command details in the job snapshot and event stream"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > one job > returns the job, and 404 for one it does not hold"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > one job > returns the job, and 404 for one it does not hold"}} {"date":"2026-10-05","from":{"k":"unit","s":"cli","n":"local-jobs/api > routing > returns 404 for another route, and 405 for another method on `/jobs`"},"to":{"k":"unit","s":"agent-runner","n":"local-jobs/api > routing > returns 404 for another route, and 405 for another method on `/jobs`"}}