docs: issue contract for the autonomous loop (template + AGENTS.md) - #759

Merged
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract
Aug 10, 2026
Merged

docs: issue contract for the autonomous loop (template + AGENTS.md)#759
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract

Conversation

@joryirving

Copy link
Copy Markdown
Contributor

Summary

Agents file most issues in this repo, and two parts of the body feed deterministic reviewer rails:

  • A one-sentence imperative ask — the reviewer quotes it verbatim to prove it read the issue. If it can only paraphrase, its GO is demoted to NO-GO.
  • Concrete file paths the fix should touch — scope-overlap vouches for a diff touching a named file, and that vouch is what survives a paraphrased ask.

An issue with neither loses correct work to a false rejection plus an escalation review — observed today on alert-triage#14.

Adds an Agent task issue form and documents the contract in AGENTS.md (appended), including the trap that naming files the fix does not touch is worse than naming none (it reads as scope drift and also rejects).

Verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16.

The reviewer runs two deterministic rails against the issue body: it must
quote the ask verbatim, and scope-overlap vouches for a diff that touches a
file the issue names. An issue with neither gets correct work demoted to
NO-GO, costing a revision cycle plus an escalation review.
Adds an Agent task issue form and documents the contract in AGENTS.md,
including the trap that naming files the fix does not touch is worse than
naming none.

@its-saffronits-saffronBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

AI Automated Review

Full PR review.

Analysis engine: dsv4f@https://litellm.jory.dev/v1 (openai) — primary route

Recommendation: Approve. This is a focused, docs-only change: it adds a GitHub issue form (.github/ISSUE_TEMPLATE/agent-task.yml) for the autonomous coding loop and appends the corresponding contract to AGENTS.md. CI is green (Lint, Typecheck, Build, Tests, npm audit, Docker Build), and both changes follow existing repository conventions. The PR classifier listed no must_check entries, so there were no mandatory checklist items beyond the standard review. The only items I see are minor doc-consistency nits that can be addressed in a follow-up.

Change-by-change findings

.github/ISSUE_TEMPLATE/agent-task.yml (added)

  • The form matches the GitHub issue-form schema: Context, The ask, and Acceptance criteria are required; Expected files is intentionally optional (no validations block), which implements the documented "name none rather than guessing" rule.
  • Hardcoded labels: ["type/chore"] is valid per AGENTS.md label conventions.
  • Info-level note: the Expected files placeholder uses Go paths (internal/delivery/github.go), while this is a TypeScript/Next.js repo; using this repo's real paths would make the example clearer.

AGENTS.md (appended section)

  • The new "Filing issues for the autonomous loop" section is clear and generic (no agent-specific names), matching Code Standard 1.
  • Minor: the text says agents "must include both" fields, but the template's Expected files is optional and the next paragraph says "name none rather than guessing"; the wording should be aligned (e.g., "state the ask; name file paths when known").
  • Minor: foreman, reviewer rails, and GO/NO-GO are introduced without definitions or a pointer, which may be ambiguous for an agent reading AGENTS.md as a standalone contract.

