# Validation ## Baseline Python 3.10 is the minimum supported Python version. The neutral core uses only the standard library in V1. GitHub Actions is the CI source of truth for repository validation once `.github/workflows/ci.yml` is present. The Python matrix also builds an isolated wheel from `pyproject.toml`, which validates the Git/pip CLI installation path on Python 3.10 and 3.13. ## Local checks The current baseline is: ```bash python -m unittest discover -s tests -v python -m compileall -q praxis tests python -m pip wheel --no-deps . -w /tmp/praxis-wheel pnpm typecheck pnpm test:dsh ``` ## Codex package validation Feature-05 adds a repository-only Codex package contract that does not require a live Codex account: ```bash python -m unittest \ tests.test_codex_plugin_manifest \ tests.test_codex_hooks_manifest \ tests.test_codex_context \ tests.test_codex_recovery \ tests.test_codex_distribution -v python -m compileall -q plugins/codex praxis ``` The **Codex package** GitHub Actions job verifies portable/compatibility manifests, lifecycle hook declarations, adapter activation/recovery/fallback behavior, the 3000-character context bound, transcript/prompt independence, and the Codex-to-neutral-core dependency boundary. This repository validation does not claim that a user's Codex environment has trusted or deployed the hook scripts. Live-host hook execution remains dependent on Codex installation/runtime policy. From a checkout, refresh the installed Praxis plugin with: ```bash ./scripts/reload-codex-plugin.sh ``` The script refreshes the configured `praxis` marketplace and reinstalls `praxis@praxis`. It uses `codex` from `PATH` or finds the CLI bundled in ChatGPT.app under `/Applications` or `~/Applications` on macOS. Set `CODEX_BIN` to override the executable path. Open a new chat afterward; restart the app if the skill is still missing. Package refresh does not reload the current chat or enable Praxis in the project. ## Cursor / CodeBuddy plugins Feature-07 validates both plugin packages against their current documented host contracts without requiring marketplace publication. ```bash python -m unittest \ tests.test_shared_recovery_hook \ tests.test_cursor_integration \ tests.test_codebuddy_integration \ tests.test_agent_plugin_distribution \ tests.test_command_surfaces -v python -m compileall -q plugins/shared plugins/cursor plugins/codebuddy ``` The **Cursor / CodeBuddy plugins** GitHub Actions job runs these checks on Python 3.10. Cursor supports automatic recovery context at session start. Its current native `beforeSubmitPrompt` output does not inject additional agent context, so Praxis uses that hook to refresh durable/project freshness only; it **does not inject** per-prompt recovery context on that path. The shared Praxis Skill and CLI remain available on demand. CodeBuddy supports `additionalContext` on both `SessionStart` and `UserPromptSubmit`, so Praxis refreshes and injects recovery context on both lifecycle edges. Both adapters reuse `praxis recovery-status`, cap automatic context at 3000 characters, ignore prompt/transcript text as approval evidence, and add no MCP server or MCP configuration. ## DeepSeek Harness integration validation Feature-06 tests the native Cordis adapter against the pinned current preview family: - `@deepseek-ai/dsh-agent@0.2.1-alpha.1` - `@deepseek-ai/dsh-llm@0.2.1-alpha.1` - `@deepseek-ai/dsh-skill@0.2.1-alpha.1` - `@deepseek-ai/cordis@4.0.5-alpha.1` The root development dependency set also pins the preview type closure required by those packages: `@deepseek-ai/dsh-attachment@0.2.1-alpha.1`, `@deepseek-ai/dsh-brand@0.2.1-alpha.1`, and the human command registry `@deepseek-ai/dsh-commands@0.2.1-alpha.1`. ```bash pnpm typecheck pnpm test:dsh ``` The **TypeScript / DSH integration** GitHub Actions job explicitly provisions Node 22.20.0 and Python 3.10. It validates the Cordis plugin export shape, shared Skill registration, direct `/praxis` command registration, direct-argv TypeScript-to-Python recovery/control bridges, 3000-character renderer, real `agent/created` and `agent/pre-step` event behavior, digest de-duplication, cleanup, and distribution boundaries. These tests exercise the DSH package APIs inside the repository. The repository root declares a DSH bundle for Git-backed profile installation, but does not claim npm publication. Until a reviewed `pnpm-lock.yaml` is generated by pnpm and committed, CI may install with `pnpm install --no-frozen-lockfile`. Do not fabricate a lockfile by hand. ## Green definition A failed or unrun check cannot be reported Green. Mark unavailable or unrun validation as Pending and state the limitation. Source review or agent confidence is not a substitute for execution evidence.