test(dtu): runnable seam-validation profiles + repo conventions & testing discipline#69
Merged
Merged
Conversation
Adds the two always-loaded per-repo convention files the repo was missing. Both encode this repo's REAL gates (not boilerplate): scripts/validate-full.sh full validation, the seam-awareness / real-E2E discipline, and the documented mode false positive. New contributors/agents inherit the house rules AGENTS.md already carries. Docs-only; full bundle validation (scripts/validate-full.sh) stays PASS in validation_mode: full (convention files are not bundle-structural). 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
…idence required Aligns AGENTS.md with the per-repo-convention that it must carry the test commands that gate "done" and what "done" looks like. Adds the unit/lint/type + full-validation commands, and makes explicit that green unit tests are the FLOOR, not proof: any change that crosses a seam — the client↔server boundary, networking, auth, or ANY agent / skill / mode / tool / hook / config edit — requires a real DTU run plus the evaluation harness (.amplifier/digital-twin-universe/profiles/ + the eval-design / evaluation-methodology skills), with captured end-to-end evidence of working order. A seam crossed on a green mock is not done until reconciled to real behaviour. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
…ode-activation profile - Rename DTU profiles to drop the ambiguous `ci-` prefix (could read as "continuous integration"): ci-bundle-smoke-test → context-intelligence-bundle-smoke-test, ci-signals-validation → context-intelligence-signals-validation (git mv, history preserved; internal name:/--name/usage comments and the AGENTS.md references updated). - Add context-intelligence-mode-activation-validation.yaml: a single-purpose DTU test proving explicit /context-intelligence activation mounts the FULL mode-gated surface — both contributes.agents specialists resolve, all THREE contributes.context files inject (closing the previously un-asserted context-intelligence-strategy.md), all THREE skills become discoverable (closing the un-asserted evaluation-methodology skill), and the mode tool policies take effect — with a clean off→on→off round-trip and an explicit /context-intelligence slash-command activation scenario. Baseline agents stay present. All 6 profiles parse as valid YAML. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
…or e2e Documents the DTU profile suite for this bundle: what each profile really tests, its prerequisites, and its launch command; and — per the AGENTS.md seam/real-evidence rule — how to stand up and use a Context-Intelligence server for read-side end-to-end tests (external host server via example-dtu-external-server.yaml, or a Docker sidecar inside the DTU via docker-in-incus), the AMPLIFIER_CONTEXT_INTELLIGENCE_* env wiring, the log→query→assert flow, and the read-side (server_url, api_key) resolution chain. Records working-order status: prereqs present (amplifier-digital-twin 0.3.0, Incus 7.2, Docker), all profiles valid YAML with valid references. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
Launched context-intelligence-signals-validation.yaml (Incus, no external deps): readiness "all checks passed", signals symbols import, all 12 fixtures scored with 0 failures; instance then destroyed. Confirms the DTU pipeline (provision → install → run → assert) is healthy on a standard host — real evidence, not static validity. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
…endencies DTU structural/behavioural verification loads the bundle through the Amplifier CLI (`amplifier bundle add` → activate `/context-intelligence` → drive a real session), NOT by running pytest artefacts in a container (that is a unit test in a different directory, not end-to-end). Documents the extra dev dependencies this requires — amplifier-digital-twin CLI, Incus, Docker, Gitea (to serve the local branch so the install resolves to our code), and a real LLM key for behavioural scenarios — with concrete install pointers and per-profile needs, in the DTU profiles README, and adds an end-to-end/DTU section to CONTRIBUTING.md pointing devs to it. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
…d, real run)
The three mode profiles used a declarative profile:/install:/assertions:/scenarios:
schema that amplifier-digital-twin cannot execute ("Error: Profile must specify
base.image") and that nothing in the repo interprets — i.e. specs, not tests.
Rewrite all three into the real runnable schema (base.image + provision +
readiness): provision installs the bundle via `amplifier bundle add
...#subdirectory=behaviors/context-intelligence.yaml --app` resolved to a Gitea
mirror of this branch (via `git insteadOf`, gated on --var gitea_host), and the
deterministic structural proofs live in `readiness` (which amplifier-digital-twin
actually runs and gates on launch):
- amplifier usable; bundle loaded from the MIRROR (branch snapshot, not main);
- `bundle show` lists the 2 baseline agents with the 2 mode-gated specialists
absent while the mode is off (contributes.agents gating holds);
- installed mirror mode file declares the full gated surface (advertised:false,
default_action:block, 3 contributes.context incl. strategy.md, 3 skills incl.
evaluation-methodology, tool policies).
Verified for real: all three launched against the live mirror and reached
readiness ready:True. The behavioural off→on→off activation round-trip
(/mode context-intelligence → [context-intelligence]> → /mode off) was proven in a
real Anthropic PTY session and is documented as a reproducible manual exec step.
README updated to describe the runnable-schema gating and to state honestly that the
runtime-mounted-set enumeration is not CLI-introspectable in this Amplifier version
(the mode does not emit mode:transition_completed to events.jsonl) — the profiles
prove the gated surface via declared-contributes + inactive-baseline gating + the
activation round-trip, not a runtime mount-list dump.
🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier)
Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
… + fix AGENTS.md list Council/rob review of #69 (unanimous CONCERN, not FAIL): mechanism sound, one cheap fix — the README's pasted proof covered only signals-validation (a rename-only file), not the three mode profiles the PR is actually about; per this PR's own "never pre-check a box you can't back" rule, that claim needed backing. - README working-order: paste the real captured evidence for redesigned-mode, contributes-migration, and mode-activation — each launched against the live Gitea mirror (HEAD 50a3bd5) and reached readiness ready:True (amplifier usable; bundle loaded via `amplifier bundle add` from the mirror; baseline agents present with specialists gated off; full gated surface declared); behavioural /mode round-trip confirmed in a real Anthropic session. Framed honestly as manual-run-captured, not yet CI-enforced. - AGENTS.md: fix the DTU example-profile list (was missing contributes-migration and mode-activation), reconciling the policy text with the artifacts it justifies. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
…t, query) — proven live Adds three runnable (base+provision+readiness) DTU profiles for the seams that need a real Context-Intelligence server, each loading the bundle via `amplifier bundle add` from the Gitea mirror and driving a real Amplifier session: - write-server-validation: a real session's events reach ONE destination server (proven: /status events_processed:22, Cypher count 29 tagged by workspace). - write-fanout-validation: one session, two destinations -> BOTH servers received the events (A and B each: 22 processed / 29 nodes; B held only the fanout session). Observes the existing hook fan-out; the hook code is never modified. - query-validation: after logging, the graph-analyst agent's graph_query returns real rows and blob_read resolves a real ci-blob:// URI (44 KB), each carrying the `source` provenance block naming the answering server. Proven live against real CI server stacks (docker compose from microsoft/amplifier-context-intelligence, Neo4j-backed); instances + stacks then destroyed. README inventory + working-order status updated with the evidence and two honest findings: (1) the project settings.yaml destinations override is a no-op on the current amplifier-foundation build (tools/config overrides reserved for v1.1), so the fanout profile injects destinations into the loaded hook config directly; (2) graph_query/blob_read are not top-level tools — the shipped read path is the context-intelligence:graph-analyst agent, which the query profile drives. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
…est field name) amplifier-digital-twin never executes `validation_cmds` — it is an unknown field the launcher silently ignores (only base/provision/readiness run). The name implied automated execution the runner does not provide. Renamed to manual_validation_steps across all 8 profiles that carried it (+ the 2 stale references in the profiles README), so the field reads as what it is: documented steps a human runs via `amplifier-digital-twin exec <id> -- …`. Command bodies preserved verbatim; readiness gates untouched; all YAML still parses. (Council-flagged; machete pass.) 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
…onfiguration)
The earlier "destinations override is a no-op / reserved for v1.1" note was wrong: the
repro used a bare list of destinations instead of the bundle README's named-map format
(overrides.hook-context-intelligence.config.destinations keyed by name, api_key via
${VAR} from ~/.amplifier/keys.env), and conflated the app-cli settings.yaml override
(documented + working) with the foundation configurator's unrelated "reserved for v1.1"
comment. Corrected the README working-order note accordingly; the fan-out profile's
direct-injection is flagged as a test workaround to redo with the correct config +
re-verify, not evidence of a framework limitation. Support issue closed as invalid.
🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier)
Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
…e-verify
Replace the direct-hook-config-injection workaround in the write-server and write-fanout
profiles with the documented user path: `~/.amplifier/settings.yaml`
overrides.hook-context-intelligence.config.destinations as a NAMED MAP (keyed by
destination name), each api_key a ${VAR} from `~/.amplifier/keys.env` — exactly as the
bundle README specifies. patch_destinations.py removed from both.
Re-verified live against fresh isolated CI server stacks (docker compose), through the
documented config only: single-server -> server A received the session (events_processed:22),
server B received nothing; fan-out -> one session, two named destinations -> BOTH servers
independently received it (each events_processed:22, same workspace). Also fixed a readiness
gate that used a folded YAML scalar (collapsed a heredoc -> exit 2); now literal-block, 5/5
ready:True on relaunch.
Root cause of the earlier "no-op" (support issue closed as invalid): it used a project-scope
.amplifier/settings.yaml (routes through the foundation configurator overlay, not yet applied
for hook/tool config) AND a bare-list destinations shape. The user-level ~/.amplifier/settings.yaml
named-map is the implemented, working path (app-cli get_config_overrides). README evidence updated.
🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier)
Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
colombod
added a commit
that referenced
this pull request
Jul 13, 2026
… + fix AGENTS.md list Council/rob review of #69 (unanimous CONCERN, not FAIL): mechanism sound, one cheap fix — the README's pasted proof covered only signals-validation (a rename-only file), not the three mode profiles the PR is actually about; per this PR's own "never pre-check a box you can't back" rule, that claim needed backing. - README working-order: paste the real captured evidence for redesigned-mode, contributes-migration, and mode-activation — each launched against the live Gitea mirror (HEAD 50a3bd5) and reached readiness ready:True (amplifier usable; bundle loaded via `amplifier bundle add` from the mirror; baseline agents present with specialists gated off; full gated surface declared); behavioural /mode round-trip confirmed in a real Anthropic session. Framed honestly as manual-run-captured, not yet CI-enforced. - AGENTS.md: fix the DTU example-profile list (was missing contributes-migration and mode-activation), reconciling the policy text with the artifacts it justifies. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Establishes this repo's contribution + end-to-end test discipline: the missing "always-loaded"
convention files, an
AGENTS.mdrule that mandates real evidence for seam changes, and a set ofgenuinely runnable Digital Twin Universe (DTU) profiles that prove the bundle's behaviour
through the Amplifier CLI — mode gating, and the server-backed read/write seams — each captured
against a live environment, not merely asserted.
Scope is docs + DTU test-infra only — no product code, no bundle-structure changes. Independent
of the read-side multi-source work (PR #68 / #67).
What's in it
Repo conventions
.github/PULL_REQUEST_TEMPLATE.md— a verification checklist grounded in this repo's real gates:module + top-level tests,
ruff/pyright,scripts/validate-full.sh→ full PASS, real evidenceon any seam crossed (not mock-only), diagram regen, and the documented mode false-positive.
CONTRIBUTING.md— layout, branch/commit conventions,uvdev setup, the test gates, and theDTU/Gitea dev dependencies (with install pointers).
AGENTS.md— a "Testing & what 'done' looks like" section: green unit tests are the floor, notproof; any seam crossing (client↔server, networking, auth, or any agent/skill/mode/tool/hook/config
edit) requires a real DTU run + captured evidence.
DTU profiles README (new) — the profile inventory (what each really tests), the CLI-load
principle (structural and behavioural checks load the bundle via
amplifier bundle add, notpytest artefacts), the DTU + Gitea dev dependencies with install pointers, and how to stand up a
Context-Intelligence server for e2e.
Runnable seam-validation profiles — every profile uses the real
amplifier-digital-twinschema(
base+provision+readiness), loads the bundle viaamplifier bundle add(Gitea-mirrorredirected for local-branch testing), and was proven live:
signals-validationbundle-smoke-testevents.jsonlredesigned-mode,contributes-migration,mode-activationreadiness ready:True; bundle loaded from the mirror; baseline agents present + specialists gated off;/mode context-intelligenceoff→on→off in a real Anthropic sessionwrite-server-validationevents_processed:22); the other received nothingwrite-fanout-validationquery-validationgraph_queryreal rows +blob_readreal content, each carrying thesourceprovenance naming the answering serverThe write/query profiles configure destinations the documented way — a named map under
overrides.hook-context-intelligence.config.destinationsin~/.amplifier/settings.yaml, with eachapi_keya${VAR}from~/.amplifier/keys.env— and stand up a real Context-Intelligence server(Neo4j-backed) via
docker compose.Housekeeping
ci-*profiles →context-intelligence-*(git history preserved) to drop the ambiguousci-prefix.validation_cmds:field →manual_validation_steps:—amplifier-digital-twinnever executes it (only
base/provision/readinessrun); the new name tells the truth (docs, not a gate).Verification
scripts/validate-full.sh→validation_mode: full, overall PASS (convention files + DTUprofiles are not bundle-structural; the sole ERROR remains the documented mode name-collision
false positive).
evidence claim, was closed by pasting the real run evidence).
Honest limitations (disclosed, not papered over)
version (the mode does not emit
mode:transition_completed); the mode profiles prove the gatedsurface via declared-contributes + inactive-baseline gating + the activation round-trip, not a
runtime mount enumeration.
graph_query/blob_readare not top-level tools in a plain session — the shipped read path isthe
context-intelligence:graph-analystagent, which the query profile drives.