Document policy alignment and release workflow roadmaps

This commit is contained in:
2026-09-28 00:12:25 +00:00
parent 0adb94f59e
commit 6f372e0dfe
2 changed files with 251 additions and 0 deletions

108
docs/roadmap/policy.md Normal file
View File

@@ -0,0 +1,108 @@
# Standard Policy Documentation Alignment
Status: accepted target; implementation planning remains separate.
## Intent and baseline
Align ConfigKit's adopted documentation with Standard Repository Policies while
preserving substantive local decisions. Prefer upstream wording verbatim wherever
differences are editorial; do not maintain a parallel local paraphrase of shared
rules. Customization must serve a locally significant requirement.
Local baseline: `0adb94f59e44827908eff401d4381a398fe17107` (v0.4.1).
The selected upstream revision is
`d84a38ebab26f048cafbe59a2246700c35d29843`. Its
[adoption guide](https://gitea.maximumdirect.net/eric/policy/src/commit/d84a38ebab26f048cafbe59a2246700c35d29843/docs/adoption.md)
owns the standard adoption procedure. This roadmap covers the adopted policy set,
not just `docs/policy/documentation.md`.
ConfigKit currently has six policies, no `meta.md`, and no per-document
`Upstream Source` links. Its contributor guide routes tasks to documents but lacks
the upstream selective-reading guidance. Licensing documentation covers the
project and YAML dependency but not copied policy material. The release policy
has intentionally retained its established workflow.
Introduce accurate provenance going forward. Do not reconstruct old adoption
baselines or add historical-uncertainty narratives.
## Target policy set
Remove upstream template instructions after adoption. Retain shared substantive
wording unchanged except for necessary local adaptation and working references.
| Document | Target |
| --- | --- |
| `docs/policy/meta.md` | Adopt upstream v1.0: local authority, upstream origin, discovery links, and policy provenance. |
| `docs/policy/agents.md` | Adopt v1.3 wording, retaining local explanations of correctness constraints, protection of established contracts, and the rule that repeated agent-authored assertions are not evidence of approval. No change to standing commit authority. |
| `docs/policy/architecture.md` | Use v1.3 as the customized template while preserving the opinionated library model, root-owned facade, dependency direction, existing invariants, and explicit avoidance of an imposed hexagonal framework. No code restructuring or new threat guarantees. |
| `docs/policy/testing.md` | Adopt v1.3 shared wording. Retain ConfigKit-specific priorities and test ownership. Tests protect selected contracts; examples must not imply new rejection rules or mandatory inventories of techniques. |
| `docs/policy/documentation.md` | Adopt v1.11 wording with a library-specific ownership table, including policy provenance. Omit inapplicable interfaces and empty placeholder documents. |
| `docs/policy/oss.md` | Adopt v1.8 wording with necessary ConfigKit applicability and reference adjustments. Preserve the selected project grant and house interpretation of upstream notice links. |
| `docs/policy/release.md` | Adopt compatible wording and accurate source metadata, preserving current operational requirements as explicit local adaptations until the separate release-workflow task lands. Do not describe the future publication command as implemented. |
Each adopted document identifies its actual upstream template version, local
update date, and full commit-specific `Upstream Source` URL. A deliberate adoption
from the selected revision establishes the new baseline even where substantial
project-specific content remains. Metadata must not imply adoption of upstream
requirements deliberately replaced by local rules.
## Orientation and upstream navigation
Adapt upstream `agents/AGENTS.md` into the root orientation file. Keep the required
agent-policy reading rule and route other reading through `docs/development.md`.
The developer guide owns task triggers for all seven policies, including policy
reviews through `meta.md`. Readers select applicable policies, reuse unchanged
material already in context, follow relevant cross-references, and expand reading
when scope changes. Reading the entire suite is not the default.
Use live upstream project and adoption-guide URLs for discovery. Pin adopted-source
and licensing-example URLs to full commits. Keep the upstream README, root agent
instructions, contributor guide, adoption guide, and example collection upstream;
do not copy them into ConfigKit. Root orientation derives from the upstream
`agents/AGENTS.md` template, not its root AGENTS.md.
## Attribution and licensing target
Use the upstream canonical Standard Repository Policies entry in
`docs/oss/attribution.md`, identifying the actual adapted material and linking its
source, COPYRIGHT, and LICENSE at the selected commit. Include adapted orientation
material where applicable. Preserve notices and modification identification
without adding research or compliance narratives.
Copy the applicable CC-BY-SA-4.0 text verbatim into `docs/oss/licenses/` and identify
the separately licensed policy-document scope in root COPYRIGHT. ConfigKit code
retains LGPL-3.0-or-later; root LICENSE retains the project license texts. Original
upstream example formatting is CC0 and does not itself require an attribution
entry or copying the example collection.
Normalize the existing YAML entry to the current House Format: the prescribed
document title, factual component identification, actual notice filenames,
punctuation, and Source link. Remove editorial explanations while retaining
upstream notices, copyright statements, license expression, and exact source
revision. Keep MIT and Apache texts unchanged. Do not restore the author-owned
adaptation section that the maintainer expressly removed.
## Change surface and boundaries
Affected files are the policy documents, root `AGENTS.md`, `docs/development.md`,
COPYRIGHT, `docs/oss/attribution.md`, and the new CC license text. Repair affected
local links and any misleading licensing summaries. Shared rules belong in their
owning policies, not duplicated in the orientation guide or attribution entries.
The [release-workflow roadmap](release.md) owns publication automation and gate
selection. This work may align wording and references but does not alter release
scripts, existing gates, supported platforms, publication completion, or library
behavior. Coordinate edits to the release policy rather than maintaining two
competing definitions. Published tags and historical release notes remain intact.
## Completion criteria
The policy set uses upstream language except for justified local substance,
contains accurate forward-looking adoption metadata, and has working orientation
and attribution links. Existing local contracts and explicit maintainer decisions
remain intact. Documentation-link and whitespace checks, license-text comparisons,
and ordinary content review provide proportionate validation. No synchronization
service, scanner, legal sign-off, or new release gate is introduced.
Detailed stages and executable implementation instructions belong in a later
implementation plan. This roadmap authorizes neither publication nor a release.

143
docs/roadmap/release.md Normal file
View File

@@ -0,0 +1,143 @@
# Single-Command Release Workflow and Gate Review
Status: accepted target; detailed design and implementation planning remain separate.
## Intent and baseline
Make source releases simple for humans and agents: one publication command
validates the final committed candidate, checks publication state, and publishes
only the intended refs. Keep the minimum gates justified by ConfigKit's actual
risks, with no routine human intervention or waiting for CI.
Local baseline: `0adb94f59e44827908eff401d4381a398fe17107` (v0.4.1).
The upstream reference is release policy v1.4 at
`d84a38ebab26f048cafbe59a2246700c35d29843`:
[standard release policy](https://gitea.maximumdirect.net/eric/policy/src/commit/d84a38ebab26f048cafbe59a2246700c35d29843/docs/policy/release.md).
Today, `scripts/release-check.sh` performs local validation; the runbook separately
records a candidate commit and executes shell blocks for guards, branch push,
annotated tagging, and tag push. The checker runs module hygiene, formatting and
whitespace checks, one race-enabled suite, vet, and Linux amd64/arm64 cross-builds
using a maintained Go 1.25 patch. Publication completes on successful tag push.
These remain the current requirements until deliberately revised. This roadmap
does not itself waive existing gates.
## Target release contract
ConfigKit remains a source-only Go module hosted at its authoritative Gitea
remote. Releases identify a final committed source revision on `main`, one fresh
immutable annotated version tag, and a matching checked-in release note.
No binary distribution, hosted release object, or registry publication is added.
The publication command owns validation, candidate identity, guards, and explicit
ref publication. Preparation still supplies the version, committed release note,
and dependencies/toolchain; the command must not silently edit or commit source,
choose a version, or upgrade dependencies. Publication remains subject to user
authorization, not the standing local-commit policy.
The command validates the exact candidate once. An optional validation-only mode
may support diagnosis but is not a prerequisite followed by duplicate validation.
Do not require both everyday and release checkers. An implementation need not
introduce a persistent validation cache merely to replace today's manual record.
Mechanical guards ensure a clean worktree/index on the primary branch, an unused
valid version locally and on the authoritative remote, a matching release note,
and exact agreement between validated source and tagged source. Publish only
intended refs without discarding remote history. Ignored local files are not
release content and do not alone prevent publication.
A successful intended tag push, with the source commit available on authoritative
main, completes the release. Never wait for or poll CI, module availability,
consumer installation, or optional verification. Do not add a successful-push
remote read-back gate. If future artifact channels are adopted, delivery status
must remain separate; this task introduces none.
## Gate review target
Keep the full deterministic offline suite as the core check. Evaluate every
additional current gate for distinct protection, cost, and overlap; do not retain
or remove it solely because it appears in a template. Record the selected rationale
in the adopted release policy, with commands in the runbook and implementation.
| Current check | Review question |
| --- | --- |
| Race detector | Does its coverage of ownership and concurrent loads justify retaining it as the single full-suite mode? Avoid a second ordinary suite. |
| Vet | What additional static defects does it catch beyond the test invocation, and is that protection worth a separate gate? |
| Module hygiene | Is reproducibility protection distinct from ordinary dependency-change review and offline tests? |
| Formatting and whitespace | Which checks belong in ordinary development rather than blocking publication? Avoid repeated scans without distinct value. |
| Linux amd64/arm64 builds | Preserve existing supported targets unless deliberately changed; remove only demonstrably redundant work, not support commitments by implication. |
| Toolchain selection | Preserve minimum-line validation without adding a second-toolchain gate or per-release latest-version research. |
Examples, consumer fixtures, documentation links, and import/public boundary tests
are already in the suite; they must not become separately repeated release checks.
macOS remains best-effort. No human sign-off, new linter, hardware requirement,
scanner, credentials-dependent test, or remote application probe is introduced.
## Documentation and recovery
Align `docs/policy/release.md` with upstream shared wording, preserving explicit
ConfigKit decisions and the selected gate rationale. The successful-tag-push rule
is a normal supported choice under the new upstream policy, not an exception
requiring newly invented compensating controls.
Make `docs/release.md` a short executable runbook for preparation and the single
command. New notes use a proportionate summary and applicable compatibility and
upgrade information rather than mandatory empty sections. Preserve the licensing
footer and version-specific immutable links. Derive annotated-tag summary content
from the checked-in note. Keep historical notes unchanged.
Validation or guard failure stops publication with actionable diagnostics and no
force updates. A failed or ambiguous push requires resolving authoritative remote
state before retrying or reporting success. A transient failure does not itself
require a new version. Published tags remain immutable; removing an unpublished
local tag requires confirmation it was never published. Explain partial progress
such as a successful branch push followed by a failed tag push.
## Changes needed and scope
The work affects `docs/policy/release.md`, `docs/release.md`, release shell tooling,
`release_check_test.go`, and relevant contributor guidance. Reuse existing
validation mechanisms where appropriate; avoid a general release framework.
Tests should exercise success and meaningful failure/recovery paths in disposable
local repositories, without real publication or credentials. Match coverage to
the chosen push strategy and protect against unintended refs or stale candidates.
Coordinate provenance and licensing with the [policy roadmap](policy.md).
Operational documentation changes land with the implementation they describe.
No library behavior, dependency update, release tag, or push is authorized by
implementing this roadmap alone.
## Open Decisions
### Final gate set
Recommendation: use the current single race suite and Linux support matrix as the
starting point, retaining additional checks only with specific nonredundant
justification. Assess the remaining checks during implementation planning before
changing the binding policy. This protects selected behavior without treating
the existing checker as an untouchable inventory.
Alternative: retain the entire existing checker and automate only publication.
This minimizes behavioral change and is a viable initial scope, but it does not
complete the requested gate review unless each retained check is justified.
### Publication strategy
Recommendation: retain explicit main-then-tag pushes inside the command. This
matches the proven local workflow and avoids a new dependency on atomic-push
support; recovery must describe a partially published sequence.
Alternative: atomically push main and the tag after validating remote ancestry.
This avoids a branch-only intermediate result but requires confirming server
support and adapting failure tests. Select one strategy in the implementation
plan rather than silently switching between them.
## Completion criteria
One documented command publishes a prepared candidate with the reviewed minimum
gate set, no duplicate suite runs, and automated exact-source safeguards. Local
regression tests demonstrate successful publication and safe failure handling.
The policy, runbook, and scripts agree, and successful tag publication is reported
without waiting for external completion evidence. Detailed stages belong in the
later implementation plan, not this target-state roadmap.