|
|
|
|
@@ -1,236 +1,12 @@
|
|
|
|
|
# Implementation Plan 0018: Standalone Scriptorium v0.15.0 Adoption
|
|
|
|
|
# Implementation Plan
|
|
|
|
|
|
|
|
|
|
Status: ready
|
|
|
|
|
No implementation plan is currently active. Agree on the next feature roadmap
|
|
|
|
|
before preparing its staged plan.
|
|
|
|
|
|
|
|
|
|
Target executor: GPT-5.6-Terra
|
|
|
|
|
Feature 0018 is complete and independently reviewed with no remediation
|
|
|
|
|
findings. See [its roadmap](features/0018-scriptorium-v0-15-adoption.md) for
|
|
|
|
|
completion evidence. Git history preserves the completed plan.
|
|
|
|
|
|
|
|
|
|
Feature roadmap: [0018-scriptorium-v0-15-adoption.md](features/0018-scriptorium-v0-15-adoption.md)
|
|
|
|
|
|
|
|
|
|
## Objective and Boundaries
|
|
|
|
|
|
|
|
|
|
Adopt Scriptorium v0.15.0 in its standalone role, expose ConfigKit imports and
|
|
|
|
|
transient retries, and validate the resulting configuration offline. The approved
|
|
|
|
|
feature roadmap owns scope, rationale, and acceptance criteria. This plan does
|
|
|
|
|
not advance the [coordinated upgrade sequence](application-upgrade-sequence.md)
|
|
|
|
|
beyond its Scriptorium feature.
|
|
|
|
|
|
|
|
|
|
Only `ansible-role-scriptorium` and workspace planning records may change.
|
|
|
|
|
Upstream applications and all other roles, collection, consumer, and asset
|
|
|
|
|
repositories are read-only. In particular, do not update suite application
|
|
|
|
|
defaults, role dependency manifests, collection subtrees, or deployment pins.
|
|
|
|
|
|
|
|
|
|
## Execution Rules and Starting State
|
|
|
|
|
|
|
|
|
|
- Execute the consecutive stages below in order. Before each stage reread its
|
|
|
|
|
listed policy documents, inspect the owning working trees, and preserve
|
|
|
|
|
unrelated changes. All policy paths below are workspace-relative.
|
|
|
|
|
- The role currently defaults to v0.13.0; the selected target is v0.15.0, with
|
|
|
|
|
ConfigKit v0.4.2 and PromptKit v0.11.2. Consult tagged application documentation
|
|
|
|
|
rather than assuming newer checkout behavior belongs to this feature.
|
|
|
|
|
- Use workspace `.venv/bin` Ansible tools and the role's existing integration
|
|
|
|
|
entry point. Missing PATH entries or an operational controller are not blockers.
|
|
|
|
|
Existing Go 1.26 satisfies upstream's Go requirement.
|
|
|
|
|
- The integration script performs local development-host convergence with sudo.
|
|
|
|
|
Read its fixture and cleanup behavior before execution. Do not connect to the
|
|
|
|
|
operational controller or pipeline host, supply real keys, or call providers.
|
|
|
|
|
- Trust module state management. No new production tasks, runtime validation,
|
|
|
|
|
probes, state files, custom retry implementation, or migration automation are
|
|
|
|
|
required. Tests may inspect rendered configuration to verify role-owned output.
|
|
|
|
|
- Keep null optional fields omitted and serialize native values safely. Do not
|
|
|
|
|
freeze upstream defaults or enforce additional selector/import restrictions.
|
|
|
|
|
- Commit validated stages with the plain-English intent given below. No push,
|
|
|
|
|
release tag, collection assembly, or deployment is required by this plan.
|
|
|
|
|
- If validation reveals a real incompatibility, report its evidence and resolve
|
|
|
|
|
only what falls within the roadmap. Do not silently weaken useful tests or
|
|
|
|
|
broaden scope. Record validation and commit IDs in Progress Notes.
|
|
|
|
|
|
|
|
|
|
## Stage 1: Adopt the New Application Version
|
|
|
|
|
|
|
|
|
|
Completion: complete (2026-09-28).
|
|
|
|
|
|
|
|
|
|
### Required Policy Review
|
|
|
|
|
|
|
|
|
|
Read `AGENTS.md`, `docs/orientation.md`, `docs/conventions.md`,
|
|
|
|
|
`docs/ansible.md`, `docs/testing.md`, and the Feature 0018 roadmap.
|
|
|
|
|
|
|
|
|
|
### Owning Repository and Preconditions
|
|
|
|
|
|
|
|
|
|
`ansible-role-scriptorium`. Inspect its current defaults, tasks, template,
|
|
|
|
|
argument specifications, README, and `tests/integration`. Read the upstream
|
|
|
|
|
v0.14.0 migration notes and v0.15.0 configuration/release references linked by
|
|
|
|
|
the roadmap. Confirm the target tag without modifying upstream worktrees.
|
|
|
|
|
|
|
|
|
|
### Required Changes
|
|
|
|
|
|
|
|
|
|
1. Set `scriptorium_version: v0.15.0` and update its README default example.
|
|
|
|
|
Keep the source/build/dependency and filesystem tasks unchanged.
|
|
|
|
|
2. Add native `config validate --config <managed-file>` checks to the existing
|
|
|
|
|
integration script for default and representative configurations. Retain
|
|
|
|
|
existing offline profile/backend inspection, because application validation
|
|
|
|
|
alone does not construct a PromptKit engine.
|
|
|
|
|
3. Preserve existing caller-supplied build-executable and missing-binary coverage.
|
|
|
|
|
Do not add an assertion that v0.15.0 must always be the default or require a
|
|
|
|
|
new historical-version matrix. Limit fixture corrections to actual changed
|
|
|
|
|
application contracts.
|
|
|
|
|
|
|
|
|
|
### Validation and Completion Criteria
|
|
|
|
|
|
|
|
|
|
From `ansible-role-scriptorium`, run:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
tests/integration
|
|
|
|
|
git diff --check
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The new version builds; default and representative configurations validate;
|
|
|
|
|
offline profile inspection succeeds; immediate repeat convergence is clean.
|
|
|
|
|
The existing script already includes syntax checking and linting.
|
|
|
|
|
|
|
|
|
|
### Commit
|
|
|
|
|
|
|
|
|
|
`Adopt Scriptorium v0.15.0 in the standalone role`.
|
|
|
|
|
|
|
|
|
|
## Stage 2: Expose Imports and Transient Retries
|
|
|
|
|
|
|
|
|
|
Completion: complete (2026-09-28).
|
|
|
|
|
|
|
|
|
|
### Required Policy Review
|
|
|
|
|
|
|
|
|
|
Read `AGENTS.md`, `docs/orientation.md`, `docs/conventions.md`,
|
|
|
|
|
`docs/ansible.md`, `docs/testing.md`, and the Feature 0018 roadmap.
|
|
|
|
|
|
|
|
|
|
### Owning Repository and Preconditions
|
|
|
|
|
|
|
|
|
|
`ansible-role-scriptorium`. Stage 1 is committed and validated. Review the tagged
|
|
|
|
|
configuration reference's import resolution, null, and retry semantics.
|
|
|
|
|
|
|
|
|
|
### Required Changes
|
|
|
|
|
|
|
|
|
|
1. Add defaults `scriptorium_configkit_imports: null` and
|
|
|
|
|
`scriptorium_transient_retries: null`. Add optional argument specifications:
|
|
|
|
|
imports is a list of dictionaries, retries is an integer. Use native mappings
|
|
|
|
|
for import entries; do not recreate ConfigKit's nested schema in the role.
|
|
|
|
|
2. Extend `templates/config.yml.j2` to render `configkit.imports` when imports
|
|
|
|
|
is not none, and top-level `transient_retries` when retries is not none.
|
|
|
|
|
Use existing serialization conventions. Include both variables in the
|
|
|
|
|
empty-document condition so either field alone prevents output of `{}`.
|
|
|
|
|
With all application variables null, retain the minimal `{}` document.
|
|
|
|
|
3. Extend the existing integration fixture with a caller-owned configuration
|
|
|
|
|
fragment under a temporary configuration root. Select that root using
|
|
|
|
|
`scriptorium_config_path`. Supply imports through the role's public variable;
|
|
|
|
|
use a relative `path` entry naming the fragment.
|
|
|
|
|
4. In that focused case, render only imports and `scriptorium_transient_retries: 0`
|
|
|
|
|
through application variables. Put one representative setting, such as
|
|
|
|
|
`server.addr: 127.0.0.1:18081`, in the external fragment. Do not also define
|
|
|
|
|
that setting in the main file: ordinary imports reject field conflicts.
|
|
|
|
|
Native `config show` should expose the imported setting and retry zero.
|
|
|
|
|
Inspect the rendered root to verify that the supplied import was serialized.
|
|
|
|
|
5. Reapply the same role inputs immediately and require a clean recap. For the
|
|
|
|
|
default case, verify omission of the two new fields in the rendered YAML,
|
|
|
|
|
not exact native defaults in resolved output. Reuse existing test structure;
|
|
|
|
|
no additional overlay scenario is required for this role's import interface.
|
|
|
|
|
6. Ensure the temporary configuration and fragment live under the script's
|
|
|
|
|
existing disposable fixture directory and cleanup restores the default role
|
|
|
|
|
configuration. No production task should create the test fragment or manage
|
|
|
|
|
arbitrary import/overlay content.
|
|
|
|
|
7. Document the new public variables and one concise inventory import example.
|
|
|
|
|
Explain null omission, zero retry behavior, caller-owned files, and that newer
|
|
|
|
|
fields must be left unset when selecting older unsupported binaries.
|
|
|
|
|
|
|
|
|
|
### Validation and Completion Criteria
|
|
|
|
|
|
|
|
|
|
From the role repository run:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
tests/integration
|
|
|
|
|
git diff --check
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Native validation accepts the new configuration. Native inspection resolves
|
|
|
|
|
the explicitly supplied fragment and retry setting without provider calls.
|
|
|
|
|
Default omission and repeated convergence pass. No tests assert exact task
|
|
|
|
|
layout, default version/model, or file-module ownership/existence postconditions.
|
|
|
|
|
|
|
|
|
|
### Commit
|
|
|
|
|
|
|
|
|
|
`Expose Scriptorium imports and transient retry settings`.
|
|
|
|
|
|
|
|
|
|
## Stage 3: Document Compatibility and Record the Review Handoff
|
|
|
|
|
|
|
|
|
|
Completion: complete (2026-09-28).
|
|
|
|
|
|
|
|
|
|
### Required Policy Review
|
|
|
|
|
|
|
|
|
|
Read `AGENTS.md`, `docs/orientation.md`, `docs/conventions.md`,
|
|
|
|
|
`docs/ansible.md`, `docs/testing.md`, `docs/planning.md`, the Feature 0018 roadmap,
|
|
|
|
|
and `docs/roadmap/application-upgrade-sequence.md`.
|
|
|
|
|
|
|
|
|
|
### Owning Repositories and Preconditions
|
|
|
|
|
|
|
|
|
|
`ansible-role-scriptorium` and workspace. Stages 1-2 are validated and committed.
|
|
|
|
|
|
|
|
|
|
### Required Changes
|
|
|
|
|
|
|
|
|
|
1. Finish the role README's upgrade guidance: strict YAML/empty-document behavior,
|
|
|
|
|
ConfigKit imports and `--config-overlay` versus PromptKit LLM profiles,
|
|
|
|
|
configuration-source versus application-value path semantics, and changed
|
|
|
|
|
transport retry behavior. Link tagged upstream contracts for full detail.
|
|
|
|
|
2. Mention removed legacy DeepSeek catalog IDs without adding compatibility aliases.
|
|
|
|
|
Note Scriptorium v0.15.0's GPL-3.0-or-later application grant and link its
|
|
|
|
|
licensing notices; leave the role's own license untouched. Do not introduce
|
|
|
|
|
a legal approval gate or copy license files into this installer role.
|
|
|
|
|
3. Update the README validation summary to match actual coverage. Do not claim
|
|
|
|
|
provider connectivity, live service operation, or suite compatibility testing.
|
|
|
|
|
4. Record role commits and validation evidence in this plan and workspace status.
|
|
|
|
|
Mark Feature 0018 `in_progress` pending independent review. In the sequence
|
|
|
|
|
document, note implementation is awaiting review, leaving its checkbox open.
|
|
|
|
|
Do not begin Audita work or mark this feature done automatically.
|
|
|
|
|
5. Confirm this feature changed no pipeline/collection/consumer pins. Inspect
|
|
|
|
|
existing changes without reverting unrelated work by the user or other tasks.
|
|
|
|
|
|
|
|
|
|
### Validation and Completion Criteria
|
|
|
|
|
|
|
|
|
|
Run `git diff --check` in the role and workspace. Check new local Markdown links
|
|
|
|
|
and examples against the selected application contract. Reuse Stage 2 integration
|
|
|
|
|
results for documentation-only changes; no second full suite or operational
|
|
|
|
|
deployment is needed. The handoff names the role revision for later integration.
|
|
|
|
|
|
|
|
|
|
### Commits
|
|
|
|
|
|
|
|
|
|
Role, if documentation remains uncommitted:
|
|
|
|
|
`Document Scriptorium v0.15 compatibility`.
|
|
|
|
|
|
|
|
|
|
Workspace: `Record the standalone Scriptorium upgrade for review`.
|
|
|
|
|
|
|
|
|
|
## Final Validation and Handoff
|
|
|
|
|
|
|
|
|
|
Report owning commits, tests performed, and any deviations or blockers. Confirm
|
|
|
|
|
the feature's working trees are clean. State explicitly that the existing suite
|
|
|
|
|
compatibility set remains unchanged and that no operational deployment occurred.
|
|
|
|
|
Independent review and closeout precede the next application adoption feature.
|
|
|
|
|
|
|
|
|
|
## Progress Notes
|
|
|
|
|
|
|
|
|
|
Roadmap and implementation plan approved by the user.
|
|
|
|
|
|
|
|
|
|
- Stage 1: role commit `61dcafe`. `ansible-role-scriptorium/tests/integration`
|
|
|
|
|
passed, including
|
|
|
|
|
syntax checking, production-profile lint, native validation of default and
|
|
|
|
|
representative configurations, offline profile inspection, missing-binary
|
|
|
|
|
recovery with a caller-supplied Go executable, and clean repeat convergence.
|
|
|
|
|
`git diff --check` passed in the role repository.
|
|
|
|
|
- Stage 2: role commit `2fce529`. `ansible-role-scriptorium/tests/integration`
|
|
|
|
|
passed after the new
|
|
|
|
|
import and retry settings were added. It verified default omission, native
|
|
|
|
|
validation and inspection of a caller-supplied relative import and explicit
|
|
|
|
|
retry zero, root serialization, and clean repeat convergence. The role's
|
|
|
|
|
`git diff --check` passed.
|
|
|
|
|
- Stage 3: role commit `b174c8c` documents the tagged v0.15.0 compatibility and
|
|
|
|
|
licensing contracts. Role and workspace `git diff --check` passed; local
|
|
|
|
|
Markdown targets and tagged upstream files were checked. Pipeline, collection,
|
|
|
|
|
and consumer pins remain unchanged. Feature 0018 awaits independent review.
|
|
|
|
|
|
|
|
|
|
## Open Questions
|
|
|
|
|
|
|
|
|
|
None required for the approved standalone scope. Suite retry policy and later
|
|
|
|
|
deployment choices belong to the final integration feature, not this role update.
|
|
|
|
|
Audita standalone adoption is next in the agreed
|
|
|
|
|
[application upgrade sequence](application-upgrade-sequence.md). Suite and
|
|
|
|
|
consumer pins remain unchanged until coordinated integration.
|
|
|
|
|
|