Stress-test the active CIO house view against fresh Parallax macro data and internal consistency. Emits a per-run report and a hash-chained audit entry. Optionally hands off to /parallax-load-house-view --edit to incorporate updates. NOT for portfolio construction (use /parallax-portfolio-builder), not for one-off scenario reactions (use /parallax-scenario-analysis).
Scanned 9/11/2026
Install to Claude Code
npx -y skills add bencharoenwong/parallax-workflows --skill parallax-stress-house-view --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Parallax Stress House View?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/bencharoenwong-parallax-stress-house-view)More formats (shields.io, HTML) on the badges page.
---
name: parallax-stress-house-view
description: "Stress-test the active CIO house view against fresh Parallax macro data and internal consistency. Emits a per-run report and a hash-chained audit entry. Optionally hands off to /parallax-load-house-view --edit to incorporate updates. NOT for portfolio construction (use /parallax-portfolio-builder), not for one-off scenario reactions (use /parallax-scenario-analysis)."
---
# Stress-Test Active House View
## When not to use
- Building a portfolio from a thesis → use /parallax-portfolio-builder
- Reacting to a one-off scenario (e.g. rate hike) → use /parallax-scenario-analysis
- Loading or editing a house view → use /parallax-load-house-view
## Gotchas
- This skill is read-only against the active house view. It never modifies the view directly.
- The --edit handoff to /parallax-load-house-view is a separate confirmation gate.
- JIT-load `_parallax/house-view/stress-test-design.md` for the 6 stress-test principles.
- JIT-load `_parallax/house-view/schema.yaml` for view structure.
- JIT-load `_parallax/house-view/loader.md` for audit log schema.
- JIT-load `_parallax/parallax-conventions.md` for MCP tool conventions.
- Every host interaction is a host primitive from `parallax-conventions.md` §14 (bindings §14.2, fail-open §14.3). The final CIO gate needs `ask-operator`; without it, render the summary in prose and stop at the four choices.
- The saved report and `stress.py` use the design doc's phase names (`Phase 0`–`Phase 4`, `Phase 4-B`); this file cites them as identifiers under the spine headings.
This skill compares the active CIO house view against fresh Parallax macro data and internal consistency rules. It produces a structured, CIO-facing report that classifies every divergence and surfaces key decision points.
## Workflow
Report-producer shape: the spine headings below. The four phases in `skills/_parallax/house-view/stress-test-design.md` are cited as identifiers because `stress.py`, `render.py`, and the saved report use them. There is no render-gate script: `render.render_artifact` writes the deterministic artifact.
### Step 0 — Pre-flight
1. Resolve every `_parallax/...` path named in this file to the canonical copy (conventions §0.0 item 1).
2. `load-reference` `_parallax/house-view/stress-test-design.md`, `_parallax/house-view/schema.yaml`, `_parallax/house-view/loader.md`, `_parallax/parallax-conventions.md`.
3. `discover-tools`: bind `list_macro_countries`, `check_macro_health`, `get_telemetry`, `macro_analyst` to the exact callables and schemas exposed now (conventions §0.0–§0.1).
<!-- host-note -->
Claude Code: `ToolSearch` with query `"+Parallax"` once before the first Parallax call; `ask-operator` = `AskUserQuestion`; `run-shell` = `Bash`.
<!-- /host-note -->
4. Bind `run-shell` (`stress.py`, `render.py`), `ask-operator` (fan-out cap choice, final CIO gate), `read-config` (`$PARALLAX_HOUSE_VIEW_DIR`, else `~/.parallax/active-house-view/`).
### Step 1 — Resolve inputs (design Phase 0 and Phase 1)
1. **Load active view** — `run-shell` `stress.load_active_view()` from `skills/parallax-stress-house-view/stress.py`. It reads `view.yaml`, verifies the `audit.jsonl` hash chain, and computes the initial `view_hash`. No active view or a broken chain: exit with the clear message.
2. **Enumerate dimensions** — `stress.enumerate_dimensions()` lists every non-zero tilt; this fixes the markets and dimensions to check. Announce the scope: "Loaded view '<view_name>', age <N>d, <M> non-zero dimensions, <K> markets to query."
3. **Internal consistency (no MCP)** — `stress.evaluate_internal_rules()` runs the pure-Python checks in `skills/parallax-stress-house-view/internal_rules.yaml`. Any `hard_stop` rule: halt, render the internal consistency report, append a `halted_internal` entry via `stress.append_stress_audit()`. Only `taste` rules or none: announce "Internal consistency checks passed." and continue.
### Step 2 — Fetch (parallel batches)
1. **Market fan-out cap** — `stress.enforce_fanout_cap()` on the tilted markets from Step 1. Over the cap (12): `ask-operator` with the three choices from the design doc (stress all in batches, top-12, or cancel).
2. **Batch** — `call-tool` `list_macro_countries` once (the `covered_markets` set for Step 3), `check_macro_health` once globally, and per market together: `get_telemetry` and `macro_analyst` (summary). A view with macro tilts but no region tilts falls back to the primary market (per design doc).
### Step 3 — Verify (Closure 2: response meta-state)
- For each MCP response returned from the Step 2 batch, call `stress.classify_mcp_meta_state(response, market, covered_markets)` where `covered_markets` is the set of market names from `list_macro_countries`.
- The returned state is one of `"ok"`, `"PARALLAX_SILENT"`, `"UNCOVERED"`, `"UNREACHABLE"`.
- If state ≠ `"ok"`, propagate that state into every (market × dim) cell resolution for this market — skip per-dim prose interpretation.
- If state == `"ok"`, proceed with per-dim prose→sign interpretation as today before passing `parallax_view` to `resolve_cell_state`.
### Step 4 — Compute
1. **Resolve cell states**
- Compute the age delta ONCE per run: `age_delta = stress.compute_age_delta(cio_age_days, parallax_age_days)` (where `cio_age_days = today − view.metadata.effective_date` and `parallax_age_days = today − check_macro_health.last_updated`).
- For each (market, dimension) pair, invoke `stress.resolve_cell_state(cio_tilt, parallax_view, age_delta, market=<key>, covered_markets=<set from list_macro_countries>)`. `age_delta` is a required positional argument — there is no internal default; passing the wrong value silently misclassifies every cell.
- The result will be one of the six states: `ALIGNED`, `DIVERGENT_STALE`, `DIVERGENT_FRESH`, `CIO_SILENT`, `PARALLAX_SILENT`, `UNCOVERED`.
2. **Synthesize Themes**:
- Analyze the results from Steps 1 and 3 to identify cross-dimension themes (e.g., a dimension flagged by both internal and external checks).
3. **Build Recommended Deltas**:
- Invoke `stress.build_recommended_deltas(resolutions, cio_age_days, parallax_age_days)` to produce the structured handoff payload. Pass into the audit append below AND the render call below.
4. **Validate deltas before audit (Closure 3 gate):**
- Call `stress.validate_recommended_deltas(deltas, schema_path)` where `schema_path` is `skills/_parallax/house-view/schema.yaml`.
- On `ok=True`: proceed to audit with `disposition="completed"`; render the Phase 4-B section normally.
- On `ok=False` AND no error has `index is None`: audit with `disposition="validation_failed"`, retain `recommended_deltas`, add `validation_errors: errors` field; render emits a "Phase 4-B suppressed — N deltas failed schema validation" callout listing each error.
- On `ok=False` AND the single error has `index is None` (sentinel for schema-load failure): audit with `disposition="schema_unreadable"`, retain `recommended_deltas`, add the same `validation_errors: errors` field; render emits an install-issue callout naming the schema.yaml path.
### Step 5 — Compose (audit row + artifact)
1. **Append audit entry**
- Invoke `stress.append_stress_audit(view, summary, applied=False, disposition="completed", recommended_deltas=...)`. Capture the returned entry dict.
- Re-checks the full view identity (`view_hash` plus `view_id`/`version_id`) under the view transaction lock to guard against race conditions — see the `stress.append_stress_audit` docstring.
- Compute the audit hash short form for the Phase 4-B citation: `audit_hash_short = audit_chain.compute_entry_hash(returned_entry)[:12]`.
2. **Render artifact**
- Invoke `render.render_artifact(view_meta, internal_results, external_results, themes, view_hash, recommended_deltas=..., audit_hash_short=...)` from `skills/parallax-stress-house-view/render.py`.
- Pass `audit_hash_short` from item 1 so the Phase 4-B section renders the specific `stress_test:<hash>` citation the CIO will paste into `basis_statement`.
- This creates the detailed markdown report in `~/.parallax/active-house-view/stress-tests/`.
### Step 6 — Render (final CIO gate, design Phase 4)
1. **Present summary** — `ask-operator` shows the CIO the final summary report, including CIO Challenges, Taste Decisions, and Auto-Decided cells, as templated in the design doc.
2. **Handle the choice**
- **A) Acknowledge**: Do nothing further. The `applied=false` audit entry is already written.
- **B) Apply via manual handoff**: The artifact's Phase 4-B section lists the structured deltas. The same deltas are stored in the audit entry's `recommended_deltas` field. To apply, the CIO opens `/parallax-load-house-view --edit` (which opens `view.yaml` in `$EDITOR`), makes the changes, and in the confirmation gate's `basis_statement` cites this stress test by audit hash (`stress_test:<hash[:12]>`). The `load-house-view` skill runs its own confirmation gate and writes a `save` audit entry; this stress entry's `applied` remains `false` (audit chain shows `stress_test → save` on the same view family). **This handoff is documented and manual in v1; Option B in the design doc tracks the automated `--apply-stress <audit-hash>` flag for v2.**
- **C) Interrogate**: Drill down into the specified cell, showing more data from the `macro_analyst` call, and re-present the gate.
- **D) Defer**: Note the request and exit. (No scheduling daemon is implemented yet.)
## Failure modes
- No active view, or broken audit chain: exit at Step 1 with the standard message; no audit row.
- `hard_stop` internal rule: halt at Step 1 with the internal report and a `halted_internal` row; no MCP spend.
- Market over the fan-out cap and `ask-operator` unavailable: take the top-12 default and say so.
- `list_macro_countries` fails: `covered_markets` empty → every cell `UNCOVERED`; state it in the report.
- Delta validation `ok=False`: audit `validation_failed` or `schema_unreadable` (Step 4 item 4); never drop the deltas.
- View identity moved between Step 1 and the audit append: `append_stress_audit` refuses; re-run from Step 1.
- Host lacks a primitive: conventions §14.3, per primitive; the saved artifact is still written when `run-shell` exists.
## Done when
- One `stress_test` audit row appended with `applied=false` and a disposition; the markdown report exists under `stress-tests/` with the Phase 4-B citation `stress_test:<hash[:12]>`.
- The CIO saw the summary through `ask-operator` and chose A–D, or the run halted with its explanatory message.
- §9.2 disclosure and the disclaimer rendered in both the report and the summary.
## Output Format
The primary output is the interactive `ask-operator` gate in Step 6 (design Phase 4). If the process halts earlier (e.g., no active view, internal contradiction), a clear explanatory message is provided. A detailed markdown report is always saved to the `stress-tests` directory for later review.
**AI-interaction disclosure:** the saved markdown report and the Step 6 summary render AI-interaction disclosure per `parallax-conventions.md` §9.2 immediately above the standard disclaimer (§9.1, or the view-aware disclaimer per `house-view/loader.md` §5 rule 5/6 when an active view is loaded). The internal-consistency and drift classifications are LLM-interpreted and the report is read directly by the CIO/operator, so §9.2 applies — this skill does not qualify for the config-artifact exemption (see conventions §9.2 exemption rationale and judge-house-view's identical directive).
**Calibration disclosure:** this skill operates against views in `calibration_status: heuristic_phase0`. Cell resolutions and recommended deltas are heuristic; intended for directional research only — do not use for regulatory capital, fiduciary-grade portfolio construction, or client-facing recommendations without further validation.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!