Skip to content

docs(design): C18 records the #268 decisions - #274

Merged
Max-Levitskiy merged 2 commits into
mainfrom
docs/c18-268-decisions
Oct 18, 2026
Merged

Max-Levitskiy merged 2 commits into
mainfrom
docs/c18-268-decisions

Conversation

@Max-Levitskiy

Copy link
Copy Markdown
Member

Writes the decisions from #268 into C18 (docs/design/c18-cli-grammar.md):

  • describe probes but writes nothing. A dead answer shows the attempt as cut off (probe-dead), and the sweep, claim and continue still write the expiry. status --no-probe does not carry over. (§1)
  • wait --timeout <duration> takes a value with a unit (30s, 5m, 1m30s). A bare number exits 2 with an error that shows the fix. The default is 30s, and 0s checks once. (§2)
  • continue is the until-parked mode, and now also waits for a step another worker runs, so it replaces worker --run --until-parked exactly. (§3)
  • The CLI reference is generated into spec/cli-reference.md, and spec/cli.md stays hand-written prose. (§5)

Plugin kind identity (§4) is postponed to the plugin work and isn't changed here. Whether get probes (§1) is still open in #268.

Refs #268

https://claude.ai/code/session_01PvecNurNanbbbk5qLA5qpM

describe probes but writes nothing, wait --timeout takes a duration with
a unit (30s by default), continue waits for a step another worker runs,
and the CLI reference is generated into its own file.

Claude-Session: https://claude.ai/code/session_01PvecNurNanbbbk5qLA5qpM
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-18T14:26:58.849531Z a1e5c2d New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 18fd467488

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/design/c18-cli-grammar.md Resolved
Comment thread docs/design/c18-cli-grammar.md Outdated
| `version` | — | `capabilities` |

`get` prints a table, one row per item, with columns from the kind's entry (L3); `-o wide` adds the low-priority columns. `describe` prints everything a person needs about one item: for a run, its status, position, the arrow into it, what it needs, the outstanding invocation, the commands that answer it, and whether a worker is alive. It is the one call that answers "what is this run doing and what do I do?" (`describe run/X -o json` gives the same as an object, which kubectl lacks.) `get events --run X` replaces `events`, as `get` with a parent (L6). `get runs --unfinished` keeps today's `list --unfinished`: only unfinished runs, newest first, filtered in the store rather than by the caller. `get runs` keeps `list`'s tree in text output: a child run is indented under its parent, in sibling order, with the parent node named. `start` and `execute` take the same targets `start` and `run` take today: `workflow/<name>` for a workflow in the project folder, or a path to a workflow folder, its `workflow.dot` or a built artifact. As today, an existing path wins: a target that names an existing file or folder is that path, and only otherwise is it a workflow name in the project folder. `workflow/<name>` always means the name. When two folders share a workflow name, which a lookup by name refuses with `workflow.ambiguous`, `get workflows -o name` prints each of them by its path, which every workflow verb takes.
`get` prints a table, one row per item, with columns from the kind's entry (L3); `-o wide` adds the low-priority columns. `describe` prints everything a person needs about one item: for a run, its status, position, the arrow into it, what it needs, the outstanding invocation, the commands that answer it, and whether a worker is alive. It is the one call that answers "what is this run doing and what do I do?" (`describe run/X -o json` gives the same as an object, which kubectl lacks.) `describe` changes nothing and shows nothing stale (#268). At a held async step whose action has a probe, it runs the probe. On a `dead` answer it records nothing: it shows the attempt as cut off with reason `probe-dead` and what happens next, the same way `status` already shows a worker's try that was cut off. The expiry is written by the verbs that write, as today: `serve`'s sweep, `claim` and `continue`. `status --no-probe` does not carry over, since `describe` writes nothing; the alias accepts it and ignores it. `wait` reads the same live view. `continue run/X` works the run until it parks, as `worker --run --until-parked` does: it runs watches, and exits 6 at a held step with no watch, or one whose watch says the holder waits for a person. At a step another worker runs, it waits for that worker's result instead of returning exit 0, so it replaces `worker --run --until-parked` exactly (#268). `get events --run X` replaces `events`, as `get` with a parent (L6). `get runs --unfinished` keeps today's `list --unfinished`: only unfinished runs, newest first, filtered in the store rather than by the caller. `get runs` keeps `list`'s tree in text output: a child run is indented under its parent, in sibling order, with the parent node named. `start` and `execute` take the same targets `start` and `run` take today: `workflow/<name>` for a workflow in the project folder, or a path to a workflow folder, its `workflow.dot` or a built artifact. As today, an existing path wins: a target that names an existing file or folder is that path, and only otherwise is it a workflow name in the project folder. `workflow/<name>` always means the name. When two folders share a workflow name, which a lookup by name refuses with `workflow.ambiguous`, `get workflows -o name` prints each of them by its path, which every workflow verb takes.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve a store-only mode for polling displays

Ignoring status --no-probe removes the only detailed read that does not launch probe processes. The existing live-view contract in docs/design/c17-live-run-view.md:55-59 invokes this command once per second for every visible run, while spec/host.md:965-967 otherwise limits sweep probes to once per 30 seconds; after this alias change, those displays can execute an external probe every second even though they requested a store-only refresh. Keep the flag's behavior during compatibility releases and provide an equivalent store-only option for describe before migrating that polling flow.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Partly fixed in a1e5c2d: through 0.4 the status alias keeps --no-probe as in 0.2, a read of the store with no probe (L9), so c17's once-a-second poll (docs/design/c17-live-run-view.md:57) is unchanged. Escalated, left open: what that poll moves to by 0.5 (a store-only describe, a probe answer reused for a while, or a push channel) is a design call on top of #268 §1.

@Max-Levitskiy
Max-Levitskiy enabled auto-merge (squash) October 18, 2026 14:26
@Max-Levitskiy
Max-Levitskiy merged commit 324abba into main Oct 18, 2026
7 checks passed
@Max-Levitskiy
Max-Levitskiy deleted the docs/c18-268-decisions branch October 18, 2026 14:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant