Skip to content

docs(adr): ADR 0103 — shared configuration as recorded presets bumped by Renovate - #6976

Open
waynesun09 wants to merge 2 commits into
mainfrom
shared-config-at-scale-adr
Open

docs(adr): ADR 0103 — shared configuration as recorded presets bumped by Renovate#6976
waynesun09 wants to merge 2 commits into
mainfrom
shared-config-at-scale-adr

Conversation

@waynesun09

@waynesun09 waynesun09 commented Sep 3, 2026

Copy link
Copy Markdown
Member

Summary

Organizations want one shared agent configuration for many repos, with each repo picking up updates automatically the way Renovate already bumps packages and Actions pins. Per-repo installation (ADR 0044) removed the org config repo that used to do this and left nothing in its place. The building blocks exist but do not connect: config.base.yaml presets record no provenance, agent update does not re-pin base: or regenerate lock.yaml (#5433, #5802), nothing checks pins in CI (#6191), and repos install does not know presets. The fullsend-ai org fills the gap with sync-agent-digests.yml / sync-scaffold.yml (sed + direct push through a ruleset-bypass App, always main, stale hashes outside harness/), which replaced a Renovate custom manager that did the bump correctly but ran in one repo (fullsend-ai/.fullsend#174).

Decision (ADR 0103): shared configuration is a preset — a versioned config.base.yaml in any repo — recorded in each consuming repo in a tooling-owned .fullsend/preset.lock.yaml and bumped by that repo's own Renovate job. fullsend ships a Renovate preset with custom.regex managers for the preset record, agents[].source URLs and harness base: URLs, and one idempotent fullsend update that Renovate runs as its post-upgrade task (refresh config.base.yaml, recompute #sha256=, regenerate lock.yaml). Which ref to track, minimumReleaseAge and schedule are ordinary Renovate packageRules. Humans own config.yaml and local harnesses; tooling never writes them, so there is no three-way merge and no compile step. No dedicated org repo, no org-level workflow, no enrollment list.

Verified on a live install

nonflux throwaway repos (fullsend-adr0103-preset tagged v1/v2/v3, fullsend-adr0103-repo-a consumer), CLI from 48eac1aee, self-hosted Renovate 44.61.3:

Hashes re-verified independently. Research with pinned sources: https://github.com/waynesun09/ai-workspace-public/blob/main/research/fullsend-shared-config-at-scale.md

Prerequisites (not decided here; to be filed as issues)

Edits to accepted ADRs and living docs (called out per the ADR conventions)

  • ADR 0003 — annotation under Status: a dedicated <org>/.fullsend repo is no longer required; links ADR 0044 and 0103.
  • ADR 0044 — annotation: the "no centralized policy" and "per-repo setup overhead" costs are decided in ADR 0103.
  • ADR 0069 — annotation under Status: preset provenance (preset.lock.yaml) and the refresh path (Renovate running fullsend update) are decided in ADR 0103.
  • docs/architecture.md — one new decided bullet plus a two-line addition to the per-repo inheritance paragraph; the existing preset bullet is unchanged.
  • docs/problems/governance.md, docs/problems/agent-infrastructure.md — one-line cross-references to ADR 0103.

Closes on implementation (follow-up PRs): #5433, #5802, #6191. Related: #6422, #6597, #6607, agents#983.

Assisted-by: Claude (draft, coordination), Claude gh-c-1/gh-c-2/gh-c-3 (research, walkthrough)

…d update

Per-repo is the only installation mode (ADR 0044) and the org config tier
it removed has no working replacement: config.base.yaml presets record no
provenance, agent update skips base: pins and lock.yaml (#5433, #5802),
nothing checks pins in CI (#6191), and repos install has no preset concept.
The fullsend-ai org bridges this with sync workflows (sed + direct push via
a ruleset-bypass App, always agents main HEAD, stale hashes on non-harness
paths) that replaced a working Renovate custom manager.

Decide: shared configuration is a versioned preset hosted in any repo,
recorded per repo in a bot-owned .fullsend/preset.lock.yaml, and bumped by
each repo's Renovate job. fullsend ships a Renovate preset with custom
managers for its pin formats and runs one idempotent `fullsend update` as
the post-upgrade task (re-fetch preset, recompute #sha256=, regenerate
lock.yaml). Tracking strategy and cadence are Renovate packageRules,
minimumReleaseAge and schedule. No dedicated org repo, no org-level sync
workflow, no enrollment list. Human-owned files are never written by the
verb; bot-owned files are rewritten whole, so there is no three-way merge
and no compile step.

Verified on a live per-repo install in nonflux (fullsend-adr0103-preset,
fullsend-adr0103-repo-a): one Renovate PR re-pinned agents[].source, the
harness base: URL and the shim with recomputed hashes and lock; preset
bumps touched only config.base.yaml and preset.lock.yaml.

Prerequisites, not decided here: the dispatch Route job reads only
config.yaml, and agent add/update/remove write the merged list into the
overlay (must land before a preset ships agents). Annotates ADR 0003,
0044 and 0069; updates architecture.md and the governance and
agent-infrastructure problem docs.

Assisted-by: Claude (draft, coordination)
Assisted-by: Claude gh-c-1/gh-c-2/gh-c-3 (research, walkthrough)
Signed-off-by: Wayne Sun <gsun@redhat.com>
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Document Renovate-converged shared configuration presets

📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Records shared presets with per-repository provenance, replacing centralized synchronization
 workflows.
• Assigns pin upgrades to Renovate and artifact regeneration to idempotent fullsend update.
• Aligns related architecture, governance, infrastructure, and historical ADR documentation.
Diagram

graph TD
  P["Preset Host"] -->|release lookup| R["Renovate Job"] -->|rewrites refs| I["Tracked Pins"] -->|post-upgrade| U["fullsend update"] -->|regenerates| B["Bot-Owned Files"] -->|base layer| C["Runtime Config"]
  R -->|managed pins| H["Human-Owned Files"] -->|overlay| C
  U -.->|does not write| H
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Central organization sync workflow
  • ➕ Provides one orchestration point for updating all enrolled repositories.
  • ➕ Can initiate synchronized rollouts without depending on repository Renovate schedules.
  • ➖ Requires an enrollment list and organization-level infrastructure.
  • ➖ Encourages direct pushes or privileged ruleset bypasses.
  • ➖ Custom text rewriting can leave hashes and non-harness references stale.
2. Three-way merge and compile model
  • ➕ Allows managed and user-edited fields to coexist within shared files.
  • ➕ Supports centralized organization-wide update commands similar to GitHub Agentic Workflows.
  • ➖ Introduces merge conflict handling and managed-field exceptions.
  • ➖ Requires an additional compile phase for generated lock artifacts.
  • ➖ Adds unnecessary complexity when human-owned and bot-owned files can be separated.

Recommendation: The recorded-preset model is the best fit because existing per-repository installation and Renovate infrastructure already provide distribution, policy, scheduling, and reviewable pull requests. Separating bot-owned artifacts from human-owned configuration avoids both privileged organization sync workflows and three-way merge or compilation machinery.

Files changed (7) +149 / -3

Documentation (7) +149 / -3
0003-org-config-repo-convention.mdMark the dedicated organization config repository as optional +6/-0

Mark the dedicated organization config repository as optional

• Adds a dated note explaining that per-org installation is deprecated. It points readers to ADR 0103 for hosting shared configuration as presets in any repository.

docs/ADRs/0003-org-config-repo-convention.md

0044-deprecate-per-org-installation-mode.mdLink per-repo installation costs to the preset decision +4/-0

Link per-repo installation costs to the preset decision

• Annotates the per-org deprecation ADR with the recorded-preset and 'fullsend update' approach for centralized policy and setup overhead.

docs/ADRs/0044-deprecate-per-org-installation-mode.md

0069-ready-made-configuration-presets.mdRecord the preset provenance and refresh follow-up +5/-0

Record the preset provenance and refresh follow-up

• Adds a note identifying '.fullsend/preset.lock.yaml' as the provenance record and Renovate-triggered 'fullsend update' as the refresh path.

docs/ADRs/0069-ready-made-configuration-presets.md

0103-shared-config-presets-converged-by-fullsend-update.mdDefine Renovate-converged shared configuration presets +125/-0

Define Renovate-converged shared configuration presets

• Introduces ADR 0103, defining versioned presets, per-repository provenance, ownership boundaries, and Renovate-managed tracking policy. It assigns derived-file regeneration and drift checking to 'fullsend update' and documents operational and supply-chain consequences.

docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md

architecture.mdIntegrate recorded presets into the architecture narrative +7/-1

Integrate recorded presets into the architecture narrative

• Updates the preset roadmap and configuration inheritance sections with provenance locking, Renovate custom managers, ownership boundaries, hash regeneration, and layered runtime reads.

docs/architecture.md

agent-infrastructure.mdConnect shared presets to agent infrastructure governance +1/-1

Connect shared presets to agent infrastructure governance

• Links the governance concern to ADR 0103 and notes that its pinned remote-reference model can map to future Tekton resolution.

docs/problems/agent-infrastructure.md

governance.mdResolve the shared-policy distribution question +1/-1

Resolve the shared-policy distribution question

• Records push-based, pull-request-mediated preset convergence as the selected distribution model while leaving policy-floor enforcement open.

docs/problems/governance.md

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 3, 2026

Copy link
Copy Markdown

🤖 Review · ❌ Terminated · Started 5:01 PM UTC · Ended 5:43 PM UTC

Commit: 2b42f5b · View workflow run →

@qodo-code-review

qodo-code-review Bot commented Sep 3, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (2) 📜 Skill insights (1)

Grey Divider


Action required

1. ADR 0103 bundles multiple decisions 📜 Skill insight ⚙ Maintainability
Description
The Decision section separately establishes the preset format, file ownership, Renovate integration,
update behavior, and tracking policy. These independent decisions must be split rather than recorded
in one ADR.
Code

docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[R66-69]

+1. **A preset is a git-hosted `config.base.yaml`** plus the harness bases,
+   skills and policies it references by URL, schema-validated on fetch. It
+   lives in whichever repo already hosts the org's shared Renovate config;
+   no dedicated org repo, no org-level workflow and no enrollment list are
Relevance

●● Moderate

The ADR bundles several related decisions, but no close precedent establishes that splitting is
required here.

PR-#2743

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 1062089 requires each ADR to record exactly one decision. The numbered Decision section
independently defines the preset artifact, ownership and rewrite rules, Renovate managers and
command behavior, and cadence policy.

docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[59-98]
Skill: writing-adrs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
ADR 0103 records multiple distinct decisions in one Decision section.

## Issue Context
The preset model, ownership boundaries, Renovate integration, update command behavior, and tracking policy should be separated into focused ADRs or reduced to one architectural decision with non-decision details moved elsewhere.

## Fix Focus Areas
- docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[59-98]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Governance prescribes one approach ✓ Resolved 📘 Rule violation ⌂ Architecture
Description
The modified problem document now declares push-based preset pull requests as decided while
mentioning the pull-based alternative only as an unanalyzed question. It must compare the
alternatives and their trade-offs before recommending or recording one approach.
Code

docs/problems/governance.md[32]

+- If policy lives in a separate repo, how does it get applied to target repos? Push-based (policy repo pushes to targets) or pull-based (agents read from policy repo at runtime)? (Push-based, as pull requests: a preset published from an org-owned repo is recorded per repo and converged by `fullsend update` — decided in [ADR 0103](../ADRs/0103-shared-config-presets-converged-by-fullsend-update.md); enforcing a policy floor remains open.)
Relevance

●●● Strong

Problem-document precedents require alternatives and trade-offs rather than presenting one approach
as settled.

PR-#2009
PR-#6635

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 1062035 requires modified problem documents to describe at least two distinct options with
clearly labeled trade-offs and not prescribe one without comparison. The changed line declares the
push-based approach decided while providing no option sections or trade-off analysis for push versus
pull.

Rule 1062035: Problem docs must present multiple options with trade-offs, not a single prescribed solution
docs/problems/governance.md[30-34]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Document distinct push-based and pull-based policy distribution options with explicit trade-offs.

## Issue Context
The changed line records the push-based preset mechanism as decided but does not analyze the pull-based alternative or its risks and advantages.

## Fix Focus Areas
- docs/problems/governance.md[30-34]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. ADR 0069 edit undisclosed 📘 Rule violation § Compliance
Description
The PR modifies accepted ADR 0069, but the PR description does not identify ADR 0069 or summarize
its new provenance and refresh-path note. Accepted ADR edits must be explicitly called out in the PR
description.
Code

docs/ADRs/0069-ready-made-configuration-presets.md[R22-25]

+> **Note (2026-09-03):** Preset provenance (a bot-owned
+> `.fullsend/preset.lock.yaml`) and the refresh path (Renovate running
+> `fullsend update` as a post-upgrade task) are decided in
+> [ADR 0103](0103-shared-config-presets-converged-by-fullsend-update.md).
Relevance

●●● Strong

Recent accepted ADR edits use concise annotations to document provenance and later decisions.

PR-#5798
PR-#6926

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 1062059 requires the PR description to identify every edited accepted ADR and explain the
change. ADR 0069 receives a new note defining where provenance and refresh behavior are decided, but
the supplied PR description does not identify ADR 0069.

Rule 1062059: Call out edits to accepted ADRs in PR descriptions
docs/ADRs/0069-ready-made-configuration-presets.md[20-25]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Add ADR 0069 and a summary of its annotation to the PR description.

## Issue Context
The accepted ADR now points preset provenance and refresh behavior to ADR 0103.

## Fix Focus Areas
- docs/ADRs/0069-ready-made-configuration-presets.md[22-25]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


4. Harness ownership is contradictory ✓ Resolved 🐞 Bug ≡ Correctness
Description
ADR 0103 says fullsend update never writes human-owned local harnesses, but also makes it
recompute every hash after Renovate changes harness base: URLs; the architecture summary
explicitly says the verb re-pins those files. Implementers must either modify human-owned harnesses
or leave their integrity hashes stale.
Code

docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[R89-90]

+   command, does the derived work: re-fetch the preset into
+   `config.base.yaml`, recompute every `#sha256=`, regenerate `lock.yaml`
Relevance

●●● Strong

The ownership and hash-refresh requirements directly conflict, creating an implementation-blocking
documentation bug.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The ADR declares local harnesses human-owned and excluded from verb writes, then requires the verb
to recompute every #sha256= after custom managers update harness base: URLs. The architecture
summary confirms the conflicting interpretation by saying fullsend update re-pins local harness
files.

docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[73-90]
docs/architecture.md[60-60]
docs/architecture.md[538-541]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Resolve the contradiction over whether `fullsend update` may write local harness files when recomputing integrity hashes.

## Issue Context
The ADR calls local harnesses human-owned and says the verb never writes them, while assigning harness URL changes to Renovate and every hash recomputation to the verb. The architecture summary goes further and attributes local harness re-pinning directly to `fullsend update`.

## Fix Focus Areas
- docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[73-90]
- docs/architecture.md[60-60]
- docs/architecture.md[538-541]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View medium (3)
5. ADR 0003 edit undisclosed 📘 Rule violation § Compliance
Description
The PR modifies accepted ADR 0003, but the PR description does not identify ADR 0003 or summarize
this new superseding note. Accepted ADR edits must be explicitly called out in the PR description.
Code

docs/ADRs/0003-org-config-repo-convention.md[R25-29]

+> **Note (2026-09-03):** Per-org installation is deprecated
+> ([ADR 0044](0044-deprecate-per-org-installation-mode.md)). A dedicated
+> `<org>/.fullsend` repo is no longer required: shared configuration is a
+> preset hosted in any repo and bumped per consuming repo by Renovate
+> ([ADR 0103](0103-shared-config-presets-converged-by-fullsend-update.md)).
Relevance

●●● Strong

Recent ADR annotation precedents show reviewers require concise post-acceptance cross-reference
notes.

PR-#5798
PR-#2473

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 1062059 requires the PR description to name every edited accepted ADR and briefly summarize the
edit. ADR 0003 receives a new substantive cross-reference note, while the supplied PR description
does not identify ADR 0003.

Rule 1062059: Call out edits to accepted ADRs in PR descriptions
docs/ADRs/0003-org-config-repo-convention.md[23-29]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Add ADR 0003 and a summary of its annotation to the PR description.

## Issue Context
The accepted ADR now notes that a dedicated organization configuration repository is no longer required and links ADRs 0044 and 0103.

## Fix Focus Areas
- docs/ADRs/0003-org-config-repo-convention.md[25-29]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


6. Shim updater is misidentified ✓ Resolved 🐞 Bug ⚙ Maintainability
Description
The architecture says the shim is rewritten whole by Renovate running fullsend update, while ADR
0103 assigns Renovate shim bumps to the built-in github-actions manager and says the verb bumps
the shim only when run by hand. This gives conflicting requirements for automated update behavior
and file ownership.
Code

docs/architecture.md[R538-539]

+`config.base.yaml`, `preset.lock.yaml`, `lock.yaml` and the shim are
+bot-owned and rewritten whole by Renovate running `fullsend update`;
Relevance

●●● Strong

The architecture statement conflicts with ADR-defined Renovate ownership and manual shim-update
behavior.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
ADR 0103 says Renovate custom managers cover preset and agent/harness pins, while its built-in
workflow manager handles shim pins; it separately states that manual invocation of fullsend update
also bumps the shim. The architecture instead says the shim is rewritten whole by Renovate running
the verb.

docs/architecture.md[538-540]
docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[84-93]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Make the architecture summary identify the correct mechanism that updates shim workflow pins.

## Issue Context
ADR 0103 distinguishes automated Renovate workflow-pin updates from the extra shim bump performed when `fullsend update` is invoked manually. The architecture currently groups the shim with files rewritten whole by the post-upgrade command.

## Fix Focus Areas
- docs/architecture.md[538-540]
- docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[84-93]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


7. Architecture bullet was rewritten ✓ Resolved 📜 Skill insight ⚙ Maintainability
Description
The PR replaces the existing preset architecture bullet with a substantially longer
implementation-level narrative. Accepted-ADR living-document updates must be surgical additions
rather than rewrites of existing content.
Code

docs/architecture.md[60]

+- Ready-made configuration presets: `fullsend github setup --config <path-or-url>` installs a vendor preset as `.fullsend/config.base.yaml` and a stub `.fullsend/config.yaml` overlay in the target repository; a bot-owned `.fullsend/preset.lock.yaml` records the preset's source, tracking ref and hash; every pin is a Renovate-bumpable string, fullsend ships a Renovate preset with the custom managers, and Renovate runs `fullsend update` as its post-upgrade task to re-fetch the preset, recompute `#sha256=`, re-pin `base:` in local harness files and regenerate `lock.yaml` (`--check` reports drift) ([ADR 0103](ADRs/0103-shared-config-presets-converged-by-fullsend-update.md)); mint URL, inference backend, and related settings live in configuration files resolved through accessor methods, not CLI flags. Shared-infrastructure presets will reduce per-adopter enrollment (target state): mint via `job_workflow_ref` trust per [ADR 0059](ADRs/0059-public-mint-mode-with-wildcard-allowlists.md); inference authorization model undecided ([ADR 0069](ADRs/0069-ready-made-configuration-presets.md)); enrollment remains required until follow-on ADRs land.
Relevance

●●● Strong

Recent architecture-document precedents accepted shortening or qualifying oversized rewritten
architecture bullets.

PR-#6083
PR-#2743

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 1062104 permits minimal additions such as a concise Decided entry but prohibits rewriting
existing sections. Line 60 replaces the previous preset bullet with a much larger description of
lock files, custom managers, hashing, harness pinning, and command behavior.

docs/architecture.md[60-60]
Skill: writing-adrs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Avoid replacing the existing architecture bullet with a large rewrite.

## Issue Context
Restore the existing narrative and add only a concise decided statement linking ADR 0103 under the relevant architecture section.

## Fix Focus Areas
- docs/architecture.md[60-60]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

8. Preset host is overrestricted ✓ Resolved 🐞 Bug ⚙ Maintainability
Description
The governance summary says presets are published from an org-owned repository, but ADR 0103 permits
hosting in any repository. Readers following the summary may infer an ownership requirement the
accepted decision explicitly avoids.
Code

docs/problems/governance.md[32]

+- If policy lives in a separate repo, how does it get applied to target repos? Push-based (policy repo pushes to targets) or pull-based (agents read from policy repo at runtime)? (Push-based, as pull requests: a preset published from an org-owned repo is recorded per repo and converged by `fullsend update` — decided in [ADR 0103](../ADRs/0103-shared-config-presets-converged-by-fullsend-update.md); enforcing a policy floor remains open.)
Relevance

●●● Strong

Accepted ADR explicitly allows any repository; governance wording materially misstates the decision
and should be corrected.

PR-#6635
PR-#601

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The governance note requires an “org-owned repo,” whereas both ADR 0103 and the architecture summary
state that the preset may be hosted in any repository and that a dedicated organization repository
is unnecessary.

docs/problems/governance.md[32-32]
docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[66-72]
docs/architecture.md[533-537]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Align the governance summary with ADR 0103's unrestricted repository-hosting model.

## Issue Context
ADR 0103 says the preset may be hosted in any repository, typically wherever shared Renovate configuration lives. The governance note narrows this to an org-owned repository without the ADR imposing that condition.

## Fix Focus Areas
- docs/problems/governance.md[32-32]
- docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[66-72]
- docs/architecture.md[533-537]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


9. ADR exceeds 100 lines ✓ Resolved 📜 Skill insight ⚙ Maintainability
Description
Excluding the 12-line frontmatter, ADR 0103 contains 113 lines of content. This exceeds the mandated
100-line maximum.
Code

docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[125]

+  later run as Tekton tasks.
Relevance

● Weak

A closely matching precedent rejected enforcing the 100-line ADR limit for a substantive accepted
decision.

PR-#2582

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 1062092 caps ADR content at 100 lines excluding frontmatter. The frontmatter ends at line 12,
leaving lines 13–125, or 113 content lines.

docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[1-125]
Skill: writing-adrs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Reduce ADR 0103 to no more than 100 content lines excluding frontmatter.

## Issue Context
The current document has 113 content lines. Move detailed implementation contracts or research to linked documents and retain the concise architectural record.

## Fix Focus Areas
- docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[13-125]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


10. ADR Context is oversized ✓ Resolved 📜 Skill insight ⚙ Maintainability
Description
The Context contains a 19-line first paragraph followed by another substantial paragraph, rather
than 1–3 short paragraphs. This obscures the motivating issue with implementation history and
comparison detail.
Code

docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[R31-34]

+[ADR 0044](0044-deprecate-per-org-installation-mode.md) made per-repo the
+only installation mode and named the cost: no central place to share agent
+configuration, and every repo bumped one at a time. The pieces meant to fill
+that gap exist but do not connect: `config.base.yaml`
Relevance

● Weak

A closely matching precedent rejected shortening an ADR Context despite the same 1–3 paragraph rule.

PR-#2582

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 1062090 requires 1–3 short Context paragraphs. The first paragraph spans lines 31–49 and
includes issue history, implementation gaps, prerequisite behavior, and organization workflow
details.

docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[29-57]
Skill: writing-adrs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Reduce the ADR Context to 1–3 short paragraphs.

## Issue Context
Keep only a concise summary of the motivating problem and link to the related governance and agent-infrastructure problem documents for detail.

## Fix Focus Areas
- docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[29-57]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View low (1)
11. Consequences use multi-sentence bullets ✓ Resolved 📜 Skill insight ⚙ Maintainability
Description
Several Consequences bullets contain multiple sentences, including the policy-floor bullet that then
introduces a separate Tekton observation. The section requires 3–5 bullets with exactly one sentence
per bullet.
Code

docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[R122-124]

+- Enforcing a policy floor (refusing to run when a repo drifts) is a separate
+  decision; this ADR only makes drift visible. The model maps onto Tekton
+  remote resolution (git resolver `revision`, bundle digests) if stages
Relevance

● Weak

A closely matching precedent rejected enforcing one-sentence Consequences bullets in a detailed ADR.

PR-#2582

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 1062091 requires 3–5 one-sentence bullets. Lines 122–125 contain two sentences in one bullet,
and lines 111–115 contain three sentences in another.

docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[105-125]
Skill: writing-adrs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Rewrite each Consequences bullet as one sentence.

## Issue Context
There are five bullets, but the Renovate and policy-floor bullets contain multiple sentences and should be condensed or separated while retaining no more than five bullets.

## Fix Focus Areas
- docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[105-125]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 65 rules
Review mode: ⚖️ Balanced

Grey Divider

Tip of the day
💡 Did you know, you can route each action level your way: inline, summary, both, or drop

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment on lines +66 to +69
1. **A preset is a git-hosted `config.base.yaml`** plus the harness bases,
skills and policies it references by URL, schema-validated on fetch. It
lives in whichever repo already hosts the org's shared Renovate config;
no dedicated org repo, no org-level workflow and no enrollment list are

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Action required

1. Adr 0103 bundles multiple decisions 📜 Skill insight ⚙ Maintainability

The Decision section separately establishes the preset format, file ownership, Renovate integration,
update behavior, and tracking policy. These independent decisions must be split rather than recorded
in one ADR.
Agent Prompt
## Issue description
ADR 0103 records multiple distinct decisions in one Decision section.

## Issue Context
The preset model, ownership boundaries, Renovate integration, update command behavior, and tracking policy should be separated into focused ADRs or reduced to one architectural decision with non-decision details moved elsewhere.

## Fix Focus Areas
- docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md[59-98]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread docs/architecture.md Outdated
Comment on lines +25 to +29
> **Note (2026-09-03):** Per-org installation is deprecated
> ([ADR 0044](0044-deprecate-per-org-installation-mode.md)). A dedicated
> `<org>/.fullsend` repo is no longer required: shared configuration is a
> preset hosted in any repo and bumped per consuming repo by Renovate
> ([ADR 0103](0103-shared-config-presets-converged-by-fullsend-update.md)).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Remediation recommended

6. Adr 0003 edit undisclosed 📘 Rule violation § Compliance

The PR modifies accepted ADR 0003, but the PR description does not identify ADR 0003 or summarize
this new superseding note. Accepted ADR edits must be explicitly called out in the PR description.
Agent Prompt
## Issue description
Add ADR 0003 and a summary of its annotation to the PR description.

## Issue Context
The accepted ADR now notes that a dedicated organization configuration repository is no longer required and links ADRs 0044 and 0103.

## Fix Focus Areas
- docs/ADRs/0003-org-config-repo-convention.md[25-29]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +22 to +25
> **Note (2026-09-03):** Preset provenance (a bot-owned
> `.fullsend/preset.lock.yaml`) and the refresh path (Renovate running
> `fullsend update` as a post-upgrade task) are decided in
> [ADR 0103](0103-shared-config-presets-converged-by-fullsend-update.md).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Remediation recommended

7. Adr 0069 edit undisclosed 📘 Rule violation § Compliance

The PR modifies accepted ADR 0069, but the PR description does not identify ADR 0069 or summarize
its new provenance and refresh-path note. Accepted ADR edits must be explicitly called out in the PR
description.
Agent Prompt
## Issue description
Add ADR 0069 and a summary of its annotation to the PR description.

## Issue Context
The accepted ADR now points preset provenance and refresh behavior to ADR 0103.

## Fix Focus Areas
- docs/ADRs/0069-ready-made-configuration-presets.md[22-25]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread docs/problems/governance.md Outdated
Comment thread docs/ADRs/0103-shared-config-presets-converged-by-fullsend-update.md Outdated
Comment thread docs/architecture.md Outdated
Comment thread docs/problems/governance.md Outdated
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

Site preview

Preview: https://92820f53-site.fullsend-ai.workers.dev

Commit: 76ef597abc01725ba5dd5d54fe12d47e0d2df536

@codecov

codecov Bot commented Sep 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@fullsend-ai-review

Copy link
Copy Markdown

🤖 Finished Review · ❌ Failure (validation failed after 2 iteration(s)) · Started 5:01 PM UTC · Completed 5:43 PM UTC

Commit: 2b42f5b · View workflow run →

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

@rh-hemartin

Copy link
Copy Markdown
Member

I don't know if I agree or not because I don't fully understand why is this needed. Do we want to lock up stuff more? Do we want stuff to auto-update (hence the Renovate config)? Did we have a problem with tracking where things come from? It is really needed?

Also simplify the wording, it is exhausting to read (there is phrase with 57 words).

Short sentences, motivation first, one-sentence consequences, under 100
content lines. Restore the original architecture bullet and add a one-line
decided statement; make architecture.md, governance.md and
agent-infrastructure.md say what the ADR says (Renovate bumps the pins,
the verb refreshes only tooling-owned files, any repo may host the preset).

Assisted-by: Claude (draft)
Signed-off-by: Wayne Sun <gsun@redhat.com>
@waynesun09 waynesun09 changed the title docs(adr): ADR 0103 — recorded presets bumped by Renovate via fullsend update docs(adr): ADR 0103 — shared configuration as recorded presets bumped by Renovate Sep 4, 2026
@waynesun09

Copy link
Copy Markdown
Member Author

Thanks — fair on both counts. Pushed 76ef597ab:

  • Why: the Context now opens with the need in plain terms: one shared agent configuration for many repos, with each repo picking up updates automatically the way Renovate already bumps its packages and Actions pins. Per-repo installation (ADR 0044) removed the org config repo that used to do this and nothing replaced it. It is not about locking things down — every existing pin already carries a SHA and a hash; it is about making those pins move by the same Renovate PRs as everything else instead of the sed-and-push workflow in fullsend-ai/.fullsend, and knowing which preset a repo is on so it can be refreshed. The "verified on a live install" section in the description shows the resulting PRs.
  • Readability: rewritten in short sentences, 93 content lines, one sentence per consequence. The living-doc edits are now surgical (original architecture bullet restored, one new line) and say the same thing the ADR says.

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 4, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 2:54 PM UTC · Completed 3:35 PM UTC

Commit: 76ef597 · View workflow run →

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

@fullsend-ai-review

Copy link
Copy Markdown

Risk Assessment: low (1/5)

Details

Pure documentation PR adding ADR 0103 and cross-referencing existing ADRs — no source code, no protected paths, no security-sensitive files, no dependency changes; the only notable signal is docs/architecture.md being a high-churn file, but the change is a 5-line addition, keeping overall risk minimal.

@fullsend-ai-review

Copy link
Copy Markdown

Review

Findings

Low

  • [internal consistency] docs/ADRs/0044-deprecate-per-org-installation-mode.md:41 — Two annotations added in the same PR give inconsistent impressions of how completely ADR 0103 resolves the "no centralized policy" cost. The ADR 0044 annotation says both costs "are decided in recorded presets and fullsend update," implying full resolution. The governance.md annotation in the same PR correctly qualifies: "enforcing a policy floor remains open." ADR 0103 itself confirms enforcement is out of scope: "Refusing to run when a repo drifts from its preset is a separate decision; this ADR only makes drift visible." Additionally, the verb "decided" is imprecise when applied to "costs" — costs are not "decided in" a mechanism; they are "addressed by" or "mitigated by" one.
    Remediation: Reword the annotation to: > **Note (2026-09-03):** The "no centralized policy" and "per-repo setup overhead" costs listed below are partially addressed by recorded presets and \fullsend update` (ADR 0103); enforcing a policy floor remains open.` This aligns with the governance.md annotation in the same PR and uses a semantically correct verb.

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 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.

Per-repo installation mode ([ADR 0033](0033-per-repo-installation-mode.md))
becomes the sole supported installation model.

> **Note (2026-09-03):** The "no centralized policy" and "per-repo setup

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[low] internal consistency

Two annotations added in the same PR give inconsistent impressions of how completely ADR 0103 resolves the 'no centralized policy' cost. The ADR 0044 annotation says both costs 'are decided in recorded presets and fullsend update,' implying full resolution. The governance.md annotation in the same PR correctly qualifies: 'enforcing a policy floor remains open.' ADR 0103 itself confirms enforcement is out of scope: 'Refusing to run when a repo drifts from its preset is a separate decision; this ADR only makes drift visible.' Additionally, the verb 'decided' is imprecise when applied to 'costs' — costs are not 'decided in' a mechanism; they are 'addressed by' or 'mitigated by' one.

Suggested fix: Reword the annotation to: '> Note (2026-09-03): The "no centralized policy" and "per-repo setup overhead" costs listed below are partially addressed by recorded presets and fullsend update (ADR 0103); enforcing a policy floor remains open.' This aligns with the governance.md annotation in the same PR and uses a semantically correct verb.

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

Labels

risk/low PR risk: low

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants