Skip to content

docs(#34): define the Git and project-repository integration - #87

Merged
lukaskellerstein merged 6 commits into
redhat-et:mainfrom
lukaskellerstein:lukas/34-git-integration
Sep 11, 2026
Merged

docs(#34): define the Git and project-repository integration#87
lukaskellerstein merged 6 commits into
redhat-et:mainfrom
lukaskellerstein:lukas/34-git-integration

Conversation

@lukaskellerstein

Copy link
Copy Markdown
Contributor

What

Adds docs/architecture/git-integration.md, the contract for issue #34:
how the Drafting Table turns governed specification changes into
reviewable Git history.

It covers project identification, artifact-path selection, change-set
branches, commit content, pull-request preparation, approved
specification state, the permitted Git operations, ungoverned-edit
detection, IdeaBot seeding, failure behavior, and a bare-repository
fixture that #75 executes as its test plan.

Decisions worth a reviewer's attention

  1. Every change reaches the default branch through a pull request, in
    every mode.
    Single-player differs only in that the author merges
    their own and no reviewer is required. overview.md and
    architecture.md disagreed here: one allowed a direct push to main,
    the other made branch protection a mandatory enforcement layer. This
    PR settles it, and narrows the single-player wording in overview.md
    and components.md. Those two sentences come from the approved
    Sketch in Create ProtoBot's Initial Sketch: Vision and Architecture #26, so please confirm the change is acceptable.
  2. ears-manager writes the projection class for a registered
    specification path.
    No document assigned an owner for
    .protobot/projection.yaml, so the remedy for an unclassified path
    named a file that no component could commit. Every other entry in
    that file stays reviewed project policy.
  3. The Drafting Table renders the pull-request body from
    ears-manager change-set compare and impact. ADR-0001 left open
    whether CI or a Drafting Table action posts that summary. The ADR now
    records the answer.
  4. A change set is one manifest file, cs-<nnn>.yaml, in a flat
    .protobot/change-sets/ folder. The manifest holds references, not
    content, so it stays small when the change is large.
  5. Change-set branches are cs/<nnn>-<slug>, cut when change-set create runs and deleted after the merge. This resolves the
    change-set half of the open question "Branch naming and lifecycle" in
    components.md. The wi/ half stays open and belongs to the Job
    Site.

A requirement recorded against #30

No ears-manager subcommand writes .protobot/project.yaml today, and
neither subcommand table lists one. The document records that #30 must
define a project initialization operation, and says that fixture step 1
has no command to run until it exists.

Question for the maintainers

AGENTS.md lists the specification-document hierarchy and is a protected
path, so this PR does not touch it. Should contract documents like this
one and drafting-table-ux.md (#28, PR #81) be added to that list?

How it was tested

  • The /spec-doc coverage check ran in write mode over the whole
    hierarchy. No inventory item is MISSING: 7 components, 12
    interfaces, 13 constraints, 6 stores, 3 topologies and 8 security
    rules, each with its source anchor. Seven hierarchy files and both
    decision records were read end to end. One consistency mismatch was
    found and fixed in the second commit.
  • All 74 links and anchors in the new document resolve, and so do the
    links in every file this PR edits.
  • pre-commit run --all-files passes. skillsaw was skipped locally,
    because it does not follow the skill symlinks inside a worktree. CI
    runs it on the real tree.

Relationship to #28

PR #81 is still open. This document cites it as pending and does not
link to drafting-table-ux.md, because that file is not on main yet.
Its authoritative mutation-ownership table names #34 for commit and
pull-request mechanics, which this document supplies. Its representative
transcript shows a change-set branch without the sequence number; this
document states that its own naming convention is the authoritative one,
so the two can be reconciled when #81 merges.

Closes #34

@lukaskellerstein
lukaskellerstein requested a review from a team September 10, 2026 10:51
@coderabbitai

coderabbitai Bot commented Sep 10, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: e924632c-c023-499c-ac12-9f4acda48073


Comment @coderabbitai help to get the list of available commands.

@fullsend-ai-review fullsend-ai-review Bot added the risk/moderate PR risk: moderate label Sep 10, 2026
@fullsend-ai-review

fullsend-ai-review Bot commented Sep 10, 2026

Copy link
Copy Markdown

Risk Assessment: moderate (2/5)

Details

Documentation-only PR with a large new spec file (927 lines) and minor updates to 7 existing docs; no security, CI, or dependency changes; high churn and fix history on existing files is typical for iterative spec refinement; issue scope aligns well with PR content and all acceptance criteria appear addressed.

Previous run

Risk Assessment: moderate (2/5)

Details

Documentation-only PR with a large new spec file (927 lines) and minor updates to 7 existing docs; no security, CI, or dependency changes; high churn and fix history on existing files is typical for iterative spec refinement; issue scope aligns well with PR content and all acceptance criteria appear addressed.

Previous run (2)

Risk Assessment: moderate (2/5)

Details

Documentation-only PR with a large new spec file (922 lines) and minor updates to 4 existing docs; no security, CI, or dependency changes; high churn and fix history on existing files is typical for iterative spec refinement; issue scope aligns well with PR content.

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 10, 2026

Copy link
Copy Markdown

Review

Findings

Medium

  • [stale-doc] CLAUDE.md — The specification document hierarchy in CLAUDE.md does not list docs/architecture/git-integration.md. This hierarchy is the authoritative registry agents consult when following the "Read all sibling specification documents first" rule (CLAUDE.md rule 1). An agent following that rule will not discover git-integration.md, undermining the cross-document consistency guarantee the hierarchy exists to enforce.
    Remediation: Add an entry for docs/architecture/git-integration.md to the hierarchy list in CLAUDE.md.

Low

  • [edge-case] docs/architecture/git-integration.md:349 — Initialization step 3 says change-set create "records the default-branch head as base_commit". The document does not specify whether base_commit is read from the local default-branch ref (e.g., refs/heads/main) or from the remote-tracking ref (e.g., refs/remotes/origin/main). In a fresh clone where no local commits were made to the default branch, both coincide. But if the remote has advanced between cutting the branch (step 1) and running change-set create (step 3), they will differ.
    Remediation: Specify that change-set create reads the local ref for repository.default_branch, or state that a fetch from the canonical remote is required before branch creation.

  • [edge-case] docs/architecture/git-integration.md:496 — The slug derivation rule says "trimmed to 40 characters at a hyphen boundary". The behavior when the first 40 characters of the lowercased, hyphen-normalized intent contain no hyphen is unspecified. The fallback "When nothing alphanumeric survives, the slug is change-set" covers only the empty-slug case, not the no-hyphen-within-40-chars case.
    Remediation: Add a clause for the case when no hyphen exists within 40 characters, e.g., "trimmed to 40 characters at the last hyphen boundary before position 40, or at exactly 40 characters if no hyphen precedes that position."

  • [document-header-format] docs/architecture/git-integration.md:3 — The document header uses a multi-line blockquote with descriptive prose inline. Most sibling documents (components.md, overview.md, user-interaction-flow.md, related-work.md, open-questions.md) use a single-line blockquote. However, docs/architecture.md also uses a multi-line blockquote with descriptive prose, so there is existing precedent for this style.

  • [scope-alignment] docs/architecture/components.md:735 — The modified .protobot/project.yaml table row summarizes repository fields as "the canonical remote, default branch and declared review mode" with a link to git-integration.md#repository-fields, but omits repository.branch_prefix from the summary. The linked section contains the complete field list including branch_prefix.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run

Review

Findings

Medium

  • [stale-doc] CLAUDE.md — The specification document hierarchy in CLAUDE.md does not list docs/architecture/git-integration.md. This hierarchy is the authoritative registry agents consult when following the "Read all sibling specification documents first" rule (CLAUDE.md rule 1). An agent following that rule will not discover git-integration.md, undermining the cross-document consistency guarantee the hierarchy exists to enforce.
    Remediation: Add an entry for docs/architecture/git-integration.md to the hierarchy list in CLAUDE.md.

Low

  • [algorithm-logic-inconsistency] docs/architecture/git-integration.md:377 — "its manifest records the initialization commit as base_commit" is ambiguous — "initialization commit" could mean the commit on the cs/001-project-init branch or the merge commit on the default branch. Fixture step 2 clarifies that base_commit for CS-002 is the default-branch head after the CS-001 merge.
    Remediation: Replace "the initialization commit" with "the CS-001 merge commit on the default branch."

  • [edge-case] docs/architecture/git-integration.md:140 — The constraint on repository.branch_prefix states it "may not be wi/ or any other Job Site namespace" but the set of Job Site namespaces is not enumerated anywhere in the hierarchy. An implementer of ears-manager check cannot verify beyond the literal wi/ check because "any other Job Site namespace" is unresolvable.
    Remediation: Either enumerate the full set of reserved prefixes or state that wi/ is currently the only one.

  • [scope-creep] docs/architecture/git-integration.md:210 — The bolded statement "Define the ears-manager CLI Integration Contract #30 must define a project initialization operation" reads as a directive on a sibling contract. The dependency is real but the imperative phrasing is stronger than a specification document's scope typically allows.
    Remediation: Soften to a dependency observation (e.g., "This contract depends on Define the ears-manager CLI Integration Contract #30 defining a project initialization operation") rather than a directive.

  • [scope-alignment] docs/decisions/0001-requirements-storage-format.md:157 — The edit changes ADR-0001's text from an open question to a decided statement by rewriting the original sentence inline. The new phrasing ("was left outside this ADR's scope and is now decided") acknowledges the prior state but modifies the original decision text rather than using a dated addendum.
    Remediation: Add a bracketed date annotation (e.g., "[Resolved September 2026]") or add the resolution as a separate paragraph below the original text.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (2)

Review

Findings

Medium

  • [stale-doc] CLAUDE.md — The specification document hierarchy does not include the new docs/architecture/git-integration.md. Agents following the "Read all sibling specification documents first" rule (CLAUDE.md rule 1) will not discover this document, undermining the cross-document consistency guarantee the hierarchy exists to enforce.
    Remediation: Add docs/architecture/git-integration.md to the hierarchy list.

  • [stale-doc] docs/architecture/open-questions.md, docs/architecture/user-interaction-flow.md, docs/architecture/related-work.md — Related Documents sections do not include a cross-reference to the new sibling git-integration.md. The PR adds the reference in architecture.md, components.md, and overview.md but omits these three siblings, creating an asymmetric navigation structure.
    Remediation: Add a [Git and Project-Repository Integration](git-integration.md) entry to each file's Related Documents section.

Low

  • [internal-inconsistency] docs/architecture/git-integration.md:200 — The project initialization sequence separates branch creation (step 1) from change-set create (step 3), but the general rule in "When the branch is created" states the branch is cut when change-set create runs. The initialization exception is not cross-referenced in the general rule. See also: [algorithm-logic-inconsistency] at this location.
    Remediation: Add a note in the "When the branch is created" section acknowledging that initialization separates these steps.

  • [algorithm-logic-inconsistency] docs/architecture/git-integration.md:204change-set create is described as simultaneously cutting a branch and recording base_commit. During initialization, the branch already exists, so change-set create only records base_commit. This implementation distinction is implicit. See also: [internal-inconsistency] at this location.
    Remediation: Clarify that change-set create records base_commit regardless of whether it also cuts the branch.

  • [edge-case] docs/architecture/git-integration.md:205 — Initialization step 4 says "Commit both files" but if artifact path registration writes classification entries to projection.yaml, three files may need committing.
    Remediation: List committed files explicitly or verify whether projection.yaml is written during CS-001.

  • [edge-case] docs/architecture/git-integration.md:296repository.branch_prefix has no stated validation constraint preventing collision with the reserved wi/ prefix or other Job Site namespaces.
    Remediation: Add a validation constraint or note that ears-manager check validates prefix uniqueness.

  • [edge-case] docs/architecture/git-integration.md:349 — The slug derivation rule has no fallback for entirely non-alphanumeric intents that would produce an empty slug after transformation.
    Remediation: Add a fallback rule (e.g., use change-set or the numeric ID as the slug).

  • [scope-alignment] docs/decisions/0001-requirements-storage-format.md:157 — The edit retroactively changes ADR-0001's decision text from an open question to a decided statement. While the cross-reference is appropriate, the rewrite makes the ADR appear to have always contained this decision.
    Remediation: Consider preserving the original text and appending a forward-reference note.

  • [document-header-format] docs/architecture/git-integration.md:3 — The blockquote header uses a multi-line extended format (9 lines); sibling spec docs use a single-line > Design document — draft, <Month Year> convention. The scope summary duplicates the "Purpose and scope" section.
    Remediation: Reduce to the single-line convention used by sibling documents.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 10:53 AM UTC · Completed 11:14 AM UTC

Commit: 60a38b8 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $10.87

@lukaskellerstein

Copy link
Copy Markdown
Contributor Author

Round 1 answered in cb09380. Seven of the nine findings are fixed, and each inline thread carries its reply. The two Medium findings have no thread, so they are answered here.

T1, CLAUDE.md hierarchy list — not changed. AGENTS.md, and its CLAUDE.md symlink, is on the Fullsend protected-path list, and the brief for #34 says not to edit it. The PR body asks the maintainers whether contract documents belong in that list. If the answer is yes, it lands in a separate PR that names the authorizing issue, and it should cover drafting-table-ux.md from #28 at the same time, since PR #81 is in the same position.

T9, Related Documents in three siblings — fixed in cb09380. open-questions.md, user-interaction-flow.md and related-work.md now list the new sibling, so every hierarchy document points at it. Adding three links and leaving three out was worse than either all or none.

The five Low findings that were fixed: the header blockquote is trimmed to the shape architecture.md uses; "When the branch is created" names the initialization exception and says change-set create records base_commit either way; the initialization commit holds three files, not two, because projection.yaml carries the class of each registered path; branch_prefix may not be wi/; and an empty slug falls back to change-set.

One Low finding is not changed: editing the sentence in ADR-0001 that named the open question is what the house adr skill prescribes, and the original wording is kept in the past tense. The reasoning is in that thread.

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 11:51 AM UTC · Completed 12:33 PM UTC

Commit: cb09380 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high

@lukaskellerstein

Copy link
Copy Markdown
Contributor Author

Round 2 answered in d51b872. Four of the five findings are fixed, each in its own thread. The Medium finding has no thread, so it is answered here.

T1, CLAUDE.md hierarchy list — not changed, same as round 1. AGENTS.md, and its CLAUDE.md symlink, is on the Fullsend protected-path list, and the brief for #34 says not to edit it. The PR body asks the maintainers whether contract documents belong in that list. The answer should also cover drafting-table-ux.md from #28, which is in the same position in PR #81, and it belongs in its own PR that names the authorizing issue. Nothing has changed since round 1 that would change this answer.

Fixed this round: branch_prefix names wi/ as the only reserved prefix today, since round 1's "any other Job Site namespace" was not enumerable; the dependency on #30 is stated as a dependency rather than an instruction; the initial Sketch records the merge commit that landed CS-001 as its base_commit, which is what fixture step 2 asserts; and ADR-0001 keeps its original sentence with the decision appended as a dated amendment.

That last one reverses my round 1 answer. The suggestion in this round was better than the inline rewrite I defended, so I took it.

@fullsend-ai-review fullsend-ai-review 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.

See the review comment for full details.

Comment thread docs/architecture/git-integration.md Outdated
Comment thread docs/architecture/git-integration.md
Comment thread docs/architecture/git-integration.md Outdated
Comment thread docs/architecture/components.md
@fullsend-ai-review

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 1:15 PM UTC · Completed 1:36 PM UTC

Commit: d51b872 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $5.64

@lukaskellerstein lukaskellerstein added fullsend-no-fix Skip bot-triggered fix agent runs please-review Ready for maintainers to review this PR labels Sep 10, 2026

@JohnStrunk JohnStrunk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Overall, I like this. Only a few inconsistencies that I saw.

Comment thread docs/architecture/git-integration.md Outdated
@@ -0,0 +1,927 @@
# ProtoBot: Git and Project-Repository Integration

> Design document — draft, September 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This should not be marked as a draft. If/when the PR merges it, it will be accepted.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in 4714d2a: the header now reads "Design document — September 2026".

I left the word in the five sibling documents, since changing those is a separate call. Say if you want them in this PR.

Comment thread docs/architecture/git-integration.md Outdated

### Selecting the paths

`protobot new` (the session-start command in the pending #28

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

protobot is not a command, so there can be no protobot new. This is probably an ears-manager command of some sort.

@lukaskellerstein lukaskellerstein Sep 11, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in c1fc52a. The sentence no longer names a command. "Selecting the
paths" now says the write goes through the ears-manager initialization
operation that "Project initialization" records as a dependency on #30.

The name came from docs/architecture/user-interaction-flow.md:102. Its
interface-type taxonomy gave protobot generate as the example for a CLI
interface, and that was the only place a protobot executable appeared in
the docs. The same commit changes that cell to "Build tool, code
generator". Every other example in that table names a kind of interface
rather than a command, so the row now matches its siblings.

Comment thread docs/architecture/git-integration.md Outdated
Add docs/architecture/git-integration.md, the contract for turning
governed specification changes into reviewable Git history.

The document covers:
- project identification through .protobot/project.yaml, including the
  canonical remote, the default branch and the declared review mode;
- artifact-path selection, with one change set as one manifest file;
- change-set branches named cs/<nnn>-<slug>, cut when change-set create
  runs and deleted after the merge;
- commit content, message and trailer, and the rule against rewriting
  pushed history;
- pull-request preparation, with the body rendered from change-set
  compare and impact;
- approved specification state and registration in both modes;
- a four-layer defence against ungoverned edits;
- an allowlist of permitted Git operations;
- IdeaBot material as input content only, never a dependency;
- a failure table with a deterministic diagnostic and a safe retry per
  condition; and
- a bare-repository fixture as the test plan for redhat-et#75.

Every change reaches the default branch through a pull request, in every
mode. Single-player differs only in that the author merges their own and
no reviewer is required. This settles the conflict between overview.md,
which allowed a direct push to main, and architecture.md, which made
branch protection mandatory, and narrows the single-player wording in
overview.md and components.md.

ears-manager writes the projection class for a registered specification
path. That closes the gap where the remedy for an unclassified path
named a file the contract could not commit.

Also links the new document from architecture.md, components.md and
overview.md, marks the change-set half of the branch-naming open
question resolved, points ADR-0001's deferred pull-request question at
the answer, and fixes a broken Q13 anchor in architecture.md.
Run the AGENTS.md coverage check over the whole hierarchy against
docs/architecture/git-integration.md. No inventory item is MISSING.
Three fixes came out of it.

- The document said ADR-0001 "leaves open" who posts the rendered
  pull-request summary. The previous commit already changed ADR-0001 to
  state the decision, so the tense read as a contradiction between the
  two files. It now says "left open" and points at the record.
- Add the pull-request rule to the table of contents. It is the
  document's most load-bearing decision and it was not listed.
- Register the manifest file name in the control-namespace table in
  components.md, so a reader of that file alone learns that a change set
  is one flat file named cs-<nnn>.yaml.
Seven of the nine bot findings are fixed. Two are answered in their
threads without a change.

- T2 Trim the header blockquote to the shape architecture.md uses. The
  long form repeated the Purpose and scope section.
- T3, T4 "When the branch is created" now names the initialization
  exception, where the branch exists before change-set create, and says
  that change-set create records base_commit either way.
- T5 The initialization commit holds three files, not two.
  projection.yaml carries the shared class of each registered path.
  Fixture step 1 expects it.
- T6 repository.branch_prefix may not be wi/ or another Job Site
  namespace, and ears-manager check rejects one that is.
- T7 An intent with no alphanumeric character falls back to the slug
  change-set.
- T9 open-questions.md, user-interaction-flow.md and related-work.md now
  list the new sibling in Related Documents, so every hierarchy document
  points at it.

Not changed:

- T1 AGENTS.md, and its CLAUDE.md symlink, is a protected path. The
  brief for redhat-et#34 says not to edit it, and the PR body asks the
  maintainers whether contract documents belong in that list.
- T8 The adr skill prescribes updating the sentence in an ADR that names
  a gap and linking the decision. The original wording is kept in the
  past tense.
Four of the five bot findings are fixed. One is answered again without a
change.

- T2 branch_prefix names wi/ as the only reserved prefix today. Round 1
  added "or any other Job Site namespace", which no document enumerates,
  so ears-manager check could not evaluate it. A further reserved prefix
  has to be recorded in the Content Storage Model first.
- T3 The dependency on redhat-et#30 is stated as a dependency, not as an
  instruction to that contract. The substance is unchanged.
- T4 The initial Sketch records the merge commit that landed CS-001 on
  the default branch as base_commit. "The initialization commit" could
  have meant the commit on the init branch, which is a different hash
  from the one fixture step 2 asserts.
- T5 ADR-0001 keeps its original sentence word for word, and the
  decision follows as a dated amendment. This reverses the round 1
  answer: the bot's new suggestion is better than the inline rewrite,
  because the record stays readable as a record and the reader still
  learns the outcome.

Not changed:

- T1 AGENTS.md, and its CLAUDE.md symlink, is a protected path. The
  brief for redhat-et#34 says not to edit it, and the PR body asks the
  maintainers whether contract documents belong in that list. Same
  answer as round 1.
JohnStrunk requested changes with three findings. All three are fixed,
plus two bot findings that describe undefined behavior rather than style.

From the human review:

- T1 The header no longer says draft. Merging the PR is what makes the
  document accepted. The five sibling documents still say it; changing
  those is a separate call.
- T3 The document named no command that exists. There is no protobot
  executable, so the sentence now says the Drafting Table proposes the
  default layout at initialization and the user confirms it. The name
  came from the pending redhat-et#28 document, which uses protobot new and
  protobot resume in its session diagram, so PR redhat-et#81 needs the same
  correction; that is already open there as finding A5.
- T4 The requirement store defaults to .protobot/requirements/, which
  keeps the files ears-manager manages together. components.md records
  the default next to the control namespace table, since the path sits
  inside .protobot/ and the table does not list it. The store is still a
  registry entry, so a project may point it elsewhere.

From the bot review, fixed rather than deferred under the round 3 policy,
because both leave behavior undefined and the push was happening anyway:

- T5 The default-branch head is read from the local ref, after a fetch
  from the canonical remote. The two readings gave different hashes, and
  base_commit anchors the rest of the contract.
- T6 The slug is cut at the last hyphen before position 40, or at exactly
  40 characters when no hyphen precedes it. Every intent now yields one
  branch name.

Not changed:

- T2 The header-length finding names architecture.md as precedent itself
  and asks for nothing.
- T7 The components.md row is a one-line summary that links to the full
  field table. Round 3: style only.
- T8 AGENTS.md, and its CLAUDE.md symlink, is a protected path. The brief
  for redhat-et#34 says not to edit it, and the PR body asks the maintainers.

Rebased onto upstream/main, 23 commits, no conflicts.
@lukaskellerstein

lukaskellerstein commented Sep 11, 2026

Copy link
Copy Markdown
Contributor Author

Round 3 answered in 4714d2a, rebased onto upstream/main over 23 commits with no conflicts. c1fc52a follows it. It corrects the T3 answer and removes protobot generate from the interface-type taxonomy in user-interaction-flow.md, which was the source of the command name.

@JohnStrunk all three of your findings are fixed, each answered in its own thread. Two of them were factual errors rather than wording, so thank you for catching them. One open question for you is in the first thread: five sibling documents still say "draft" in their header, and I changed only this one.

The review bot's findings for this round have no inline threads, so they are answered here.

Fixed, although the round 3 policy would have deferred them. Both describe behavior the document left undefined, not style, and the push was happening anyway for the human review:

  • git-integration.md:349 — the default-branch head is now read from the local ref for repository.default_branch, after a fetch from the canonical remote. The local and remote-tracking refs give different hashes once the remote moves, and base_commit anchors the rest of the contract.
  • git-integration.md:496 — the slug is cut at the last hyphen before position 40, or at exactly 40 characters when no hyphen precedes it. With the empty-slug fallback from round 2, every intent now yields exactly one branch name.

Not changed:

  • git-integration.md:3, header length. The finding names architecture.md as precedent for the multi-line style and asks for no change. Round 1 already cut this header from nine lines to three, and its first line changes again this round.
  • components.md:735, the summary row omits branch_prefix. Round 3: style only, not worth another review run. The row is a one-line summary and links to the field table that carries all four fields.
  • CLAUDE.md, the hierarchy list. Third round, same answer. AGENTS.md and its CLAUDE.md symlink are protected paths, the brief for Define the Single-Player Git Integration #34 says not to edit them, and the PR body asks the maintainers whether contract documents belong in that list.

@fullsend-ai-review

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Ended 10:55 AM UTC

Commit: 4714d2a · View workflow run →

JohnStrunk's T3 said that protobot is not a command. The round 3 fix
answered it in the text and named the pending redhat-et#28 document as the source
of the name. Both parts were wrong.

- git-integration.md no longer claims that no protobot executable
  exists. "Selecting the paths" now says the write goes through the
  ears-manager initialization operation that "Project initialization"
  records as a dependency on redhat-et#30.
- user-interaction-flow.md gave `protobot generate` as the example for a
  CLI interface. That was the only place a protobot executable appeared
  in the docs, and it is where the name came from. The cell now reads
  "Build tool, code generator". Every other example in that table names
  a kind of interface in plain text rather than a command, so the row
  now matches its siblings.

The redhat-et#28 draft on PR redhat-et#81 no longer uses protobot new or protobot resume,
so the round 3 claim about it does not hold. Finding A5 there is marked
outdated.
@fullsend-ai-review

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Ended 1:03 PM UTC

Commit: c1fc52a · View workflow run →

@lukaskellerstein
lukaskellerstein added this pull request to the merge queue Sep 11, 2026
@fullsend-ai-retro

Copy link
Copy Markdown

PR #87 (docs(#34): git-integration.md, human-authored branch lukas/34-git-integration, merged 2026-09-11) went through 3 automated fullsend-ai-review rounds (fullsend-ai/agents@v0.43.0) plus 1 human round (JohnStrunk) over ~28.5 hours. Review quality was generally strong: rounds 1-3 caught real cross-reference, sequencing, and edge-case gaps, most fixed within one round, with only minor disputed nitpicks (a header-format finding, a field-summary omission). Two structural issues stood out. First, a real reliability gap: 2 of the 5 review-dispatch runs (on commits 4714d2a and c1fc52a - the latter being the exact commit the human approved and that merged) were externally cancelled 4-23 minutes in (not a 45-min timeout) and posted only a bare '⚠ Cancelled' status with no findings - meaning the version of the document that actually reached main never completed an automated review pass; only the human review covered it. Second, a recurring rework pattern: a Medium finding ('CLAUDE.md hierarchy doesn't list git-integration.md') was raised identically in all 3 automated rounds even though the author explained each time it was blocked on a maintainer policy decision (AGENTS.md is a protected path) - the PR body itself asks maintainers to resolve this open question. On autonomy-readiness: the human reviewer's only substantive catches (an incorrectly-left 'draft' header, an invented CLI command protobot new, and a file-placement suggestion) were factual/domain-knowledge errors outside what a diff-scoped reviewer could verify, not something suggesting the AI reviewer under-performed on its actual scope. Checked for duplicates: no open issue covers the cancellation gap (and its likely-related redundant-dispatch volume), or the AGENTS.md hierarchy-admission question. Related-but-distinct open/closed issues for context: #97 and #95 (REVIEW_PROTECTED_PATHS mechanism - a different 'protected paths' concept than AGENTS.md's spec hierarchy), #83 (prior review-harness timeout fix), #75 (tracks the .protobot/project.yaml init gap PR #87 also flagged, so that item needs no new issue).

Proposals filed

@fullsend-ai-retro

Copy link
Copy Markdown

🤖 Finished Retro · ✅ Success · Started 5:53 PM UTC · Completed 6:06 PM UTC

Commit: c1fc52a · View workflow run →

Runtime: claude · Model: sonnet → claude-sonnet-5 · Effort: high · Cost: $2.37

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fullsend-no-fix Skip bot-triggered fix agent runs please-review Ready for maintainers to review this PR risk/moderate PR risk: moderate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Define the Single-Player Git Integration

2 participants