Skip to content

Commit d87c93a

Browse files
committed
docs(adr): ADR 0064 — deprecate customized/ directory overlay
Signed-off-by: Greg Allen <gallen@redhat.com> Signed-off-by: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Greg Allen <gallen@redhat.com>
1 parent d0771f7 commit d87c93a

4 files changed

Lines changed: 406 additions & 3 deletions

File tree

docs/ADRs/0035-layered-content-resolution.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: "35. Layered content resolution"
3-
status: Accepted
3+
status: Superseded
44
relates_to:
55
- agent-infrastructure
66
- agent-architecture
@@ -17,7 +17,7 @@ Date: 2026-05-09
1717

1818
## Status
1919

20-
Accepted
20+
Superseded by [ADR 0064](0064-deprecate-customized-directory-overlay.md).
2121

2222
## Context
2323

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
---
2+
title: "64. Deprecate customized/ directory overlay"
3+
status: Accepted
4+
relates_to:
5+
- agent-infrastructure
6+
- agent-architecture
7+
topics:
8+
- layering
9+
- customization
10+
- deprecation
11+
---
12+
13+
# 64. Deprecate customized/ directory overlay
14+
15+
Date: 2026-06-30
16+
17+
## Status
18+
19+
Accepted
20+
21+
Supersedes [ADR 0035](0035-layered-content-resolution.md) (layered content
22+
resolution).
23+
24+
## Context
25+
26+
[ADR 0035](0035-layered-content-resolution.md) introduced a three-tier
27+
layering model for agent customization: upstream defaults are copied into the
28+
workspace at runtime, then files from `customized/` (per-org) or
29+
`.fullsend/customized/` (per-repo) are overlaid on top, replacing upstream
30+
files with matching names. The overlay is file-level replacement with no
31+
field-level merging — customizing a single harness field requires copying the
32+
entire upstream YAML and modifying it.
33+
34+
Three subsequent ADRs have introduced mechanisms that cover every
35+
customization scenario the overlay handled, with better ergonomics:
36+
37+
- [ADR 0045](0045-forge-portable-harness-schema.md) added `base:`
38+
composition for harness files. A thin wrapper inherits an upstream harness
39+
by URL and overrides only the fields that differ, with proper merge
40+
semantics (scalars override, skills concatenate, runner_env merges).
41+
42+
- [ADR 0038](0038-universal-harness-access.md) added URL-based references
43+
for declarative resources (agents, skills, policies, schemas). Resources
44+
can be referenced from any trusted source without copying them into a
45+
local directory.
46+
47+
- [ADR 0058](0058-agent-registration.md) added config-based agent
48+
registration. Agents are discovered from `agents:` entries in config
49+
(URLs or local paths), not from directory scanning.
50+
51+
Together these make the `customized/` directory overlay redundant:
52+
53+
| What `customized/` did | Replacement |
54+
|---|---|
55+
| Override a harness | `base:` composition (ADR 0045) |
56+
| Override an agent definition | Harness `agent:` field with path or URL (ADR 0038) |
57+
| Add/remove agents | `agents:` list in config (ADR 0058) |
58+
| Add custom skills | Harness `skills:` list with paths or URLs (ADR 0038); concatenated via `base:` (ADR 0045) |
59+
| Override policies/schemas | Harness fields with paths or URLs (ADR 0038) |
60+
| Custom scripts | `pre_script`/`post_script` in harness; inherited from `base:` (ADR 0045) |
61+
| Custom env vars | `env:` in harness; merged via `base:` (ADR 0045) |
62+
| Data files in `scripts/` (e.g. `.pre-commit-tools.yaml`) | L2 additive merge at repo root ([ADR 0056](0056-per-repo-precommit-tools-registry.md)); `base:` composition for harness-level overrides |
63+
64+
**Scripts and env constraint:**
65+
[ADR 0038](0038-universal-harness-access.md) prohibits standalone URL
66+
references for executable resources. All script customization must go
67+
through `base:` harness composition (where scripts declared in the base
68+
are fetched from the same origin). The L1 full-replacement path for
69+
data files like `.pre-commit-tools.yaml` via `customized/scripts/`
70+
([ADR 0056](0056-per-repo-precommit-tools-registry.md)) is replaced by
71+
the L2 additive merge at repo root, which already covers per-repo
72+
customization without the overlay.
73+
74+
The `customized/` directories currently contain only `.gitkeep` placeholders.
75+
The overlay loop in reusable workflows runs every agent invocation but copies
76+
zero files.
77+
78+
## Decision
79+
80+
Deprecate and remove the `customized/` directory overlay mechanism introduced
81+
by ADR 0035.
82+
83+
The implementation plan is in
84+
[docs/plans/deprecate-customized-directory-overlay.md](../plans/deprecate-customized-directory-overlay.md).
85+
86+
This ADR should be implemented once ADRs 0038, 0045, and 0058 are fully
87+
implemented and in production.
88+
89+
## Consequences
90+
91+
- Users who placed files in `customized/` must migrate to `base:`
92+
composition, URL references, or config-based registration.
93+
- Deprecation warnings during install and updated documentation will guide
94+
migration.
95+
- The reusable workflows become simpler — no overlay loop, no
96+
`install_mode` branching for customization paths.
97+
- The scaffold produces fewer files — no `.gitkeep` placeholders in
98+
`customized/` subdirectories.
99+
- `fullsend admin install` no longer creates `customized/` directories.
100+
- A single, consistent customization model replaces the split between
101+
directory overlay (ADR 0035) and harness composition (ADR 0045).

docs/architecture.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,10 @@ See [ADR 0003](ADRs/0003-org-config-repo-convention.md) for the config repo conv
386386
[ADR 0047](ADRs/0047-vendored-installs-with-vendor-flag.md)). The
387387
scaffold installs only org-specific files and a `customized/` directory for org
388388
overrides. Org files in `customized/` overwrite upstream defaults at runtime
389-
([ADR 0035](ADRs/0035-layered-content-resolution.md)).
389+
([ADR 0035](ADRs/0035-layered-content-resolution.md)). The `customized/`
390+
overlay is deprecated; `base:` harness composition, URL resource
391+
references, and config-based agent registration now cover all customization
392+
scenarios ([ADR 0064](ADRs/0064-deprecate-customized-directory-overlay.md)).
390393

391394
## Multi-org deployment model
392395

0 commit comments

Comments
 (0)