Skip to content

A chain that reads the host's CI for its gates alone: no warning before a push, no workflow in the guide - #116

Merged
PierreMardon merged 2 commits into
mainfrom
fix/host-ci-left-to-the-host
Oct 8, 2026
Merged

PierreMardon merged 2 commits into
mainfrom
fix/host-ci-left-to-the-host

Conversation

@PierreMardon

@PierreMardon PierreMardon commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

The chain had grown three holds on the CI of the host. Before the first push of a branch, /surface-plan read what triggers the CI, warned the developer and waited for their agreement. The guide gave a GitHub Actions workflow that ran the conformity check once the pull request was marked ready. And the hand back at conformity said that the ready mark "triggers your CI".

The developer decided on 2026-10-08 that tooling a CI widens the chain and specifies too much of what each host does its own way, and that it is theirs to decide when a finished plan leaves the plans in progress (#49), which a check placed at the ready mark decided for them. The conformity check stays, and the documentation may say that a CI can call it.

What changes

  • /surface-plan asks nothing before a push. The step that read the triggers is gone, with the answer it wrote in interview.md and the push a developer could decline. The templates of the exploration and of the interview lose their line on the triggers. The CI configuration is still read in step 1, as a manifest is, for the commands that check the project and their order.
  • The line at conformity says nothing of a CI. It ends on "the developer marks the pull request ready when they want". The words "which triggers their CI" were false in a host that has none, a friction recorded in Hand overs repeat what the developer is sent to read, and tell the chain's own steps #67. The chain still never marks a pull request ready: what the project runs then is the developer's to start.
  • The guide gives no workflow. The conformity check is the developer's command before merging, with its exit codes. One paragraph says that a CI can call it, and that it needs the full history. The README says the same where it links the guide.
  • /surface-status no longer says that the script is the one the CI calls.
  • ADR 0037 records the decision, and ARCHITECTURE.md holds it as an invariant: the next reader who wants a warning before a push, or a workflow in the guide, finds why there is none.
  • The end to end tests turn the scenario of the warning around. One prepared state with a CI is kept, and planning there must push and open its draft at the end of the session that drafts the plan, with no reply in between. The scenario of a push the developer declined is gone with the question, and its state with it. 26 scenarios, 29 tests.

Nothing of the script changes: surface-status check --require conformant answers as before, and tests/ci still holds it in a detached or shallow checkout.

What it costs

In a host whose CI runs on every push, the first push of a plan starts a run nobody announced. That is a configuration of its CI, and the ADR says so.

Checked

  • The gates pass, and the 25 tests that start no session pass in the container.
  • Two scenarios of planning that make a first push were played once each on these prompts, 1.36 USD as their streams report it, and both pass: a draft committed and never pushed, which the relaunch pushes and opens without a question, and planning from the specs, killed in the interview then relaunched to its draft. In the second, exploration.md names the CI only where it looks for the gates ("There is no CI configuration"), and the "Git" section of interview.md holds the branch and nothing on a push.
  • The scenario of a host with a CI was played once: passed, 2.33 USD. Its exploration.md holds no line on the CI, and its interview.md nothing on a push.
  • Not played: /surface-execute to conformity on the line that lost its last words, which the prompt tests hold.
  • Read by an independent reviewer before its merge, which found a leftover the tests did not catch: step 1 of /surface-plan still ended on "and what triggers the CI". It is gone, and the test now holds that neither the command nor its templates speak of a trigger. The second commit also takes from that review the scenario above, since nothing told the new behaviour from the old, a guide that promised a message the check does not give in a checkout that holds the branch alone, and two documents that still said what the chain no longer does.

Left as it is

  • A plan in flight whose developer declined its first push, when the chain still asked: the answer kept in its interview.md is no longer read, and the next launch that finishes its draft pushes it. The ADR says so. No such plan is known.
  • /surface-execute pushes nothing on a branch with no upstream, which the review also read: it is what it did before, and belongs with A session that dies between the commit of a conformant plan and its push leaves the push to nobody #114.
  • The conformity job of ci.yml, which runs tests/ci a second time, on a runner: the gates already run them. The ruleset of main requires its check, "conformity check in a CI checkout", so the job can go only once the ruleset no longer names it, which is a setting of the repository and the developer's to change.
  • The message of the script in a shallow checkout, which names fetch-depth: 0: it is the script's, and the hint is right where it is read.
  • docs/e2e/2026-10-07.md keeps the verdicts of the two scenarios that are gone: it is the record of that day.

Of #8, this takes away the workflow of the guide to run by hand on GitHub and the pin of the action it named. What it still holds is the pull request steps, which have run against the stand-in gh and never against GitHub itself.

…re a push, no workflow in the guide

The chain had grown three holds on the CI of the host: `/surface-plan` read its triggers
before the first push of a branch, warned and waited for an agreement; the guide gave a
GitHub Actions workflow that ran the conformity check once the pull request was marked
ready; and the hand back at conformity said that the ready mark "triggers your CI". The
developer decided on 2026-10-08 that tooling a CI widens the chain and specifies too much
of what each host does its own way, and that it is theirs to decide when a finished plan
leaves the plans in progress (#49), which a check placed at the ready mark decided for
them. The conformity check stays, and the documentation may say that a CI can call it.

- `skills/surface-plan/SKILL.md`: the step before the first push is gone, with the answer
  it wrote in `interview.md` and the push a developer could decline. The templates of the
  exploration and of the interview lose their line on the triggers. The CI configuration
  is still read in step 1, for the commands that check the project and their order.
- `skills/surface-execute/SKILL.md`: the line at conformity ends on "the developer marks
  the pull request ready when they want" and says nothing of a CI, which was false in a
  host that has none (recorded in #67). The chain still never marks ready: what the
  project runs then is the developer's to start.
- `skills/surface-status/SKILL.md` no longer says that the script is the one the CI calls.
- `docs/guide.md`: the conformity check is the developer's command before merging, with
  its exit codes. One paragraph says that a CI can call it and that it needs the full
  history; the workflow is gone. `README.md` says the same where it links the guide.
- ADR 0037 records the decision, and `ARCHITECTURE.md` holds it as an invariant.
- The end to end tests lose the toy with a CI, its two prepared states and the two
  scenarios of #115 that played the warning: 25 scenarios are left, 28 tests.

Nothing of the script changes: `surface-status check --require conformant` answers as
before, and `tests/ci` still holds it in a detached or shallow checkout.

Left as it is: the `conformity` job of `ci.yml`, which runs `tests/ci` a second time. The
ruleset of `main` requires its check, so the job goes once the ruleset no longer does.
…nd a scenario that holds the push in a host that has one

An independent review of the change found what it had left behind.

- Step 1 of `/surface-plan` still ended on "and what triggers the CI": the session was told
  to establish the triggers the decision says it does not read. The words are gone, and
  the test holds that neither the command nor its templates speak of a trigger, where it
  only looked at the section the warning stood in.
- Nothing told the new behaviour from the old: the scenarios left make their first push
  in a toy with no CI, where the old command asked nothing either. One prepared state
  with a CI is kept, and its scenario turned around: at the end of the session that
  drafts the plan, with no reply in between, the plan is pushed and its draft opened.
  Played once: passed, 2.33 USD.
- The guide said that the check "says so" when a shallow checkout hides the history. In a
  checkout that holds the branch alone it says that it cannot find the main branch, and
  nothing of the depth: the guide now says what the check needs and that it exits with 2.
  ADR 0037 says what `tests/ci` holds, a detached checkout answered and one too shallow
  refused, and no more.
- ADR 0037 says what the change does to a plan in flight: an answer that declined a first
  push, kept in `interview.md`, is no longer read.
- The checks that a text does not name the CI match the word, not its letters.
- `CONTRIBUTING.md` and the README of the end to end tests said what the chain no longer
  does, or named a state that is gone.

Left as it is: `/surface-execute` pushes nothing on a branch with no upstream, which the
review also read. It is what it did before, and belongs with #114.
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