You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Save raw Xcode IDE bridge responses as transient workspace artifacts and route
call-tool output through the structured rendering pipeline. This keeps relayed
payloads out of final text output while preserving machine-readable artifacts
for callers that need the full remote response.
Add schema coverage, snapshot fixtures, and regression tests for the updated
Xcode IDE CLI, MCP, JSON, and JSONL output contracts.
- No barrel imports from `utils/index` - import from specific submodules (e.g., `src/utils/execution/index.ts`, `src/utils/logging/index.ts`)
56
56
57
+
58
+
## Rendering and Streaming Contract
59
+
- Streaming fragments are transient output only. They MUST NOT be used as internal state, cached for final responses, or promoted into final MCP/JSON/CLI text output.
60
+
- Non-streaming runtimes/output modes, including MCP final responses, MUST render only from the final structured result and next-step metadata. If final output needs data, add it to the final result type instead of reading it from fragments.
61
+
- Only streaming-capable renderers may observe fragment callbacks, and only to print live progress. Their fragment handling must not affect final structured output or final rendered text.
62
+
57
63
## Test Conventions
58
64
- Vitest with colocated `__tests__/` directories using `*.test.ts`
59
65
- Smoke tests in `src/smoke-tests/__tests__/` (separate Vitest config, serial execution)
@@ -88,6 +94,7 @@ When reading issues:
88
94
- Use shared lock and atomic-write helpers for mutable shared files.
89
95
- Prefer one-record-per-file registries over shared aggregate files.
90
96
- Cleanup must verify ownership before deleting shared artifacts.
97
+
- User-facing artifact/log paths in final text or structured output must use `displayPath()` from `src/utils/build-preflight.ts`, so paths are cwd-relative when possible or `~/...` instead of absolute home paths. Keep stored files at their real absolute paths; only normalize response/display values.
91
98
92
99
## Style
93
100
- Keep answers short and concise
@@ -98,6 +105,7 @@ When reading issues:
98
105
## Docs
99
106
- Do not commit transient investigation notes, prompt exports, or scratch analysis docs after the work is complete.
100
107
- If an investigation leaves unresolved follow-up work, move it to a GitHub issue instead of preserving the transient doc in the branch.
108
+
- Structured output JSON schemas are auto-published to the website/public schema mirror when merged; do not manually update public schema copies unless explicitly asked.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,7 +14,9 @@
14
14
15
15
### Changed
16
16
17
+
- Updated Xcode IDE `call-tool` output to save raw remote responses as transient workspace-state JSON artifacts, summarize text output without embedding large relayed payloads, and support `--output json` / `--output jsonl` through the generic CLI output path.
17
18
- Centralized workspace log retention and startup/shutdown filesystem cleanup so XcodeBuildMCP-owned logs are pruned consistently while preserving active daemon and simulator OSLog outputs.
19
+
- Removed internal streaming-fragment context flags so final tool state now comes from explicit structured outputs instead of transient progress fragments ([#360](https://github.com/getsentry/XcodeBuildMCP/issues/360)).
Copy file name to clipboardExpand all lines: CLAUDE.md
+8Lines changed: 8 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -29,6 +29,7 @@ When reading issues:
29
29
- Use shared lock and atomic-write helpers for mutable shared files.
30
30
- Prefer one-record-per-file registries over shared aggregate files.
31
31
- Cleanup must verify ownership before deleting shared artifacts.
32
+
- User-facing artifact/log paths in final text or structured output must use `displayPath()` from `src/utils/build-preflight.ts`, so paths are cwd-relative when possible or `~/...` instead of absolute home paths. Keep stored files at their real absolute paths; only normalize response/display values.
32
33
33
34
## Style
34
35
- Keep answers short and concise
@@ -39,6 +40,7 @@ When reading issues:
39
40
## Docs
40
41
- Do not commit transient investigation notes, prompt exports, or scratch analysis docs after the work is complete.
41
42
- If an investigation leaves unresolved follow-up work, move it to a GitHub issue instead of preserving the transient doc in the branch.
43
+
- Structured output JSON schemas are auto-published to the website/public schema mirror when merged; do not manually update public schema copies unless explicitly asked.
42
44
43
45
### Changelog
44
46
Location: `CHANGELOG.md`
@@ -62,6 +64,12 @@ Use these sections under `## [Unreleased]`:
62
64
-**Internal changes (from issues)**: `Fixed foo bar ([#123](https://github.com/cameroncook/XcodeBuildMCP/issues/123))`
63
65
-**External contributions**: `Added feature X ([#456](https://github.com/cameroncook/XcodeBuildMCP/pull/456) by [@username](https://github.com/username))`
64
66
67
+
68
+
## Rendering and Streaming Contract
69
+
- Streaming fragments are transient output only. They MUST NOT be used as internal state, cached for final responses, or promoted into final MCP/JSON/CLI text output.
70
+
- Non-streaming runtimes/output modes, including MCP final responses, MUST render only from the final structured result and next-step metadata. If final output needs data, add it to the final result type instead of reading it from fragments.
71
+
- Only streaming-capable renderers may observe fragment callbacks, and only to print live progress. Their fragment handling must not affect final structured output or final rendered text.
72
+
65
73
## Test Execution Rules
66
74
- When running long test suites (snapshot tests, smoke tests), ALWAYS write full output to a log file and read it afterwards. NEVER pipe through `tail` or `grep` directly — that loses output you may need to debug failures.
67
75
- Pattern: `DEVICE_ID=... npm run test:snapshot 2>&1 | tee /tmp/snapshot-results.txt` then read `/tmp/snapshot-results.txt` with the native read tool.
0 commit comments