Complete D&D asset deployment
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# Feature 0007: D&D Asset Deployment and Scriptorium Integration
|
# Feature 0007: D&D Asset Deployment and Scriptorium Integration
|
||||||
|
|
||||||
Status: ready
|
Status: done
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
@@ -341,6 +341,11 @@ Before a suite or collection release, both asset repositories need an explicit
|
|||||||
release policy. If they begin publishing immutable releases, the suite should
|
release policy. If they begin publishing immutable releases, the suite should
|
||||||
replace its branch defaults with compatible released revisions.
|
replace its branch defaults with compatible released revisions.
|
||||||
|
|
||||||
|
Feature 0007 was completed by campaign commit `d1193e8`, prompt-library commit
|
||||||
|
`c7e1845`, pipeline-role commits `a6ce224` and `cbfd601`, and final test-quality
|
||||||
|
remediation commit `7572fa3`. The complete integration suite and post-remediation
|
||||||
|
review passed with no remaining findings.
|
||||||
|
|
||||||
## Potential Future Hardening
|
## Potential Future Hardening
|
||||||
|
|
||||||
- Verify signed asset releases when the repositories publish them.
|
- Verify signed asset releases when the repositories publish them.
|
||||||
|
|||||||
@@ -1,596 +1,13 @@
|
|||||||
# Implementation Plan 0007: Deploy D&D Assets and Integrate Scriptorium
|
# Implementation Plan
|
||||||
|
|
||||||
Status: ready
|
Status: pending
|
||||||
|
|
||||||
Target executor: GPT-5.6-Terra
|
No implementation plan is currently active. Feature 0007 was implemented and
|
||||||
|
independently reviewed through pipeline-role remediation commit `7572fa3`.
|
||||||
|
Its durable scope, decisions, and acceptance criteria remain in
|
||||||
|
[Feature 0007](features/0007-dnd-asset-deployment-and-scriptorium-integration.md),
|
||||||
|
and the completed review record remains in [the remediation
|
||||||
|
document](remediation.md).
|
||||||
|
|
||||||
Feature roadmap:
|
Select and approve the next feature roadmap before replacing this notice with
|
||||||
[Feature 0007: D&D Asset Deployment and Scriptorium Integration](features/0007-dnd-asset-deployment-and-scriptorium-integration.md)
|
a new staged implementation plan.
|
||||||
|
|
||||||
Active plan location: `docs/roadmap/implementation.md`
|
|
||||||
|
|
||||||
## Objective
|
|
||||||
|
|
||||||
Implement the asset layer selected by Feature 0007. Correct the known-invalid
|
|
||||||
campaign and prompt references in their authoritative repositories, extend
|
|
||||||
`rakestraw.dnd_pipeline` with the six approved asset inputs and three direct
|
|
||||||
desired-state tasks, connect the deployed roots to Narratio and Scriptorium,
|
|
||||||
and prove the assembled behavior through native application interfaces and an
|
|
||||||
immediate clean repeat.
|
|
||||||
|
|
||||||
The feature roadmap remains authoritative for scope, rationale, target end
|
|
||||||
state, public variables, filesystem layout, and acceptance criteria.
|
|
||||||
|
|
||||||
## Execution Rules
|
|
||||||
|
|
||||||
- Execute Stage 1 through Stage 4 in numeric order.
|
|
||||||
- Immediately before each stage, read every document in that stage's Required
|
|
||||||
Policy Review, then confirm its preconditions and the owning repository's
|
|
||||||
working-tree state. Do not rely on policy recalled from an earlier stage.
|
|
||||||
- Modify only the repository named for the active stage. Preserve unrelated
|
|
||||||
changes and stop if that repository is unexpectedly dirty.
|
|
||||||
- Correct asset defects in their source repositories; do not compensate for
|
|
||||||
them with pipeline-role copies, rewrites, symlinks, or compatibility trees.
|
|
||||||
- Implement the production role with one `ansible.builtin.file` task and two
|
|
||||||
`ansible.builtin.git` tasks. Do not add preliminary probes, registered-result
|
|
||||||
conditionals, handlers, revision queries, checksums, manifests, cleanup
|
|
||||||
commands, or recursive metadata passes.
|
|
||||||
- Use task-level `become: true` for the three privileged pipeline tasks. Do not
|
|
||||||
require play-level escalation.
|
|
||||||
- Configure the existing application roles only through their public
|
|
||||||
variables. Do not modify or reproduce their templates or tasks.
|
|
||||||
- Do not set `scriptorium_profile_dir`, invent execution profiles, select
|
|
||||||
model backends, enable Notarius, or add the later opinionated D&D processing
|
|
||||||
policy.
|
|
||||||
- Let `ansible.builtin.git` own creation, update, tracked-content convergence,
|
|
||||||
and change reporting. Use the roadmap-selected `update: true` and
|
|
||||||
`force: true`; do not separately purge untracked files.
|
|
||||||
- Keep tests at the suite-content boundary. Use explicit local Git origins and
|
|
||||||
revisions for controlled inputs, then observe campaign and prompt discovery
|
|
||||||
through Narratio and Scriptorium. Do not inspect Git internals or re-test the
|
|
||||||
file and Git modules.
|
|
||||||
- Retain the existing Feature 0006 composition and explicit-version coverage.
|
|
||||||
Do not reproduce any standalone role's installation or configuration
|
|
||||||
matrix.
|
|
||||||
- Never place credentials or secret values in content, plans, examples, or
|
|
||||||
tests.
|
|
||||||
- Run every stage's validation before committing it. Do not begin a dependent
|
|
||||||
stage after an earlier stage fails.
|
|
||||||
- Commit each completed stage with its specified plain-English message. Do not
|
|
||||||
push during out-of-band implementation.
|
|
||||||
|
|
||||||
## Starting State and Preconditions
|
|
||||||
|
|
||||||
- Feature 0006 is complete and independently reviewed.
|
|
||||||
- This plan, the agreed Feature 0007 roadmap, the corresponding MVP decisions,
|
|
||||||
and workspace status are committed before out-of-band execution begins.
|
|
||||||
- `assets/narratio-prompts` is clean on `main` at
|
|
||||||
`eef72b7d822a97d3e398a05f48bbfa20a2a6c109`, tracking `origin/main`
|
|
||||||
without divergence.
|
|
||||||
- `assets/campaigns` is clean on `main` at
|
|
||||||
`bb0aedf36a9a510d90a36e4df6b2c5c63135c025`, tracking `origin/main`
|
|
||||||
without divergence.
|
|
||||||
- `ansible-role-dnd-pipeline` is clean on `main` at
|
|
||||||
`4ea43580f66867d95ac23804554b07b67dbbaaee`, tracking `origin/main`
|
|
||||||
without divergence.
|
|
||||||
- The local controller and managed-host proxy are Ubuntu 26.04 `x86_64`, with
|
|
||||||
gathered facts and passwordless task-level privilege escalation available.
|
|
||||||
Local execution remains the approved proxy for both supported host
|
|
||||||
architectures during this MVP.
|
|
||||||
- Workspace tooling is available in `.venv`: Ansible Core 2.21.3 and
|
|
||||||
ansible-lint 26.8.0. Scriptorium `v0.13.0` and Narratio `v2.0.0` are
|
|
||||||
available through the completed roles for native validation.
|
|
||||||
- `community.general` 13.3.0 and Go Snap channel `1.26/stable` remain
|
|
||||||
available. The existing pipeline integration entry point passes before
|
|
||||||
implementation begins.
|
|
||||||
- The two local asset repositories are valid Git origins. Stage 4 may use
|
|
||||||
their absolute `file://` URLs and explicit commit revisions without copying
|
|
||||||
their content into the pipeline-role repository.
|
|
||||||
- The prompt repository contains no execution profiles. The current source
|
|
||||||
defects are limited to the four references identified by the feature
|
|
||||||
roadmap:
|
|
||||||
- two uses of `../common/transcript.previous_recap.md` must name the existing
|
|
||||||
`../common/previous_recap.user.md` file;
|
|
||||||
- `pipeline-dnd/analyze/scene_map.schema.json` must resolve as
|
|
||||||
`analyze/scene_map.schema.json`; and
|
|
||||||
- `automation-pipeline-dnd/trim/bounds.schema.json` must resolve as
|
|
||||||
`trim/bounds.schema.json`.
|
|
||||||
- Both campaign definitions contain an obsolete `inputs.players_file` field
|
|
||||||
that Narratio 2.0 rejects. Their existing `inputs.party_file` fields remain
|
|
||||||
the canonical party sources, but the referenced documents still use the
|
|
||||||
legacy `party` list rather than `narratio.party.v1`.
|
|
||||||
|
|
||||||
## Repository Scope
|
|
||||||
|
|
||||||
Repositories that change:
|
|
||||||
|
|
||||||
- `assets/campaigns`: owns the two campaign-input corrections and two party
|
|
||||||
schema migrations in Stage 1.
|
|
||||||
- `assets/narratio-prompts`: owns the four prompt-definition path
|
|
||||||
corrections in Stage 2.
|
|
||||||
- `ansible-role-dnd-pipeline`: owns the public asset interface, downstream
|
|
||||||
role wiring, direct deployment tasks, README, and integration coverage in
|
|
||||||
Stages 3 and 4.
|
|
||||||
|
|
||||||
Repositories that may be inspected but must remain unchanged:
|
|
||||||
|
|
||||||
- `ansible-workspace-dnd`: authoritative roadmap, plan, policies, inventory,
|
|
||||||
and status during out-of-band execution.
|
|
||||||
- `ansible-role-narratio` and `ansible-role-scriptorium`: authoritative public
|
|
||||||
role interfaces.
|
|
||||||
- The other standalone application roles and all five application source
|
|
||||||
repositories.
|
|
||||||
- `ansible-collection-dnd`: future collection assembly target.
|
|
||||||
- `rakestraw-ansible`: historical style and deployment reference.
|
|
||||||
- Every other repository in `workspace.yml`.
|
|
||||||
|
|
||||||
## Stage 1: Align Campaign Definitions with Narratio 2.0
|
|
||||||
|
|
||||||
### Objective
|
|
||||||
|
|
||||||
Make both authoritative campaigns valid under Narratio 2.0's canonical
|
|
||||||
party-input contract by removing the obsolete input and mechanically migrating
|
|
||||||
the party documents without deleting legacy source files.
|
|
||||||
|
|
||||||
### Required Policy Review
|
|
||||||
|
|
||||||
Before beginning this stage, read:
|
|
||||||
|
|
||||||
- `AGENTS.md`
|
|
||||||
- `docs/orientation.md`
|
|
||||||
- `docs/conventions.md`
|
|
||||||
- `docs/testing.md`
|
|
||||||
|
|
||||||
### Preconditions
|
|
||||||
|
|
||||||
- `assets/campaigns` is at the starting revision above and has no uncommitted
|
|
||||||
changes.
|
|
||||||
- Both `centaurs/campaign.yml` and `dilfs/campaign.yml` contain a valid
|
|
||||||
`inputs.party_file` value and the obsolete `inputs.players_file` value.
|
|
||||||
- Both referenced `party.yml` files contain the legacy list entries documented
|
|
||||||
by the feature roadmap and have not already been partially migrated.
|
|
||||||
- `/usr/local/bin/narratio` is available for native campaign validation. If it
|
|
||||||
is unavailable, stop and report the missing completed-role prerequisite
|
|
||||||
rather than modifying application source or installing an unplanned
|
|
||||||
substitute.
|
|
||||||
|
|
||||||
### Owning Repository
|
|
||||||
|
|
||||||
`assets/campaigns`
|
|
||||||
|
|
||||||
### Required Changes
|
|
||||||
|
|
||||||
1. Remove only the `inputs.players_file` entry from `centaurs/campaign.yml`
|
|
||||||
and `dilfs/campaign.yml`. Retain each `party_file` entry and all other
|
|
||||||
campaign fields unchanged.
|
|
||||||
2. Replace each legacy `party` list with a `narratio.party.v1` document using
|
|
||||||
`schema_version` and a `characters` map.
|
|
||||||
3. Use exactly these stable character IDs: `krek`, `rick_oathbreaker`,
|
|
||||||
`tlann`, `torvass_oathbreaker`, `hrank_greenfield`, `alan_hohey`,
|
|
||||||
`svend_balderk`, and `popov`.
|
|
||||||
4. For every character, preserve the authored player name and character
|
|
||||||
display name. Convert the single legacy class and level into one entry in
|
|
||||||
`character.classes`. Correct Popov's evident class typo from `pladin` to
|
|
||||||
`paladin`.
|
|
||||||
5. Omit the legacy `category: pc` field because character membership is
|
|
||||||
implicit in the native map. Preserve each free-form legacy note as an
|
|
||||||
adjacent YAML comment because the strict native schema has no note field.
|
|
||||||
6. Do not delete or rewrite either `players.yml` file. Removing or migrating
|
|
||||||
unused legacy files is not required for native campaign validity and is
|
|
||||||
outside this feature.
|
|
||||||
|
|
||||||
### Validation
|
|
||||||
|
|
||||||
Create `/tmp/dnd-pipeline-feature-0007.yml` with this temporary minimal
|
|
||||||
configuration:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
workspace:
|
|
||||||
root: /tmp/dnd-pipeline-feature-0007-workspace
|
|
||||||
campaigns:
|
|
||||||
root: /home/eric/Workspace/ansible-dnd/assets/campaigns
|
|
||||||
spool:
|
|
||||||
root: /tmp/dnd-pipeline-feature-0007-spool
|
|
||||||
cache:
|
|
||||||
root: /tmp/dnd-pipeline-feature-0007-cache
|
|
||||||
whisperx:
|
|
||||||
transcribe_url: http://127.0.0.1:8000/transcribe
|
|
||||||
```
|
|
||||||
|
|
||||||
From `assets/campaigns`, run:
|
|
||||||
|
|
||||||
```text
|
|
||||||
/usr/local/bin/narratio config validate --config /tmp/dnd-pipeline-feature-0007.yml --campaign centaurs
|
|
||||||
/usr/local/bin/narratio config validate --config /tmp/dnd-pipeline-feature-0007.yml --campaign dilfs
|
|
||||||
git diff --check
|
|
||||||
git status --short
|
|
||||||
```
|
|
||||||
|
|
||||||
Delete only the temporary configuration after validation. Expected result:
|
|
||||||
Narratio natively validates both campaigns by registry ID; whitespace
|
|
||||||
validation passes; and only the two `campaign.yml` and two `party.yml` files
|
|
||||||
are modified.
|
|
||||||
|
|
||||||
### Completion Criteria
|
|
||||||
|
|
||||||
- Neither campaign definition contains `inputs.players_file`.
|
|
||||||
- Both retain `inputs.party_file`, whose document uses
|
|
||||||
`schema_version: narratio.party.v1` and the roadmap's fixed character IDs.
|
|
||||||
- Player, character, class, level, and note information survives the migration
|
|
||||||
in supported native fields or adjacent comments, with only the selected
|
|
||||||
`paladin` typo correction.
|
|
||||||
- Both campaigns pass Narratio's native configuration validation.
|
|
||||||
- No `players.yml` or unrelated asset changes.
|
|
||||||
|
|
||||||
### Commit
|
|
||||||
|
|
||||||
Commit intent: `Align campaign definitions with Narratio`
|
|
||||||
|
|
||||||
## Stage 2: Correct the Prompt Library's Internal References
|
|
||||||
|
|
||||||
### Objective
|
|
||||||
|
|
||||||
Make the authoritative prompt repository internally consistent with its own
|
|
||||||
`prompts/` and `schemas/` layout so the pipeline role can deploy it without
|
|
||||||
content transformation or compatibility artifacts.
|
|
||||||
|
|
||||||
### Required Policy Review
|
|
||||||
|
|
||||||
Before beginning this stage, read:
|
|
||||||
|
|
||||||
- `AGENTS.md`
|
|
||||||
- `docs/orientation.md`
|
|
||||||
- `docs/conventions.md`
|
|
||||||
- `docs/testing.md`
|
|
||||||
|
|
||||||
### Preconditions
|
|
||||||
|
|
||||||
- Stage 1 is committed and `assets/campaigns` is otherwise clean.
|
|
||||||
- `assets/narratio-prompts` is at the starting revision above and has no
|
|
||||||
uncommitted changes.
|
|
||||||
- The existing shared content file is
|
|
||||||
`prompts/analyze/common/previous_recap.user.md`.
|
|
||||||
- The existing schema files are `schemas/analyze/scene_map.schema.json` and
|
|
||||||
`schemas/trim/bounds.schema.json`.
|
|
||||||
- `/usr/local/bin/scriptorium` is available for read-only native prompt
|
|
||||||
inspection. If it is unavailable, stop and report the missing completed-role
|
|
||||||
prerequisite rather than modifying application source or installing an
|
|
||||||
unplanned substitute.
|
|
||||||
|
|
||||||
### Owning Repository
|
|
||||||
|
|
||||||
`assets/narratio-prompts`
|
|
||||||
|
|
||||||
### Required Changes
|
|
||||||
|
|
||||||
1. In
|
|
||||||
`prompts/analyze/character_meta_analysis/character_meta_analysis.yml` and
|
|
||||||
`prompts/analyze/session_recap/recap.yml`, replace the nonexistent shared
|
|
||||||
content reference with `../common/previous_recap.user.md`.
|
|
||||||
2. In `prompts/analyze/scene_map/scene_map.yml`, set `output.schema_path` to
|
|
||||||
`analyze/scene_map.schema.json`, relative to the configured schema root.
|
|
||||||
3. In `prompts/trim/bounds.yml`, set `output.schema_path` to
|
|
||||||
`trim/bounds.schema.json`, relative to the configured schema root.
|
|
||||||
4. Make no other editorial, prompt-content, version, profile, schema-content,
|
|
||||||
or layout changes. Do not rename files or add compatibility links.
|
|
||||||
|
|
||||||
### Validation
|
|
||||||
|
|
||||||
From `assets/narratio-prompts`, run:
|
|
||||||
|
|
||||||
```text
|
|
||||||
/usr/local/bin/scriptorium inspect prompt --prompt-dir "$PWD/prompts" --prompt dnd.character_meta_analysis --prompt-version 2.0.0 --format json
|
|
||||||
/usr/local/bin/scriptorium inspect prompt --prompt-dir "$PWD/prompts" --prompt dnd.session_recap --prompt-version 2.0.0 --format json
|
|
||||||
../../.venv/bin/python - <<'PY'
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
import yaml
|
|
||||||
|
|
||||||
root = Path.cwd()
|
|
||||||
definitions = (
|
|
||||||
root / "prompts/analyze/scene_map/scene_map.yml",
|
|
||||||
root / "prompts/trim/bounds.yml",
|
|
||||||
)
|
|
||||||
for definition in definitions:
|
|
||||||
document = yaml.safe_load(definition.read_text())
|
|
||||||
schema = root / "schemas" / document["output"]["schema_path"]
|
|
||||||
if not schema.is_file():
|
|
||||||
raise SystemExit(f"missing schema for {definition}: {schema}")
|
|
||||||
PY
|
|
||||||
git diff --check
|
|
||||||
git status --short
|
|
||||||
```
|
|
||||||
|
|
||||||
Expected result: Scriptorium loads both definitions that previously named the
|
|
||||||
missing shared file; both schema paths resolve to real files beneath
|
|
||||||
`schemas/`; whitespace validation passes; and only the four intended YAML
|
|
||||||
definitions are modified.
|
|
||||||
|
|
||||||
### Completion Criteria
|
|
||||||
|
|
||||||
- All four stale paths use the repository's actual shared-content and schema
|
|
||||||
layout.
|
|
||||||
- Both corrected shared-content definitions load through Scriptorium's native
|
|
||||||
inspection interface.
|
|
||||||
- Both schema references resolve relative to the repository's `schemas/`
|
|
||||||
directory.
|
|
||||||
- No prompt semantics, IDs, versions, profiles, schemas, or unrelated assets
|
|
||||||
change.
|
|
||||||
|
|
||||||
### Commit
|
|
||||||
|
|
||||||
Commit intent: `Correct prompt asset references`
|
|
||||||
|
|
||||||
## Stage 3: Add Minimal Asset Deployment to the Pipeline Role
|
|
||||||
|
|
||||||
### Objective
|
|
||||||
|
|
||||||
Implement the complete production asset interface, application-role wiring,
|
|
||||||
and module-driven deployment flow without adding test or verification logic to
|
|
||||||
role convergence.
|
|
||||||
|
|
||||||
### Required Policy Review
|
|
||||||
|
|
||||||
Before beginning this stage, read:
|
|
||||||
|
|
||||||
- `AGENTS.md`
|
|
||||||
- `docs/orientation.md`
|
|
||||||
- `docs/conventions.md`
|
|
||||||
- `docs/ansible.md`
|
|
||||||
|
|
||||||
### Preconditions
|
|
||||||
|
|
||||||
- Stage 1 and Stage 2 are committed, and both asset repositories are otherwise
|
|
||||||
clean.
|
|
||||||
- Record both asset commits for Stage 4's explicit local revisions.
|
|
||||||
- `ansible-role-dnd-pipeline` is at the starting revision above and has no
|
|
||||||
uncommitted changes.
|
|
||||||
- The pipeline role's existing Feature 0006 defaults, argument
|
|
||||||
specifications, dependency declarations, and empty task file remain intact.
|
|
||||||
- The completed Narratio role accepts `narratio_campaigns_root`; the completed
|
|
||||||
Scriptorium role accepts `scriptorium_prompt_dir` and
|
|
||||||
`scriptorium_schema_dir`.
|
|
||||||
|
|
||||||
### Owning Repository
|
|
||||||
|
|
||||||
`ansible-role-dnd-pipeline`
|
|
||||||
|
|
||||||
### Required Changes
|
|
||||||
|
|
||||||
1. Add exactly these six defaults to `defaults/main.yml`:
|
|
||||||
- `dnd_pipeline_campaigns_repository_url` with
|
|
||||||
`https://gitea.maximumdirect.net/eric/campaigns.git`;
|
|
||||||
- `dnd_pipeline_campaigns_revision` with `main`;
|
|
||||||
- `dnd_pipeline_campaigns_root` with
|
|
||||||
`/usr/local/share/narratio/campaigns`;
|
|
||||||
- `dnd_pipeline_prompt_library_repository_url` with
|
|
||||||
`https://gitea.maximumdirect.net/eric/narratio-prompts.git`;
|
|
||||||
- `dnd_pipeline_prompt_library_revision` with `main`; and
|
|
||||||
- `dnd_pipeline_prompt_library_root` with
|
|
||||||
`/usr/local/share/narratio/prompt-library`.
|
|
||||||
2. Add matching argument-specification entries with concise descriptions.
|
|
||||||
Use `str` for origins and revisions and `path` for roots. All six are
|
|
||||||
required at role invocation because defaults always define them.
|
|
||||||
3. In `meta/main.yml`, pass `dnd_pipeline_campaigns_root` to the Narratio
|
|
||||||
dependency as `narratio_campaigns_root`.
|
|
||||||
4. In the Scriptorium dependency, pass the prompt root's `prompts` child as
|
|
||||||
`scriptorium_prompt_dir` and its `schemas` child as
|
|
||||||
`scriptorium_schema_dir`. Use clear Jinja path expressions and do not set
|
|
||||||
`scriptorium_profile_dir`.
|
|
||||||
5. Replace the empty production task list with exactly three tasks:
|
|
||||||
- declare `dnd_pipeline_prompt_library_root` as a directory owned by
|
|
||||||
`root:narratio` with mode `0755` using `ansible.builtin.file`;
|
|
||||||
- converge the campaign Git origin and revision directly at
|
|
||||||
`dnd_pipeline_campaigns_root`; and
|
|
||||||
- converge the prompt-library Git origin and revision directly at
|
|
||||||
`dnd_pipeline_prompt_library_root`.
|
|
||||||
6. For both `ansible.builtin.git` tasks, set `repo`, `dest`, and `version` from
|
|
||||||
the corresponding public variables and set `update: true` and
|
|
||||||
`force: true`. Apply `become: true` to all three tasks.
|
|
||||||
7. Do not duplicate the campaign-root directory declaration already owned by
|
|
||||||
the Narratio dependency. Do not register task results, add `when`
|
|
||||||
conditions, run handlers or commands, normalize repository contents
|
|
||||||
recursively, purge untracked files, or validate content during production
|
|
||||||
convergence.
|
|
||||||
8. Update the README to document automatic campaign and prompt-library
|
|
||||||
deployment, all six asset variables and defaults, branch-following and
|
|
||||||
immutable-commit selection, the direct installed layouts, Narratio and
|
|
||||||
Scriptorium path wiring, and the remaining profile/backend/credential and
|
|
||||||
D&D-policy deferrals.
|
|
||||||
9. Clarify that callers disabling common dependency management must provide
|
|
||||||
both Git and Go. Remove Feature 0006 language claiming campaign and prompt
|
|
||||||
content are deferred, but do not document unimplemented operators, secrets,
|
|
||||||
removal, profiles, or end-to-end processing.
|
|
||||||
|
|
||||||
### Validation
|
|
||||||
|
|
||||||
From `ansible-role-dnd-pipeline`, run:
|
|
||||||
|
|
||||||
```text
|
|
||||||
../.venv/bin/ansible-playbook -i tests/inventory --syntax-check tests/converge.yml
|
|
||||||
../.venv/bin/ansible-lint --offline --profile production tests/converge.yml
|
|
||||||
git diff --check
|
|
||||||
git status --short
|
|
||||||
```
|
|
||||||
|
|
||||||
Expected result: Ansible accepts the expanded public interface, dependency
|
|
||||||
wiring, and three-task production role; production-profile lint passes; and
|
|
||||||
only intended defaults, metadata, task, and README files are modified. Full
|
|
||||||
asset convergence is deferred to Stage 4's controlled integration inputs.
|
|
||||||
|
|
||||||
### Completion Criteria
|
|
||||||
|
|
||||||
- Defaults and argument specifications expose exactly the six selected asset
|
|
||||||
inputs in addition to the existing Feature 0006 interface.
|
|
||||||
- Narratio receives the same campaign root the Git task populates.
|
|
||||||
- Scriptorium receives the deployed `prompts/` and `schemas/` children and no
|
|
||||||
profile directory.
|
|
||||||
- Production convergence consists of one direct directory declaration and two
|
|
||||||
direct Git declarations, all with task-level privilege escalation.
|
|
||||||
- README documentation matches the implemented asset contract and remaining
|
|
||||||
deferrals.
|
|
||||||
- Syntax, lint, and whitespace checks pass without test-specific production
|
|
||||||
logic.
|
|
||||||
|
|
||||||
### Commit
|
|
||||||
|
|
||||||
Commit intent: `Deploy D&D pipeline assets`
|
|
||||||
|
|
||||||
## Stage 4: Add Focused Asset Integration Coverage
|
|
||||||
|
|
||||||
### Objective
|
|
||||||
|
|
||||||
Demonstrate that the real pipeline role deploys controlled campaign and prompt
|
|
||||||
repositories, connects them to the native applications, and coalesces cleanly
|
|
||||||
without testing trusted module internals or freezing mutable defaults.
|
|
||||||
|
|
||||||
### Required Policy Review
|
|
||||||
|
|
||||||
Before beginning this stage, read:
|
|
||||||
|
|
||||||
- `AGENTS.md`
|
|
||||||
- `docs/orientation.md`
|
|
||||||
- `docs/conventions.md`
|
|
||||||
- `docs/ansible.md`
|
|
||||||
- `docs/testing.md`
|
|
||||||
|
|
||||||
### Preconditions
|
|
||||||
|
|
||||||
- Stage 1 through Stage 3 are committed, and all three owning repositories are
|
|
||||||
otherwise clean.
|
|
||||||
- Stage 3 static validation passes.
|
|
||||||
- The Stage 1 campaign commit and Stage 2 prompt commit are available from the
|
|
||||||
local Git repositories.
|
|
||||||
- The existing integration driver still bootstraps exact application-role and
|
|
||||||
collection dependencies into private temporary paths, exercises the
|
|
||||||
Feature 0006 baseline and explicit Seriatim selection, and restores the
|
|
||||||
baseline suite during cleanup.
|
|
||||||
- No test requires network access to the two default content origins. Network
|
|
||||||
access needed by the existing application-role dependency and source-build
|
|
||||||
flow remains unchanged.
|
|
||||||
|
|
||||||
### Owning Repository
|
|
||||||
|
|
||||||
`ansible-role-dnd-pipeline`
|
|
||||||
|
|
||||||
### Required Changes
|
|
||||||
|
|
||||||
1. Extend the existing `tests/integration` entry point rather than adding a
|
|
||||||
new framework or scenario tree.
|
|
||||||
2. Resolve the absolute local paths of `../assets/campaigns` and
|
|
||||||
`../assets/narratio-prompts` relative to the pipeline repository. Resolve
|
|
||||||
each repository's current commit with read-only Git commands.
|
|
||||||
3. Add explicit baseline extra variables selecting those two local Git origins
|
|
||||||
with `file://` URLs and their resolved immutable commits. Reuse the same
|
|
||||||
explicit asset inputs for every convergence and cleanup invocation.
|
|
||||||
Continue to supply the test WhisperX URL.
|
|
||||||
4. Do not assert that either selected commit or `main` is the role's current
|
|
||||||
default. The explicit revisions are controlled test inputs, not snapshots
|
|
||||||
of suite policy.
|
|
||||||
5. After baseline convergence, use Narratio's native configuration validator
|
|
||||||
as the `narratio` account with the managed pipeline configuration and a
|
|
||||||
campaign ID present in the deployed campaign registry, such as `centaurs`.
|
|
||||||
Replace the less specific campaign-free validation where redundant.
|
|
||||||
6. Use Scriptorium's native `inspect prompt` interface with its managed
|
|
||||||
configuration to load a deployed prompt whose repaired shared content is
|
|
||||||
required, such as `dnd.session_recap` version `2.0.0`.
|
|
||||||
7. Inspect one deployed JSON-schema prompt through Scriptorium and verify that
|
|
||||||
the schema path reported by that native definition resolves beneath the
|
|
||||||
configured deployed schema directory. This is an integration assertion
|
|
||||||
about the prompt-library contract; do not inspect Git metadata or duplicate
|
|
||||||
the Git task's file and ownership arguments.
|
|
||||||
8. Immediately reapply the identical asset-enabled baseline and require the
|
|
||||||
aggregate recap to report `changed=0` and `failed=0`.
|
|
||||||
9. Retain the explicit Seriatim `v1.4.0` forwarding case and its immediate
|
|
||||||
clean repeat. Include the same controlled asset inputs so version coverage
|
|
||||||
does not switch content sources or fetch mutable asset branches.
|
|
||||||
10. Ensure best-effort cleanup reapplies the asset-enabled baseline and removes
|
|
||||||
only the integration driver's private temporary directory. Do not delete
|
|
||||||
the managed campaign or prompt roots, source trees, binaries, runtime
|
|
||||||
areas, or any caller content.
|
|
||||||
11. Update the README validation description only as needed to describe native
|
|
||||||
campaign resolution, deployed prompt/schema discovery, controlled local
|
|
||||||
asset inputs, clean repetition, and the retained version-forwarding case.
|
|
||||||
12. Do not add assertions for file ownership, modes, directory existence,
|
|
||||||
checkout revisions, remote update mechanics, task order, task results,
|
|
||||||
exact current defaults, every campaign, or every prompt. Do not run a real
|
|
||||||
backend, WhisperX request, or transcript workflow.
|
|
||||||
|
|
||||||
### Validation
|
|
||||||
|
|
||||||
From `ansible-role-dnd-pipeline`, run:
|
|
||||||
|
|
||||||
```text
|
|
||||||
bash -n tests/integration
|
|
||||||
tests/integration
|
|
||||||
git diff --check
|
|
||||||
git status --short
|
|
||||||
```
|
|
||||||
|
|
||||||
Expected result: fresh dependency bootstrap, syntax checking, and
|
|
||||||
production-profile lint pass; controlled local asset revisions deploy through
|
|
||||||
the real role; Narratio validates a campaign selected from the deployed
|
|
||||||
registry; Scriptorium loads the repaired prompt and resolves a deployed schema;
|
|
||||||
the baseline and explicit-version repeats both report `changed=0` and
|
|
||||||
`failed=0`; cleanup restores the asset-enabled compatible baseline; and only
|
|
||||||
the intended integration-driver and README changes are present.
|
|
||||||
|
|
||||||
### Completion Criteria
|
|
||||||
|
|
||||||
- The integration suite uses explicit local Git origins and immutable
|
|
||||||
revisions without freezing the role's mutable defaults.
|
|
||||||
- Narratio proves campaign discovery through its native validator.
|
|
||||||
- Scriptorium proves prompt discovery through its managed configuration and a
|
|
||||||
representative deployed schema resolves under the configured schema root.
|
|
||||||
- Immediate repeated convergence is clean with the asset layer enabled.
|
|
||||||
- Existing application-composition and version-forwarding behavior remains
|
|
||||||
covered and successful.
|
|
||||||
- No trusted-module tests, task-trace assertions, broad asset snapshots, or
|
|
||||||
unrelated test matrices are added.
|
|
||||||
|
|
||||||
### Commit
|
|
||||||
|
|
||||||
Commit intent: `Add focused asset integration coverage`
|
|
||||||
|
|
||||||
## Final Validation and Handoff
|
|
||||||
|
|
||||||
After Stage 4, run:
|
|
||||||
|
|
||||||
```text
|
|
||||||
cd assets/campaigns
|
|
||||||
git log --oneline -1
|
|
||||||
git status --short --branch
|
|
||||||
cd ../narratio-prompts
|
|
||||||
/usr/local/bin/scriptorium inspect prompt --prompt-dir "$PWD/prompts" --prompt dnd.session_recap --prompt-version 2.0.0 --format json
|
|
||||||
git log --oneline -1
|
|
||||||
git status --short --branch
|
|
||||||
cd ../../ansible-role-dnd-pipeline
|
|
||||||
tests/integration
|
|
||||||
git log --oneline -2
|
|
||||||
git status --short --branch
|
|
||||||
cd ..
|
|
||||||
./scripts/status
|
|
||||||
```
|
|
||||||
|
|
||||||
Report the Stage 1 campaign commit, Stage 2 prompt commit, and Stage 3 and
|
|
||||||
Stage 4 pipeline-role commits; native prompt and campaign validation;
|
|
||||||
schema-resolution evidence; both clean-repeat results; cleanup outcome; and
|
|
||||||
every repository's working-tree state. Identify any deviation, unresolved
|
|
||||||
concern, or complexity beyond the planned three-task production flow and the
|
|
||||||
acceptance criterion that required it.
|
|
||||||
|
|
||||||
Do not edit workspace planning files, mark Feature 0007 `done`, modify
|
|
||||||
standalone roles, or push during out-of-band implementation. Both asset
|
|
||||||
commits must eventually be pushed before a default remote deployment can
|
|
||||||
consume them, but pushing and feature completion remain post-review actions.
|
|
||||||
|
|
||||||
## Progress Notes
|
|
||||||
|
|
||||||
- [x] Stage 1 complete — `assets/campaigns` commit `d1193e8`; both campaign
|
|
||||||
IDs passed native Narratio validation. No deviations.
|
|
||||||
- [x] Stage 2 complete — `assets/narratio-prompts` commit `c7e1845`; repaired
|
|
||||||
prompts passed native Scriptorium inspection and schema resolution. No deviations.
|
|
||||||
- [x] Stage 3 complete — `ansible-role-dnd-pipeline` commit `a6ce224`; syntax,
|
|
||||||
production lint, and whitespace validation passed. No deviations.
|
|
||||||
- [x] Stage 4 complete — `ansible-role-dnd-pipeline` commit `cbfd601`; full
|
|
||||||
asset-enabled integration coverage passed. No deviations.
|
|
||||||
|
|||||||
@@ -1,119 +1,111 @@
|
|||||||
# Feature 0006 Remediation Review
|
# Feature 0007 Remediation Review
|
||||||
|
|
||||||
Status: resolved
|
Status: resolved
|
||||||
|
|
||||||
Reviewed implementation commits:
|
Reviewed implementation commits:
|
||||||
|
|
||||||
- `b515968 Compose the D&D pipeline roles`
|
- `d1193e8 Align campaign definitions with Narratio`
|
||||||
- `61869d1 Add focused pipeline composition coverage`
|
- `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
|
## Finding 1: Make the Prompt-Library Root an Explicit Test Input
|
||||||
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
|
|
||||||
|
|
||||||
Severity: low
|
Severity: low
|
||||||
|
|
||||||
`ansible-role-dnd-pipeline/README.md` still ends with the original placeholder
|
`ansible-role-dnd-pipeline/tests/integration` uses the role's default prompt
|
||||||
sentence claiming that the role installs the full production pipeline “plus
|
root implicitly, then duplicates that current default inside the schema check:
|
||||||
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.
|
|
||||||
|
|
||||||
The supported-platform summary also names Ubuntu 26.04 without recording the
|
```python
|
||||||
roadmap's `amd64` and `arm64` boundary.
|
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
|
### Required Remediation
|
||||||
|
|
||||||
- Remove the retained placeholder sentence.
|
- Define the prompt-library root once as an integration-owned shell value.
|
||||||
- State the supported `amd64` and `arm64` architectures in the rewritten
|
- Pass that value explicitly as
|
||||||
platform summary.
|
`dnd_pipeline_prompt_library_root` in `baseline_args`, alongside the
|
||||||
- Make no broader README expansion; the existing dependency, interface,
|
explicit repository origin and revision.
|
||||||
deferral, and validation documentation is otherwise aligned.
|
- 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
|
## Resolution
|
||||||
supported `amd64` and `arm64` architectures without expanding the role's
|
|
||||||
claimed scope.
|
|
||||||
|
|
||||||
## 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
|
## Validation
|
||||||
|
|
||||||
`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
|
|
||||||
|
|
||||||
From `ansible-role-dnd-pipeline`, run:
|
From `ansible-role-dnd-pipeline`, run:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
bash -n tests/integration
|
||||||
tests/integration
|
tests/integration
|
||||||
git diff --check
|
git diff --check
|
||||||
git status --short --branch
|
git status --short --branch
|
||||||
```
|
```
|
||||||
|
|
||||||
Expected result: dependency bootstrap, syntax checking, production lint,
|
Expected result: the controlled prompt root is explicitly supplied to the
|
||||||
baseline native checks, Narratio configuration validation, both immediate
|
role and reused by the deployed-schema check; fresh dependency bootstrap,
|
||||||
clean repeats, the explicit Seriatim `v1.4.0` outcome, and baseline cleanup all
|
syntax checking, production lint, native asset validation, both clean repeats,
|
||||||
pass. The role repository contains only the intended remediation changes.
|
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
|
## Review Validation Evidence
|
||||||
|
|
||||||
During review, `tests/integration` completed successfully. It installed
|
During review, `ansible-role-dnd-pipeline/tests/integration` completed
|
||||||
`community.general` 13.3.0 and all five exact Git role revisions into private
|
successfully. It installed the pinned application roles and collection into
|
||||||
temporary paths, passed syntax checking and production-profile ansible-lint,
|
fresh private paths, passed syntax checking and production-profile lint,
|
||||||
validated the assembled applications through their native interfaces, and
|
validated the `centaurs` campaign through Narratio, inspected deployed prompts
|
||||||
reported `changed=0` and `failed=0` on both required immediate repeats. The
|
and a deployed schema through Scriptorium, and reported `changed=0` and
|
||||||
cleanup trap restored the baseline Seriatim `v1.5.0` deployment. `git diff
|
`failed=0` on both required immediate repeats. Cleanup restored Seriatim
|
||||||
--check` also passed before this review record was written.
|
`v1.5.0` and the asset-enabled baseline.
|
||||||
|
|
||||||
After remediation, `bash -n tests/integration`, `git diff --check`, and the
|
Direct review also validated both `centaurs` and `dilfs` by campaign ID through
|
||||||
complete `tests/integration` entry point passed again. The rerun installed the
|
Narratio and successfully inspected all four prompt definitions affected by
|
||||||
exact pinned dependencies into fresh private paths, passed syntax and
|
the source corrections. `bash -n`, `git diff --check`, and repository status
|
||||||
production-profile lint, completed all native checks, reported `changed=0` and
|
checks passed. No production-role or asset-content findings remain.
|
||||||
`failed=0` on both required repeats, and restored the baseline suite. No
|
|
||||||
Feature 0006 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.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Last updated: 2026-09-10
|
|||||||
|
|
||||||
Current milestone: M1-03 suite-level pipeline role
|
Current milestone: M1-03 suite-level pipeline role
|
||||||
|
|
||||||
Current focus: Execute the staged Feature 0007 implementation plan.
|
Current focus: Select the next unit of work.
|
||||||
|
|
||||||
| ID | Deliverable | Owner | State | Evidence or next step |
|
| ID | Deliverable | Owner | State | Evidence or next step |
|
||||||
| --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- |
|
||||||
@@ -15,7 +15,7 @@ Current focus: Execute the staged Feature 0007 implementation plan.
|
|||||||
| M0-05 | Suite-level role repository | ansible-role-dnd-pipeline | done | Repository created and added to `workspace.yml` |
|
| M0-05 | Suite-level role repository | ansible-role-dnd-pipeline | done | Repository created and added to `workspace.yml` |
|
||||||
| M1-01 | Remaining MVP design decisions | workspace | done | Feature 0003 roadmap fixes the Notarius configuration interface |
|
| M1-01 | Remaining MVP design decisions | workspace | done | Feature 0003 roadmap fixes the Notarius configuration interface |
|
||||||
| M1-02 | Standalone application roles | role repositories | done | All five standalone roles implemented and independently reviewed |
|
| M1-02 | Standalone application roles | role repositories | done | All five standalone roles implemented and independently reviewed |
|
||||||
| M1-03 | Suite-level pipeline role | ansible-role-dnd-pipeline | in_progress | Feature 0007 proposes campaign and prompt-library deployment |
|
| M1-03 | Suite-level pipeline role | ansible-role-dnd-pipeline | in_progress | Feature 0007 is complete; select the next suite-policy feature |
|
||||||
| M1-04 | Collection assembly | ansible-collection-dnd | proposed | Select and implement the pipeline-role incorporation mechanism |
|
| M1-04 | Collection assembly | ansible-collection-dnd | proposed | Select and implement the pipeline-role incorporation mechanism |
|
||||||
| F0001 | Install Seriatim from pinned source | ansible-role-seriatim | done | Implementation, integration coverage, and final remediation completed through `fb8dc41` |
|
| F0001 | Install Seriatim from pinned source | ansible-role-seriatim | done | Implementation, integration coverage, and final remediation completed through `fb8dc41` |
|
||||||
| F0002 | Install and configure Audita | ansible-role-audita | done | Field-specific configuration completed in `e61f02f` and `847c4c3`; full suite passed |
|
| F0002 | Install and configure Audita | ansible-role-audita | done | Field-specific configuration completed in `e61f02f` and `847c4c3`; full suite passed |
|
||||||
@@ -23,7 +23,7 @@ Current focus: Execute the staged Feature 0007 implementation plan.
|
|||||||
| F0004 | Install and configure Scriptorium | ansible-role-scriptorium | done | Implemented and validated through remediation commit `8f47aa8` |
|
| F0004 | Install and configure Scriptorium | ansible-role-scriptorium | done | Implemented and validated through remediation commit `8f47aa8` |
|
||||||
| F0005 | Install and configure Narratio | ansible-role-narratio | done | Implemented and validated through remediation commit `7feff47` |
|
| F0005 | Install and configure Narratio | ansible-role-narratio | done | Implemented and validated through remediation commit `7feff47` |
|
||||||
| F0006 | Establish pipeline-role composition | ansible-role-dnd-pipeline | done | Implemented and validated through remediation commit `4ea4358` |
|
| F0006 | Establish pipeline-role composition | ansible-role-dnd-pipeline | done | Implemented and validated through remediation commit `4ea4358` |
|
||||||
| F0007 | Deploy D&D campaigns and prompt assets | ansible-role-dnd-pipeline, campaigns, and narratio-prompts | ready | Execute `docs/roadmap/implementation.md` in stage order |
|
| F0007 | Deploy D&D campaigns and prompt assets | ansible-role-dnd-pipeline, campaigns, and narratio-prompts | done | Implemented and validated through remediation commit `7572fa3` |
|
||||||
| A0001 | Audit completed standalone-role test suites | workspace and standalone roles | done | Findings recorded in `docs/roadmap/test-suite-audit-findings.md` |
|
| A0001 | Audit completed standalone-role test suites | workspace and standalone roles | done | Findings recorded in `docs/roadmap/test-suite-audit-findings.md` |
|
||||||
| R0001 | Simplify completed standalone-role test suites | workspace and standalone roles | done | Role commits `e08c63c`, `d2d0b9d`, and `cfecf37` passed implementation and independent review |
|
| R0001 | Simplify completed standalone-role test suites | workspace and standalone roles | done | Role commits `e08c63c`, `d2d0b9d`, and `cfecf37` passed implementation and independent review |
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user