code-foundry 0.34.13 → 0.34.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.34.14](https://github.com/0xPlayerOne/code-foundry/compare/v0.34.13...v0.34.14) (2026-08-03)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **reconcile:** ignore historical paths absent from final tree ([#362](https://github.com/0xPlayerOne/code-foundry/issues/362)) ([8b8a123](https://github.com/0xPlayerOne/code-foundry/commit/8b8a123a1a7ea23a789c491414d3c9ea235a3d72))
9
+
3
10
  ## [0.34.13](https://github.com/0xPlayerOne/code-foundry/compare/v0.34.12...v0.34.13) (2026-08-03)
4
11
 
5
12
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "code-foundry",
3
- "version": "0.34.13",
3
+ "version": "0.34.14",
4
4
  "description": "A fast, language-aware repository factory for agent-ready workflows, testing, security, and release automation.",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-or-later",
@@ -220,9 +220,14 @@ function compareVersions(a, b) {
220
220
  * Classify the relationship between main and staging using the final tree delta
221
221
  * when available. Historical commit paths can include equivalent workflow or
222
222
  * configuration changes that are no longer present in the branch delta, so the
223
- * final trees are the source of truth for release-only reconciliation. Any
224
- * staging-only commit still triggers a replay path so no staging-only work can
225
- * be silently discarded.
223
+ * final trees are the source of truth for release-only reconciliation. When
224
+ * directChangedPaths is supplied, unexpected paths in historical main-only
225
+ * commits are ignored only when they are absent from the final tree delta
226
+ * (their content is already identical in both branches); unexpected main-only
227
+ * paths that still differ between the final trees fail closed. Without
228
+ * directChangedPaths the historical check stays strict. Any staging-only
229
+ * commit still triggers a replay path so no staging-only work can be silently
230
+ * discarded.
226
231
  * @param {{
227
232
  * mainSha: string,
228
233
  * stagingSha: string,
@@ -282,10 +287,19 @@ export function classifyReconciliation(input) {
282
287
  }
283
288
  }
284
289
  }
290
+ // Historical main-only commits may list paths whose content is already
291
+ // identical in the final staging tree (for example an equivalent workflow
292
+ // change). When the final tree delta is available, such paths are not
293
+ // genuine content differences and are ignored unless they also appear in
294
+ // the direct tree delta; without directChangedPaths the strict historical
295
+ // check is preserved unchanged.
296
+ const directTreePaths = Array.isArray(directChangedPaths)
297
+ ? new Set(directChangedPaths.map((path) => path.trim()).filter(Boolean))
298
+ : null
285
299
  const unexpectedMain = unexpectedReleasePaths(
286
300
  [...new Set(mainOnlyCommits.flatMap((commit) => commit.changedPaths || []))],
287
301
  allowed,
288
- )
302
+ ).filter((path) => directTreePaths === null || directTreePaths.has(path))
289
303
  if (unexpectedMain.length) {
290
304
  return {
291
305
  action: 'fail',