Sources

  • PR PR 759 metadata and full diff (2 files, +63/−0).
  • Repository standards file AGENTS.md (provided in corpus).
  • CI status API for commit 336121b: all 6 checks passed.
  • Repository history and impact scan (no 0.9.16 references in repo history; alert-triage#14 not present in history; foreman source is not vendored in this repo).

Standards Compliance

  • Label Conventions: type/chore is an allowed label.
  • Code Standard 1 (no agent-specific names in generic docs): satisfied — the new AGENTS.md text uses generic terms only.
  • No changes affect environment variables, Prisma schema, API routes, Docker, or CI configuration, so the corresponding standards sections are unaffected.
  • The "must include both" wording conflicts with the template's optional files field (minor inconsistency; see finding below), but the actual implemented behavior matches the "name none when unsure" convention.

Unknowns or Needs Verification

  • The PR body says the contract was verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16, but foreman is not vendored here and no 0.9.16 reference appears in repository history; this verification is not independently checkable from the corpus.
  • The referenced alert-triage#14 example is not present in repository history.
  • A read-only GitHub API check of .github/ISSUE_TEMPLATE on the base branch returned 404 (expected, since this PR creates that directory), and the .github listing could not be completed before the tool budget was exhausted, so I could not confirm whether other issue templates or a blank-issue config exist and how they interact with this new template.
  • The tool-harness section in the corpus only said "planning pending"; no harness findings were available to review.

Comment threadAGENTS.md

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two
parts of the body feed deterministic reviewer rails. Agents filing issues in this repo
must include both.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new text says agents 'must include both' (ask + files), but the following paragraph says 'name none rather than guessing' and the template's Expected files field is optional; align the wording so the contract is unambiguous.

Automated finding from AI PR review.

Comment threadAGENTS.md

## Filing issues for the autonomous loop

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new section introduces 'foreman', 'reviewer rails', and 'GO/NO-GO' without definitions or links, making the agent-facing contract ambiguous for readers outside that external codebase.

Automated finding from AI PR review.

are confident about — naming files the diff does not touch reads as scope
drift and gets the change rejected. Leave empty if unsure.
placeholder: |
internal/delivery/github.go

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Info (style): The Expected files placeholder uses Go-style paths while this repo is TypeScript/Next.js; using this repo's real paths would make the example less confusing.

Automated finding from AI PR review.

@joryirving
joryirving merged commit 9d4d4db into mainAug 10, 2026
7 checks passed
@joryirving
joryirving deleted the docs/agent-issue-contract branch August 10, 2026 18:39
@its-saffronits-saffronBot mentioned this pull request Aug 19, 2026
Sign up for freeto 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

@joryirving
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

docs: issue contract for the autonomous loop (template + AGENTS.md) - #759

Merged
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract
Aug 10, 2026
Merged

docs: issue contract for the autonomous loop (template + AGENTS.md)#759
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract

Conversation

@joryirving

Copy link
Copy Markdown
Contributor

Summary

Agents file most issues in this repo, and two parts of the body feed deterministic reviewer rails:

  • A one-sentence imperative ask — the reviewer quotes it verbatim to prove it read the issue. If it can only paraphrase, its GO is demoted to NO-GO.
  • Concrete file paths the fix should touch — scope-overlap vouches for a diff touching a named file, and that vouch is what survives a paraphrased ask.

An issue with neither loses correct work to a false rejection plus an escalation review — observed today on alert-triage#14.

Adds an Agent task issue form and documents the contract in AGENTS.md (appended), including the trap that naming files the fix does not touch is worse than naming none (it reads as scope drift and also rejects).

Verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16.

The reviewer runs two deterministic rails against the issue body: it must
quote the ask verbatim, and scope-overlap vouches for a diff that touches a
file the issue names. An issue with neither gets correct work demoted to
NO-GO, costing a revision cycle plus an escalation review.
Adds an Agent task issue form and documents the contract in AGENTS.md,
including the trap that naming files the fix does not touch is worse than
naming none.

@its-saffronits-saffronBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

AI Automated Review

Full PR review.

Analysis engine: dsv4f@https://litellm.jory.dev/v1 (openai) — primary route

Recommendation: Approve. This is a focused, docs-only change: it adds a GitHub issue form (.github/ISSUE_TEMPLATE/agent-task.yml) for the autonomous coding loop and appends the corresponding contract to AGENTS.md. CI is green (Lint, Typecheck, Build, Tests, npm audit, Docker Build), and both changes follow existing repository conventions. The PR classifier listed no must_check entries, so there were no mandatory checklist items beyond the standard review. The only items I see are minor doc-consistency nits that can be addressed in a follow-up.

Change-by-change findings

.github/ISSUE_TEMPLATE/agent-task.yml (added)

  • The form matches the GitHub issue-form schema: Context, The ask, and Acceptance criteria are required; Expected files is intentionally optional (no validations block), which implements the documented "name none rather than guessing" rule.
  • Hardcoded labels: ["type/chore"] is valid per AGENTS.md label conventions.
  • Info-level note: the Expected files placeholder uses Go paths (internal/delivery/github.go), while this is a TypeScript/Next.js repo; using this repo's real paths would make the example clearer.

AGENTS.md (appended section)

  • The new "Filing issues for the autonomous loop" section is clear and generic (no agent-specific names), matching Code Standard 1.
  • Minor: the text says agents "must include both" fields, but the template's Expected files is optional and the next paragraph says "name none rather than guessing"; the wording should be aligned (e.g., "state the ask; name file paths when known").
  • Minor: foreman, reviewer rails, and GO/NO-GO are introduced without definitions or a pointer, which may be ambiguous for an agent reading AGENTS.md as a standalone contract.

Sources

  • PR PR 759 metadata and full diff (2 files, +63/−0).
  • Repository standards file AGENTS.md (provided in corpus).
  • CI status API for commit 336121b: all 6 checks passed.
  • Repository history and impact scan (no 0.9.16 references in repo history; alert-triage#14 not present in history; foreman source is not vendored in this repo).

Standards Compliance

  • Label Conventions: type/chore is an allowed label.
  • Code Standard 1 (no agent-specific names in generic docs): satisfied — the new AGENTS.md text uses generic terms only.
  • No changes affect environment variables, Prisma schema, API routes, Docker, or CI configuration, so the corresponding standards sections are unaffected.
  • The "must include both" wording conflicts with the template's optional files field (minor inconsistency; see finding below), but the actual implemented behavior matches the "name none when unsure" convention.

Unknowns or Needs Verification

  • The PR body says the contract was verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16, but foreman is not vendored here and no 0.9.16 reference appears in repository history; this verification is not independently checkable from the corpus.
  • The referenced alert-triage#14 example is not present in repository history.
  • A read-only GitHub API check of .github/ISSUE_TEMPLATE on the base branch returned 404 (expected, since this PR creates that directory), and the .github listing could not be completed before the tool budget was exhausted, so I could not confirm whether other issue templates or a blank-issue config exist and how they interact with this new template.
  • The tool-harness section in the corpus only said "planning pending"; no harness findings were available to review.

Comment threadAGENTS.md

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two
parts of the body feed deterministic reviewer rails. Agents filing issues in this repo
must include both.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new text says agents 'must include both' (ask + files), but the following paragraph says 'name none rather than guessing' and the template's Expected files field is optional; align the wording so the contract is unambiguous.

Automated finding from AI PR review.

Comment threadAGENTS.md

## Filing issues for the autonomous loop

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new section introduces 'foreman', 'reviewer rails', and 'GO/NO-GO' without definitions or links, making the agent-facing contract ambiguous for readers outside that external codebase.

Automated finding from AI PR review.

are confident about — naming files the diff does not touch reads as scope
drift and gets the change rejected. Leave empty if unsure.
placeholder: |
internal/delivery/github.go

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Info (style): The Expected files placeholder uses Go-style paths while this repo is TypeScript/Next.js; using this repo's real paths would make the example less confusing.

Automated finding from AI PR review.

@joryirving
joryirving merged commit 9d4d4db into mainAug 10, 2026
7 checks passed
@joryirving
joryirving deleted the docs/agent-issue-contract branch August 10, 2026 18:39
@its-saffronits-saffronBot mentioned this pull request Aug 19, 2026
Sign up for freeto 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

@joryirving
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: issue contract for the autonomous loop (template + AGENTS.md) - #759

Merged
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract
Aug 10, 2026
Merged

docs: issue contract for the autonomous loop (template + AGENTS.md)#759
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract

Conversation

@joryirving

Copy link
Copy Markdown
Contributor

Summary

Agents file most issues in this repo, and two parts of the body feed deterministic reviewer rails:

  • A one-sentence imperative ask — the reviewer quotes it verbatim to prove it read the issue. If it can only paraphrase, its GO is demoted to NO-GO.
  • Concrete file paths the fix should touch — scope-overlap vouches for a diff touching a named file, and that vouch is what survives a paraphrased ask.

An issue with neither loses correct work to a false rejection plus an escalation review — observed today on alert-triage#14.

Adds an Agent task issue form and documents the contract in AGENTS.md (appended), including the trap that naming files the fix does not touch is worse than naming none (it reads as scope drift and also rejects).

Verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16.

The reviewer runs two deterministic rails against the issue body: it must
quote the ask verbatim, and scope-overlap vouches for a diff that touches a
file the issue names. An issue with neither gets correct work demoted to
NO-GO, costing a revision cycle plus an escalation review.
Adds an Agent task issue form and documents the contract in AGENTS.md,
including the trap that naming files the fix does not touch is worse than
naming none.

@its-saffronits-saffronBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

AI Automated Review

Full PR review.

Analysis engine: dsv4f@https://litellm.jory.dev/v1 (openai) — primary route

Recommendation: Approve. This is a focused, docs-only change: it adds a GitHub issue form (.github/ISSUE_TEMPLATE/agent-task.yml) for the autonomous coding loop and appends the corresponding contract to AGENTS.md. CI is green (Lint, Typecheck, Build, Tests, npm audit, Docker Build), and both changes follow existing repository conventions. The PR classifier listed no must_check entries, so there were no mandatory checklist items beyond the standard review. The only items I see are minor doc-consistency nits that can be addressed in a follow-up.

Change-by-change findings

.github/ISSUE_TEMPLATE/agent-task.yml (added)

  • The form matches the GitHub issue-form schema: Context, The ask, and Acceptance criteria are required; Expected files is intentionally optional (no validations block), which implements the documented "name none rather than guessing" rule.
  • Hardcoded labels: ["type/chore"] is valid per AGENTS.md label conventions.
  • Info-level note: the Expected files placeholder uses Go paths (internal/delivery/github.go), while this is a TypeScript/Next.js repo; using this repo's real paths would make the example clearer.

AGENTS.md (appended section)

  • The new "Filing issues for the autonomous loop" section is clear and generic (no agent-specific names), matching Code Standard 1.
  • Minor: the text says agents "must include both" fields, but the template's Expected files is optional and the next paragraph says "name none rather than guessing"; the wording should be aligned (e.g., "state the ask; name file paths when known").
  • Minor: foreman, reviewer rails, and GO/NO-GO are introduced without definitions or a pointer, which may be ambiguous for an agent reading AGENTS.md as a standalone contract.

Sources

  • PR PR 759 metadata and full diff (2 files, +63/−0).
  • Repository standards file AGENTS.md (provided in corpus).
  • CI status API for commit 336121b: all 6 checks passed.
  • Repository history and impact scan (no 0.9.16 references in repo history; alert-triage#14 not present in history; foreman source is not vendored in this repo).

Standards Compliance

  • Label Conventions: type/chore is an allowed label.
  • Code Standard 1 (no agent-specific names in generic docs): satisfied — the new AGENTS.md text uses generic terms only.
  • No changes affect environment variables, Prisma schema, API routes, Docker, or CI configuration, so the corresponding standards sections are unaffected.
  • The "must include both" wording conflicts with the template's optional files field (minor inconsistency; see finding below), but the actual implemented behavior matches the "name none when unsure" convention.

Unknowns or Needs Verification

  • The PR body says the contract was verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16, but foreman is not vendored here and no 0.9.16 reference appears in repository history; this verification is not independently checkable from the corpus.
  • The referenced alert-triage#14 example is not present in repository history.
  • A read-only GitHub API check of .github/ISSUE_TEMPLATE on the base branch returned 404 (expected, since this PR creates that directory), and the .github listing could not be completed before the tool budget was exhausted, so I could not confirm whether other issue templates or a blank-issue config exist and how they interact with this new template.
  • The tool-harness section in the corpus only said "planning pending"; no harness findings were available to review.

Comment threadAGENTS.md

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two
parts of the body feed deterministic reviewer rails. Agents filing issues in this repo
must include both.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new text says agents 'must include both' (ask + files), but the following paragraph says 'name none rather than guessing' and the template's Expected files field is optional; align the wording so the contract is unambiguous.

Automated finding from AI PR review.

Comment threadAGENTS.md

## Filing issues for the autonomous loop

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new section introduces 'foreman', 'reviewer rails', and 'GO/NO-GO' without definitions or links, making the agent-facing contract ambiguous for readers outside that external codebase.

Automated finding from AI PR review.

are confident about — naming files the diff does not touch reads as scope
drift and gets the change rejected. Leave empty if unsure.
placeholder: |
internal/delivery/github.go

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Info (style): The Expected files placeholder uses Go-style paths while this repo is TypeScript/Next.js; using this repo's real paths would make the example less confusing.

Automated finding from AI PR review.

@joryirving
joryirving merged commit 9d4d4db into mainAug 10, 2026
7 checks passed
@joryirving
joryirving deleted the docs/agent-issue-contract branch August 10, 2026 18:39
@its-saffronits-saffronBot mentioned this pull request Aug 19, 2026
Sign up for freeto 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

@joryirving
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: issue contract for the autonomous loop (template + AGENTS.md) - #759

Merged
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract
Aug 10, 2026
Merged

docs: issue contract for the autonomous loop (template + AGENTS.md)#759
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract

Conversation

@joryirving

Copy link
Copy Markdown
Contributor

Summary

Agents file most issues in this repo, and two parts of the body feed deterministic reviewer rails:

  • A one-sentence imperative ask — the reviewer quotes it verbatim to prove it read the issue. If it can only paraphrase, its GO is demoted to NO-GO.
  • Concrete file paths the fix should touch — scope-overlap vouches for a diff touching a named file, and that vouch is what survives a paraphrased ask.

An issue with neither loses correct work to a false rejection plus an escalation review — observed today on alert-triage#14.

Adds an Agent task issue form and documents the contract in AGENTS.md (appended), including the trap that naming files the fix does not touch is worse than naming none (it reads as scope drift and also rejects).

Verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16.

The reviewer runs two deterministic rails against the issue body: it must
quote the ask verbatim, and scope-overlap vouches for a diff that touches a
file the issue names. An issue with neither gets correct work demoted to
NO-GO, costing a revision cycle plus an escalation review.
Adds an Agent task issue form and documents the contract in AGENTS.md,
including the trap that naming files the fix does not touch is worse than
naming none.

@its-saffronits-saffronBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

AI Automated Review

Full PR review.

Analysis engine: dsv4f@https://litellm.jory.dev/v1 (openai) — primary route

Recommendation: Approve. This is a focused, docs-only change: it adds a GitHub issue form (.github/ISSUE_TEMPLATE/agent-task.yml) for the autonomous coding loop and appends the corresponding contract to AGENTS.md. CI is green (Lint, Typecheck, Build, Tests, npm audit, Docker Build), and both changes follow existing repository conventions. The PR classifier listed no must_check entries, so there were no mandatory checklist items beyond the standard review. The only items I see are minor doc-consistency nits that can be addressed in a follow-up.

Change-by-change findings

.github/ISSUE_TEMPLATE/agent-task.yml (added)

  • The form matches the GitHub issue-form schema: Context, The ask, and Acceptance criteria are required; Expected files is intentionally optional (no validations block), which implements the documented "name none rather than guessing" rule.
  • Hardcoded labels: ["type/chore"] is valid per AGENTS.md label conventions.
  • Info-level note: the Expected files placeholder uses Go paths (internal/delivery/github.go), while this is a TypeScript/Next.js repo; using this repo's real paths would make the example clearer.

AGENTS.md (appended section)

  • The new "Filing issues for the autonomous loop" section is clear and generic (no agent-specific names), matching Code Standard 1.
  • Minor: the text says agents "must include both" fields, but the template's Expected files is optional and the next paragraph says "name none rather than guessing"; the wording should be aligned (e.g., "state the ask; name file paths when known").
  • Minor: foreman, reviewer rails, and GO/NO-GO are introduced without definitions or a pointer, which may be ambiguous for an agent reading AGENTS.md as a standalone contract.

Sources

  • PR PR 759 metadata and full diff (2 files, +63/−0).
  • Repository standards file AGENTS.md (provided in corpus).
  • CI status API for commit 336121b: all 6 checks passed.
  • Repository history and impact scan (no 0.9.16 references in repo history; alert-triage#14 not present in history; foreman source is not vendored in this repo).

Standards Compliance

  • Label Conventions: type/chore is an allowed label.
  • Code Standard 1 (no agent-specific names in generic docs): satisfied — the new AGENTS.md text uses generic terms only.
  • No changes affect environment variables, Prisma schema, API routes, Docker, or CI configuration, so the corresponding standards sections are unaffected.
  • The "must include both" wording conflicts with the template's optional files field (minor inconsistency; see finding below), but the actual implemented behavior matches the "name none when unsure" convention.

Unknowns or Needs Verification

  • The PR body says the contract was verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16, but foreman is not vendored here and no 0.9.16 reference appears in repository history; this verification is not independently checkable from the corpus.
  • The referenced alert-triage#14 example is not present in repository history.
  • A read-only GitHub API check of .github/ISSUE_TEMPLATE on the base branch returned 404 (expected, since this PR creates that directory), and the .github listing could not be completed before the tool budget was exhausted, so I could not confirm whether other issue templates or a blank-issue config exist and how they interact with this new template.
  • The tool-harness section in the corpus only said "planning pending"; no harness findings were available to review.

Comment threadAGENTS.md

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two
parts of the body feed deterministic reviewer rails. Agents filing issues in this repo
must include both.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new text says agents 'must include both' (ask + files), but the following paragraph says 'name none rather than guessing' and the template's Expected files field is optional; align the wording so the contract is unambiguous.

Automated finding from AI PR review.

Comment threadAGENTS.md

## Filing issues for the autonomous loop

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new section introduces 'foreman', 'reviewer rails', and 'GO/NO-GO' without definitions or links, making the agent-facing contract ambiguous for readers outside that external codebase.

Automated finding from AI PR review.

are confident about — naming files the diff does not touch reads as scope
drift and gets the change rejected. Leave empty if unsure.
placeholder: |
internal/delivery/github.go

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Info (style): The Expected files placeholder uses Go-style paths while this repo is TypeScript/Next.js; using this repo's real paths would make the example less confusing.

Automated finding from AI PR review.

@joryirving
joryirving merged commit 9d4d4db into mainAug 10, 2026
7 checks passed
@joryirving
joryirving deleted the docs/agent-issue-contract branch August 10, 2026 18:39
@its-saffronits-saffronBot mentioned this pull request Aug 19, 2026
Sign up for freeto 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

@joryirving
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

docs: issue contract for the autonomous loop (template + AGENTS.md) - #759

Merged
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract
Aug 10, 2026
Merged

docs: issue contract for the autonomous loop (template + AGENTS.md)#759
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract

Conversation

@joryirving

Copy link
Copy Markdown
Contributor

Summary

Agents file most issues in this repo, and two parts of the body feed deterministic reviewer rails:

  • A one-sentence imperative ask — the reviewer quotes it verbatim to prove it read the issue. If it can only paraphrase, its GO is demoted to NO-GO.
  • Concrete file paths the fix should touch — scope-overlap vouches for a diff touching a named file, and that vouch is what survives a paraphrased ask.

An issue with neither loses correct work to a false rejection plus an escalation review — observed today on alert-triage#14.

Adds an Agent task issue form and documents the contract in AGENTS.md (appended), including the trap that naming files the fix does not touch is worse than naming none (it reads as scope drift and also rejects).

Verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16.

The reviewer runs two deterministic rails against the issue body: it must
quote the ask verbatim, and scope-overlap vouches for a diff that touches a
file the issue names. An issue with neither gets correct work demoted to
NO-GO, costing a revision cycle plus an escalation review.
Adds an Agent task issue form and documents the contract in AGENTS.md,
including the trap that naming files the fix does not touch is worse than
naming none.

@its-saffronits-saffronBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

AI Automated Review

Full PR review.

Analysis engine: dsv4f@https://litellm.jory.dev/v1 (openai) — primary route

Recommendation: Approve. This is a focused, docs-only change: it adds a GitHub issue form (.github/ISSUE_TEMPLATE/agent-task.yml) for the autonomous coding loop and appends the corresponding contract to AGENTS.md. CI is green (Lint, Typecheck, Build, Tests, npm audit, Docker Build), and both changes follow existing repository conventions. The PR classifier listed no must_check entries, so there were no mandatory checklist items beyond the standard review. The only items I see are minor doc-consistency nits that can be addressed in a follow-up.

Change-by-change findings

.github/ISSUE_TEMPLATE/agent-task.yml (added)

  • The form matches the GitHub issue-form schema: Context, The ask, and Acceptance criteria are required; Expected files is intentionally optional (no validations block), which implements the documented "name none rather than guessing" rule.
  • Hardcoded labels: ["type/chore"] is valid per AGENTS.md label conventions.
  • Info-level note: the Expected files placeholder uses Go paths (internal/delivery/github.go), while this is a TypeScript/Next.js repo; using this repo's real paths would make the example clearer.

AGENTS.md (appended section)

  • The new "Filing issues for the autonomous loop" section is clear and generic (no agent-specific names), matching Code Standard 1.
  • Minor: the text says agents "must include both" fields, but the template's Expected files is optional and the next paragraph says "name none rather than guessing"; the wording should be aligned (e.g., "state the ask; name file paths when known").
  • Minor: foreman, reviewer rails, and GO/NO-GO are introduced without definitions or a pointer, which may be ambiguous for an agent reading AGENTS.md as a standalone contract.

Sources

  • PR PR 759 metadata and full diff (2 files, +63/−0).
  • Repository standards file AGENTS.md (provided in corpus).
  • CI status API for commit 336121b: all 6 checks passed.
  • Repository history and impact scan (no 0.9.16 references in repo history; alert-triage#14 not present in history; foreman source is not vendored in this repo).

Standards Compliance

  • Label Conventions: type/chore is an allowed label.
  • Code Standard 1 (no agent-specific names in generic docs): satisfied — the new AGENTS.md text uses generic terms only.
  • No changes affect environment variables, Prisma schema, API routes, Docker, or CI configuration, so the corresponding standards sections are unaffected.
  • The "must include both" wording conflicts with the template's optional files field (minor inconsistency; see finding below), but the actual implemented behavior matches the "name none when unsure" convention.

Unknowns or Needs Verification

  • The PR body says the contract was verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16, but foreman is not vendored here and no 0.9.16 reference appears in repository history; this verification is not independently checkable from the corpus.
  • The referenced alert-triage#14 example is not present in repository history.
  • A read-only GitHub API check of .github/ISSUE_TEMPLATE on the base branch returned 404 (expected, since this PR creates that directory), and the .github listing could not be completed before the tool budget was exhausted, so I could not confirm whether other issue templates or a blank-issue config exist and how they interact with this new template.
  • The tool-harness section in the corpus only said "planning pending"; no harness findings were available to review.

Comment threadAGENTS.md

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two
parts of the body feed deterministic reviewer rails. Agents filing issues in this repo
must include both.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new text says agents 'must include both' (ask + files), but the following paragraph says 'name none rather than guessing' and the template's Expected files field is optional; align the wording so the contract is unambiguous.

Automated finding from AI PR review.

Comment threadAGENTS.md

## Filing issues for the autonomous loop

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new section introduces 'foreman', 'reviewer rails', and 'GO/NO-GO' without definitions or links, making the agent-facing contract ambiguous for readers outside that external codebase.

Automated finding from AI PR review.

are confident about — naming files the diff does not touch reads as scope
drift and gets the change rejected. Leave empty if unsure.
placeholder: |
internal/delivery/github.go

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Info (style): The Expected files placeholder uses Go-style paths while this repo is TypeScript/Next.js; using this repo's real paths would make the example less confusing.

Automated finding from AI PR review.

@joryirving
joryirving merged commit 9d4d4db into mainAug 10, 2026
7 checks passed
@joryirving
joryirving deleted the docs/agent-issue-contract branch August 10, 2026 18:39
@its-saffronits-saffronBot mentioned this pull request Aug 19, 2026
Sign up for freeto 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

@joryirving
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: issue contract for the autonomous loop (template + AGENTS.md) - #759

Merged
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract
Aug 10, 2026
Merged

docs: issue contract for the autonomous loop (template + AGENTS.md)#759
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract

Conversation

@joryirving

Copy link
Copy Markdown
Contributor

Summary

Agents file most issues in this repo, and two parts of the body feed deterministic reviewer rails:

  • A one-sentence imperative ask — the reviewer quotes it verbatim to prove it read the issue. If it can only paraphrase, its GO is demoted to NO-GO.
  • Concrete file paths the fix should touch — scope-overlap vouches for a diff touching a named file, and that vouch is what survives a paraphrased ask.

An issue with neither loses correct work to a false rejection plus an escalation review — observed today on alert-triage#14.

Adds an Agent task issue form and documents the contract in AGENTS.md (appended), including the trap that naming files the fix does not touch is worse than naming none (it reads as scope drift and also rejects).

Verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16.

The reviewer runs two deterministic rails against the issue body: it must
quote the ask verbatim, and scope-overlap vouches for a diff that touches a
file the issue names. An issue with neither gets correct work demoted to
NO-GO, costing a revision cycle plus an escalation review.
Adds an Agent task issue form and documents the contract in AGENTS.md,
including the trap that naming files the fix does not touch is worse than
naming none.

@its-saffronits-saffronBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

AI Automated Review

Full PR review.

Analysis engine: dsv4f@https://litellm.jory.dev/v1 (openai) — primary route

Recommendation: Approve. This is a focused, docs-only change: it adds a GitHub issue form (.github/ISSUE_TEMPLATE/agent-task.yml) for the autonomous coding loop and appends the corresponding contract to AGENTS.md. CI is green (Lint, Typecheck, Build, Tests, npm audit, Docker Build), and both changes follow existing repository conventions. The PR classifier listed no must_check entries, so there were no mandatory checklist items beyond the standard review. The only items I see are minor doc-consistency nits that can be addressed in a follow-up.

Change-by-change findings

.github/ISSUE_TEMPLATE/agent-task.yml (added)

  • The form matches the GitHub issue-form schema: Context, The ask, and Acceptance criteria are required; Expected files is intentionally optional (no validations block), which implements the documented "name none rather than guessing" rule.
  • Hardcoded labels: ["type/chore"] is valid per AGENTS.md label conventions.
  • Info-level note: the Expected files placeholder uses Go paths (internal/delivery/github.go), while this is a TypeScript/Next.js repo; using this repo's real paths would make the example clearer.

AGENTS.md (appended section)

  • The new "Filing issues for the autonomous loop" section is clear and generic (no agent-specific names), matching Code Standard 1.
  • Minor: the text says agents "must include both" fields, but the template's Expected files is optional and the next paragraph says "name none rather than guessing"; the wording should be aligned (e.g., "state the ask; name file paths when known").
  • Minor: foreman, reviewer rails, and GO/NO-GO are introduced without definitions or a pointer, which may be ambiguous for an agent reading AGENTS.md as a standalone contract.

Sources

  • PR PR 759 metadata and full diff (2 files, +63/−0).
  • Repository standards file AGENTS.md (provided in corpus).
  • CI status API for commit 336121b: all 6 checks passed.
  • Repository history and impact scan (no 0.9.16 references in repo history; alert-triage#14 not present in history; foreman source is not vendored in this repo).

Standards Compliance

  • Label Conventions: type/chore is an allowed label.
  • Code Standard 1 (no agent-specific names in generic docs): satisfied — the new AGENTS.md text uses generic terms only.
  • No changes affect environment variables, Prisma schema, API routes, Docker, or CI configuration, so the corresponding standards sections are unaffected.
  • The "must include both" wording conflicts with the template's optional files field (minor inconsistency; see finding below), but the actual implemented behavior matches the "name none when unsure" convention.

Unknowns or Needs Verification

  • The PR body says the contract was verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16, but foreman is not vendored here and no 0.9.16 reference appears in repository history; this verification is not independently checkable from the corpus.
  • The referenced alert-triage#14 example is not present in repository history.
  • A read-only GitHub API check of .github/ISSUE_TEMPLATE on the base branch returned 404 (expected, since this PR creates that directory), and the .github listing could not be completed before the tool budget was exhausted, so I could not confirm whether other issue templates or a blank-issue config exist and how they interact with this new template.
  • The tool-harness section in the corpus only said "planning pending"; no harness findings were available to review.

Comment threadAGENTS.md

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two
parts of the body feed deterministic reviewer rails. Agents filing issues in this repo
must include both.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new text says agents 'must include both' (ask + files), but the following paragraph says 'name none rather than guessing' and the template's Expected files field is optional; align the wording so the contract is unambiguous.

Automated finding from AI PR review.

Comment threadAGENTS.md

## Filing issues for the autonomous loop

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new section introduces 'foreman', 'reviewer rails', and 'GO/NO-GO' without definitions or links, making the agent-facing contract ambiguous for readers outside that external codebase.

Automated finding from AI PR review.

are confident about — naming files the diff does not touch reads as scope
drift and gets the change rejected. Leave empty if unsure.
placeholder: |
internal/delivery/github.go

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Info (style): The Expected files placeholder uses Go-style paths while this repo is TypeScript/Next.js; using this repo's real paths would make the example less confusing.

Automated finding from AI PR review.

@joryirving
joryirving merged commit 9d4d4db into mainAug 10, 2026
7 checks passed
@joryirving
joryirving deleted the docs/agent-issue-contract branch August 10, 2026 18:39
@its-saffronits-saffronBot mentioned this pull request Aug 19, 2026
Sign up for freeto 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

@joryirving
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: issue contract for the autonomous loop (template + AGENTS.md) - #759

Merged
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract
Aug 10, 2026
Merged

docs: issue contract for the autonomous loop (template + AGENTS.md)#759
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract

Conversation

@joryirving

Copy link
Copy Markdown
Contributor

Summary

Agents file most issues in this repo, and two parts of the body feed deterministic reviewer rails:

  • A one-sentence imperative ask — the reviewer quotes it verbatim to prove it read the issue. If it can only paraphrase, its GO is demoted to NO-GO.
  • Concrete file paths the fix should touch — scope-overlap vouches for a diff touching a named file, and that vouch is what survives a paraphrased ask.

An issue with neither loses correct work to a false rejection plus an escalation review — observed today on alert-triage#14.

Adds an Agent task issue form and documents the contract in AGENTS.md (appended), including the trap that naming files the fix does not touch is worse than naming none (it reads as scope drift and also rejects).

Verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16.

The reviewer runs two deterministic rails against the issue body: it must
quote the ask verbatim, and scope-overlap vouches for a diff that touches a
file the issue names. An issue with neither gets correct work demoted to
NO-GO, costing a revision cycle plus an escalation review.
Adds an Agent task issue form and documents the contract in AGENTS.md,
including the trap that naming files the fix does not touch is worse than
naming none.

@its-saffronits-saffronBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

AI Automated Review

Full PR review.

Analysis engine: dsv4f@https://litellm.jory.dev/v1 (openai) — primary route

Recommendation: Approve. This is a focused, docs-only change: it adds a GitHub issue form (.github/ISSUE_TEMPLATE/agent-task.yml) for the autonomous coding loop and appends the corresponding contract to AGENTS.md. CI is green (Lint, Typecheck, Build, Tests, npm audit, Docker Build), and both changes follow existing repository conventions. The PR classifier listed no must_check entries, so there were no mandatory checklist items beyond the standard review. The only items I see are minor doc-consistency nits that can be addressed in a follow-up.

Change-by-change findings

.github/ISSUE_TEMPLATE/agent-task.yml (added)

  • The form matches the GitHub issue-form schema: Context, The ask, and Acceptance criteria are required; Expected files is intentionally optional (no validations block), which implements the documented "name none rather than guessing" rule.
  • Hardcoded labels: ["type/chore"] is valid per AGENTS.md label conventions.
  • Info-level note: the Expected files placeholder uses Go paths (internal/delivery/github.go), while this is a TypeScript/Next.js repo; using this repo's real paths would make the example clearer.

AGENTS.md (appended section)

  • The new "Filing issues for the autonomous loop" section is clear and generic (no agent-specific names), matching Code Standard 1.
  • Minor: the text says agents "must include both" fields, but the template's Expected files is optional and the next paragraph says "name none rather than guessing"; the wording should be aligned (e.g., "state the ask; name file paths when known").
  • Minor: foreman, reviewer rails, and GO/NO-GO are introduced without definitions or a pointer, which may be ambiguous for an agent reading AGENTS.md as a standalone contract.

Sources

  • PR PR 759 metadata and full diff (2 files, +63/−0).
  • Repository standards file AGENTS.md (provided in corpus).
  • CI status API for commit 336121b: all 6 checks passed.
  • Repository history and impact scan (no 0.9.16 references in repo history; alert-triage#14 not present in history; foreman source is not vendored in this repo).

Standards Compliance

  • Label Conventions: type/chore is an allowed label.
  • Code Standard 1 (no agent-specific names in generic docs): satisfied — the new AGENTS.md text uses generic terms only.
  • No changes affect environment variables, Prisma schema, API routes, Docker, or CI configuration, so the corresponding standards sections are unaffected.
  • The "must include both" wording conflicts with the template's optional files field (minor inconsistency; see finding below), but the actual implemented behavior matches the "name none when unsure" convention.

Unknowns or Needs Verification

  • The PR body says the contract was verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16, but foreman is not vendored here and no 0.9.16 reference appears in repository history; this verification is not independently checkable from the corpus.
  • The referenced alert-triage#14 example is not present in repository history.
  • A read-only GitHub API check of .github/ISSUE_TEMPLATE on the base branch returned 404 (expected, since this PR creates that directory), and the .github listing could not be completed before the tool budget was exhausted, so I could not confirm whether other issue templates or a blank-issue config exist and how they interact with this new template.
  • The tool-harness section in the corpus only said "planning pending"; no harness findings were available to review.

Comment threadAGENTS.md

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two
parts of the body feed deterministic reviewer rails. Agents filing issues in this repo
must include both.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new text says agents 'must include both' (ask + files), but the following paragraph says 'name none rather than guessing' and the template's Expected files field is optional; align the wording so the contract is unambiguous.

Automated finding from AI PR review.

Comment threadAGENTS.md

## Filing issues for the autonomous loop

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new section introduces 'foreman', 'reviewer rails', and 'GO/NO-GO' without definitions or links, making the agent-facing contract ambiguous for readers outside that external codebase.

Automated finding from AI PR review.

are confident about — naming files the diff does not touch reads as scope
drift and gets the change rejected. Leave empty if unsure.
placeholder: |
internal/delivery/github.go

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Info (style): The Expected files placeholder uses Go-style paths while this repo is TypeScript/Next.js; using this repo's real paths would make the example less confusing.

Automated finding from AI PR review.

@joryirving
joryirving merged commit 9d4d4db into mainAug 10, 2026
7 checks passed
@joryirving
joryirving deleted the docs/agent-issue-contract branch August 10, 2026 18:39
@its-saffronits-saffronBot mentioned this pull request Aug 19, 2026
Sign up for freeto 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

@joryirving
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

docs: issue contract for the autonomous loop (template + AGENTS.md) - #759

Merged
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract
Aug 10, 2026
Merged

docs: issue contract for the autonomous loop (template + AGENTS.md)#759
joryirving merged 1 commit into
mainfrom
docs/agent-issue-contract

Conversation

@joryirving

Copy link
Copy Markdown
Contributor

Summary

Agents file most issues in this repo, and two parts of the body feed deterministic reviewer rails:

  • A one-sentence imperative ask — the reviewer quotes it verbatim to prove it read the issue. If it can only paraphrase, its GO is demoted to NO-GO.
  • Concrete file paths the fix should touch — scope-overlap vouches for a diff touching a named file, and that vouch is what survives a paraphrased ask.

An issue with neither loses correct work to a false rejection plus an escalation review — observed today on alert-triage#14.

Adds an Agent task issue form and documents the contract in AGENTS.md (appended), including the trap that naming files the fix does not touch is worse than naming none (it reads as scope drift and also rejects).

Verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16.

The reviewer runs two deterministic rails against the issue body: it must
quote the ask verbatim, and scope-overlap vouches for a diff that touches a
file the issue names. An issue with neither gets correct work demoted to
NO-GO, costing a revision cycle plus an escalation review.
Adds an Agent task issue form and documents the contract in AGENTS.md,
including the trap that naming files the fix does not touch is worse than
naming none.

@its-saffronits-saffronBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

AI Automated Review

Full PR review.

Analysis engine: dsv4f@https://litellm.jory.dev/v1 (openai) — primary route

Recommendation: Approve. This is a focused, docs-only change: it adds a GitHub issue form (.github/ISSUE_TEMPLATE/agent-task.yml) for the autonomous coding loop and appends the corresponding contract to AGENTS.md. CI is green (Lint, Typecheck, Build, Tests, npm audit, Docker Build), and both changes follow existing repository conventions. The PR classifier listed no must_check entries, so there were no mandatory checklist items beyond the standard review. The only items I see are minor doc-consistency nits that can be addressed in a follow-up.

Change-by-change findings

.github/ISSUE_TEMPLATE/agent-task.yml (added)

  • The form matches the GitHub issue-form schema: Context, The ask, and Acceptance criteria are required; Expected files is intentionally optional (no validations block), which implements the documented "name none rather than guessing" rule.
  • Hardcoded labels: ["type/chore"] is valid per AGENTS.md label conventions.
  • Info-level note: the Expected files placeholder uses Go paths (internal/delivery/github.go), while this is a TypeScript/Next.js repo; using this repo's real paths would make the example clearer.

AGENTS.md (appended section)

  • The new "Filing issues for the autonomous loop" section is clear and generic (no agent-specific names), matching Code Standard 1.
  • Minor: the text says agents "must include both" fields, but the template's Expected files is optional and the next paragraph says "name none rather than guessing"; the wording should be aligned (e.g., "state the ask; name file paths when known").
  • Minor: foreman, reviewer rails, and GO/NO-GO are introduced without definitions or a pointer, which may be ambiguous for an agent reading AGENTS.md as a standalone contract.

Sources

  • PR PR 759 metadata and full diff (2 files, +63/−0).
  • Repository standards file AGENTS.md (provided in corpus).
  • CI status API for commit 336121b: all 6 checks passed.
  • Repository history and impact scan (no 0.9.16 references in repo history; alert-triage#14 not present in history; foreman source is not vendored in this repo).

Standards Compliance

  • Label Conventions: type/chore is an allowed label.
  • Code Standard 1 (no agent-specific names in generic docs): satisfied — the new AGENTS.md text uses generic terms only.
  • No changes affect environment variables, Prisma schema, API routes, Docker, or CI configuration, so the corresponding standards sections are unaffected.
  • The "must include both" wording conflicts with the template's optional files field (minor inconsistency; see finding below), but the actual implemented behavior matches the "name none when unsure" convention.

Unknowns or Needs Verification

  • The PR body says the contract was verified against scope_overlap.go / enforceReviewerIssueAsk in foreman 0.9.16, but foreman is not vendored here and no 0.9.16 reference appears in repository history; this verification is not independently checkable from the corpus.
  • The referenced alert-triage#14 example is not present in repository history.
  • A read-only GitHub API check of .github/ISSUE_TEMPLATE on the base branch returned 404 (expected, since this PR creates that directory), and the .github listing could not be completed before the tool budget was exhausted, so I could not confirm whether other issue templates or a blank-issue config exist and how they interact with this new template.
  • The tool-harness section in the corpus only said "planning pending"; no harness findings were available to review.

Comment threadAGENTS.md

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two
parts of the body feed deterministic reviewer rails. Agents filing issues in this repo
must include both.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new text says agents 'must include both' (ask + files), but the following paragraph says 'name none rather than guessing' and the template's Expected files field is optional; align the wording so the contract is unambiguous.

Automated finding from AI PR review.

Comment threadAGENTS.md

## Filing issues for the autonomous loop

Issues here are picked up by an autonomous coding loop (dispatch → foreman), and two

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor (docs): The new section introduces 'foreman', 'reviewer rails', and 'GO/NO-GO' without definitions or links, making the agent-facing contract ambiguous for readers outside that external codebase.

Automated finding from AI PR review.

are confident about — naming files the diff does not touch reads as scope
drift and gets the change rejected. Leave empty if unsure.
placeholder: |
internal/delivery/github.go

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Info (style): The Expected files placeholder uses Go-style paths while this repo is TypeScript/Next.js; using this repo's real paths would make the example less confusing.

Automated finding from AI PR review.

@joryirving
joryirving merged commit 9d4d4db into mainAug 10, 2026
7 checks passed
@joryirving
joryirving deleted the docs/agent-issue-contract branch August 10, 2026 18:39
@its-saffronits-saffronBot mentioned this pull request Aug 19, 2026
Sign up for freeto 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

@joryirving