Here is the code review of the changes addressing the JSON parse error on large networks in `project-expert derive`.

---

### ftl_project_expert/cli.py:_reasons_export
VERDICT: CONCERN
CORRECTNESS: QUESTIONABLE
SPEC_COMPLIANCE: N/A
ISSUE_COMPLIANCE: PARTIAL
BELIEF_COMPLIANCE: N/A
TEST_COVERAGE: UNTESTED
INTEGRATION: WIRED
REASONING: 
- **Non-Atomic Writes Risk File Corruption**: Previously, `_reasons_export()` captured standard output and wrote to `network.json` and `beliefs.md` via Python's `write_text()` *only* if the subprocess completed successfully (`returncode == 0`). This ensured that if the command failed, the previous valid versions of the files remained intact.
- By switching to `reasons export -o str(network_path)`, the file is opened for writing and truncated immediately by the CLI command. If the CLI command fails mid-execution or is interrupted (e.g., via Ctrl+C, database lock, or out-of-disk-space), the target file will be left empty or corrupted.
- **Recommendation**: To avoid this, either the `reasons` binary must support atomic writing, or the Python code should export to a temporary file (e.g. `network.json.tmp`) and rename/replace it upon successful exit status.
- **Test Coverage**: There is no test coverage for this function.

---

### ftl_project_expert/cli.py:_load_network
VERDICT: CONCERN
CORRECTNESS: VALID
SPEC_COMPLIANCE: N/A
ISSUE_COMPLIANCE: ADDRESSES
BELIEF_COMPLIANCE: N/A
TEST_COVERAGE: UNTESTED
INTEGRATION: WIRED
REASONING: 
- **Graceful Error Recovery**: The addition of the `try...except (json.JSONDecodeError, ValueError)` block is correct and robust. If `network.json` is empty or corrupted, the code prevents a crash, prints a clear warning, and attempts to re-export on the fly.
- **Safe Fallback**: If the recovery attempt also fails, it returns `{"nodes": {}}` instead of crashing. This is safe, though returning an empty network might lead to silent failures where downstream commands think the network is empty.
- **Redundant Immediate Retry**: If `network.json` does not exist and the first export command runs but results in corrupt output, the code immediately catches the parsing error and attempts to run the exact same export command again. While safe, this immediate retry is unlikely to succeed if the first attempt failed to write valid JSON.
- **Test Coverage**: There is no unit test coverage verifying the corruption-handling and recovery flows of `_load_network`.

---

### SELF_REVIEW
LIMITATIONS: 
- Could not run tests or shell commands to verify behavior dynamically due to environment policy restrictions.
- No test files were included in the diff or observation results, so existing test patterns could not be verified or adapted.

---

### FEATURE_REQUESTS
- Include existing test files (if any exist) alongside the implementation changes to allow reviewers to inspect and suggest precise unit tests.
- Expose the test runner command or environment configuration to allow non-destructive test execution.
