Complete D&D asset deployment

This commit is contained in:
2026-09-10 17:20:20 +00:00
parent fb3c95d462
commit daab85ae7e
4 changed files with 98 additions and 684 deletions

View File

@@ -1,119 +1,111 @@
# Feature 0006 Remediation Review
# Feature 0007 Remediation Review
Status: resolved
Reviewed implementation commits:
- `b515968 Compose the D&D pipeline roles`
- `61869d1 Add focused pipeline composition coverage`
- `d1193e8 Align campaign definitions with Narratio`
- `c7e1845 Correct prompt asset references`
- `a6ce224 Deploy D&D pipeline assets`
- `cbfd601 Add focused asset integration coverage`
Remediation commit:
The production architecture matches Feature 0007. The campaign repository
uses Narratio's canonical party schema, the prompt repository's internal
references match its installed layout, and the pipeline role exposes and wires
the six approved asset variables. Production convergence contains only the
planned directory declaration and two Git checkout declarations.
- `4ea4358 Clean up pipeline composition review findings`
The complete integration entry point passes, including native campaign and
prompt discovery, schema resolution, both clean repeated convergences, and
baseline restoration. One test-quality finding remains.
The production architecture matches Feature 0006: the role contains only its
public defaults and argument specification, five pinned role dependencies,
the approved variable forwarding, and fixed Narratio path wiring. Its task
file is empty, and it does not duplicate downstream tasks, templates, state
inspection, or validation. The complete integration entry point passes.
The review identified two repository-quality findings.
## Finding 1: Remove the Misleading Placeholder README Sentence
## Finding 1: Make the Prompt-Library Root an Explicit Test Input
Severity: low
`ansible-role-dnd-pipeline/README.md` still ends with the original placeholder
sentence claiming that the role installs the full production pipeline “plus
supporting assets.” Feature 0006 expressly defers campaign and prompt assets,
operator policy, secrets, and the opinionated D&D configuration layer. The
sentence is both redundant with the rewritten introduction and inaccurate for
the implemented foundation.
`ansible-role-dnd-pipeline/tests/integration` uses the role's default prompt
root implicitly, then duplicates that current default inside the schema check:
The supported-platform summary also names Ubuntu 26.04 without recording the
roadmap's `amd64` and `arm64` boundary.
```python
schema_root = Path("/usr/local/share/narratio/prompt-library/schemas").resolve()
```
The check protects a valid behavioral requirement: a schema path reported by
Scriptorium must resolve inside the deployed schema directory. The hard-coded
source of that directory is the problem. If the role's default root were
intentionally changed while its Git destination and Scriptorium wiring
remained correct, this test would fail solely because it snapshots the former
default. That conflicts with the testing policy's distinction between an
explicitly selected value and an assertion about the current default.
### Required Remediation
- Remove the retained placeholder sentence.
- State the supported `amd64` and `arm64` architectures in the rewritten
platform summary.
- Make no broader README expansion; the existing dependency, interface,
deferral, and validation documentation is otherwise aligned.
- Define the prompt-library root once as an integration-owned shell value.
- Pass that value explicitly as
`dnd_pipeline_prompt_library_root` in `baseline_args`, alongside the
explicit repository origin and revision.
- Give the same value's `schemas` child to the Python schema-resolution check,
for example as a command argument. Do not repeat the literal inside Python.
- Reuse the existing value for baseline, explicit-version, and cleanup
convergence through the existing `baseline_args` array.
- Do not add a default-value assertion, configuration snapshot, file metadata
check, Git-state check, or separate path-override scenario.
### Resolution
The existing native Narratio and Scriptorium checks, both immediate clean
repeats, and the Seriatim forwarding case should remain otherwise unchanged.
README changes are not required because its test description remains accurate.
The retained sentence was removed, and the introduction now records the
supported `amd64` and `arm64` architectures without expanding the role's
claimed scope.
## Resolution
## Finding 2: Give the Isolated Dependency Path Resolution Priority
Resolved in pipeline-role commit `7572fa3`. The integration driver now owns a
single explicit prompt-library root, passes it to the role with the other
controlled asset inputs, and gives its `schemas` child to the schema-resolution
check. No production code or additional coverage was added.
Severity: low
`ansible-role-dnd-pipeline/tests/integration` installs the five pinned Git
roles into `$test_tmp/roles`, but sets `ANSIBLE_ROLES_PATH` with the workspace
parent before that isolated directory:
```sh
export ANSIBLE_ROLES_PATH="$(dirname "$repository_root"):$test_tmp/roles"
```
No conflicting canonical role directories currently exist in the workspace,
so the reviewed run used the installed dependencies and passed. Nevertheless,
the ordering does not preserve the test's stated invariant if a
`rakestraw.<application>` directory is later present in the parent path:
Ansible would resolve that checkout before the exact version installed from
`requirements.yml`. Feature 0006 requires the integration suite to exercise
the same pinned dependency combination delivered to consumers.
### Required Remediation
Put the fresh dependency path first while retaining the workspace parent only
as the fallback that resolves the pipeline role under test:
```sh
export ANSIBLE_ROLES_PATH="$test_tmp/roles:$(dirname "$repository_root")"
```
Do not add dependency-content comparisons, source-revision assertions, or
other verification machinery. Ordinary Ansible role lookup with the correct
path precedence is sufficient.
### Resolution
The integration driver now places its private dependency directory first and
uses the workspace parent only as the fallback for the pipeline role under
test. No additional dependency verification was added.
## Final Validation
## Validation
From `ansible-role-dnd-pipeline`, run:
```text
bash -n tests/integration
tests/integration
git diff --check
git status --short --branch
```
Expected result: dependency bootstrap, syntax checking, production lint,
baseline native checks, Narratio configuration validation, both immediate
clean repeats, the explicit Seriatim `v1.4.0` outcome, and baseline cleanup all
pass. The role repository contains only the intended remediation changes.
Expected result: the controlled prompt root is explicitly supplied to the
role and reused by the deployed-schema check; fresh dependency bootstrap,
syntax checking, production lint, native asset validation, both clean repeats,
and cleanup restoration all continue to pass; and only the intended test
change is present before commit.
From the workspace root, run:
```text
./scripts/status
```
Expected result: the implementation repositories remain clean except for the
intended remediation before it is committed, and no unrelated repository has
changed.
## Review Validation Evidence
During review, `tests/integration` completed successfully. It installed
`community.general` 13.3.0 and all five exact Git role revisions into private
temporary paths, passed syntax checking and production-profile ansible-lint,
validated the assembled applications through their native interfaces, and
reported `changed=0` and `failed=0` on both required immediate repeats. The
cleanup trap restored the baseline Seriatim `v1.5.0` deployment. `git diff
--check` also passed before this review record was written.
During review, `ansible-role-dnd-pipeline/tests/integration` completed
successfully. It installed the pinned application roles and collection into
fresh private paths, passed syntax checking and production-profile lint,
validated the `centaurs` campaign through Narratio, inspected deployed prompts
and a deployed schema through Scriptorium, and reported `changed=0` and
`failed=0` on both required immediate repeats. Cleanup restored Seriatim
`v1.5.0` and the asset-enabled baseline.
After remediation, `bash -n tests/integration`, `git diff --check`, and the
complete `tests/integration` entry point passed again. The rerun installed the
exact pinned dependencies into fresh private paths, passed syntax and
production-profile lint, completed all native checks, reported `changed=0` and
`failed=0` on both required repeats, and restored the baseline suite. No
Feature 0006 findings remain.
Direct review also validated both `centaurs` and `dilfs` by campaign ID through
Narratio and successfully inspected all four prompt definitions affected by
the source corrections. `bash -n`, `git diff --check`, and repository status
checks passed. No production-role or asset-content findings remain.
After remediation, the complete integration entry point passed again,
including fresh dependency bootstrap, syntax checking, production-profile
lint, native asset validation, both immediate clean repeats, the explicit
Seriatim version case, and cleanup restoration. `bash -n` and
`git diff --check` also passed.