@crvouga/atlas 0.10.1 → 0.10.2

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,11 @@
1
1
  # Changelog: @crvouga/atlas
2
2
 
3
+ ## 0.10.2 (2026-10-24)
4
+
5
+ ### Fixes and improvements
6
+
7
+ - stabilize report identity and add issue resolution skill (#19) ([1772e03](https://github.com/crvouga/atlas/commit/1772e03b6376854aecc1da692a1da87d21ebf370))
8
+
3
9
  ## 0.10.1 (2026-10-24)
4
10
 
5
11
  ### Fixes and improvements
@@ -128,5 +128,9 @@ export declare function distinctHeaders<T extends {
128
128
  export declare function distinctEvidence(layers: readonly LayerEvidence[]): LayerEvidence[];
129
129
  /** Drops each mutable layer whose execution is already archived as an immutable one, and keeps one summary per id. */
130
130
  export declare function distinctLayers(layers: readonly LayerSummary[]): LayerSummary[];
131
- /** A string equal for the mutable and the archived address of one execution: its producer, sha, time and parts. */
131
+ /**
132
+ * A string equal for the mutable and the archived address of one execution: its producer, sha, time and parts.
133
+ * Object key order is ignored at every depth, including check evidence and extensions; array order is preserved.
134
+ * This is an advisory execution identity, not the content digest that addresses an immutable layer in storage.
135
+ */
132
136
  export declare function layerExecutionKey(layer: LayerSummary): string;
@@ -269,7 +269,22 @@ export function distinctLayers(layers) {
269
269
  const kept = new Set(layers.filter(layer => archived(layer.id)).map(layerExecutionKey));
270
270
  return [...new Map(layers.filter(layer => archived(layer.id) || !kept.has(layerExecutionKey(layer))).map(layer => [layer.id, layer])).values()];
271
271
  }
272
- /** A string equal for the mutable and the archived address of one execution: its producer, sha, time and parts. */
272
+ /**
273
+ * A string equal for the mutable and the archived address of one execution: its producer, sha, time and parts.
274
+ * Object key order is ignored at every depth, including check evidence and extensions; array order is preserved.
275
+ * This is an advisory execution identity, not the content digest that addresses an immutable layer in storage.
276
+ */
273
277
  export function layerExecutionKey(layer) {
274
- return JSON.stringify([layer.producer, layer.sha, layer.recordedAtMs, layer.parts]);
278
+ return JSON.stringify([layer.producer, layer.sha, layer.recordedAtMs, orderedValue(layer.parts)]);
279
+ }
280
+ /** Sort JSON objects recursively without changing array order or interpreting extension keys as prototypes. */
281
+ function orderedValue(value) {
282
+ if (Array.isArray(value))
283
+ return value.map(orderedValue);
284
+ if (value === null || typeof value !== 'object')
285
+ return value;
286
+ const ordered = Object.create(null);
287
+ for (const key of Object.keys(value).sort())
288
+ ordered[key] = orderedValue(value[key]);
289
+ return ordered;
275
290
  }
package/docs/agents.md CHANGED
@@ -13,6 +13,7 @@ commands provide JSON results with published schemas; the HTTP API is described
13
13
  - [Standards used](#standards-used)
14
14
  - [Where the documentation comes from](#where-the-documentation-comes-from)
15
15
  - [An integration brief you can give an agent](#an-integration-brief-you-can-give-an-agent)
16
+ - [Resolve this repository's open issues](#resolve-this-repositorys-open-issues)
16
17
 
17
18
  ## Given only this repository link
18
19
 
@@ -287,3 +288,27 @@ docs/reporting-issues.md; do not edit node_modules or vendor Atlas into this pro
287
288
  If server access or CI secrets are unavailable, finish the local integration and report exactly which shared
288
289
  server/CI checks remain unverified. A synthetic pass, a generated plan, or an unavailable backend is not proof
289
290
  that the product's real suites are integrated.
291
+
292
+ ## Resolve this repository's open issues
293
+
294
+ For contributors working in this Atlas checkout, the
295
+ [resolve-open-issues skill](https://github.com/crvouga/atlas/blob/main/.agents/skills/resolve-open-issues/SKILL.md)
296
+ handles the entire open GitHub issue inventory in one PR, branch and worktree. It uses the
297
+ [Agent Skills format](https://agentskills.io/specification) in the
298
+ [shared `.agents/skills/` location](https://agentskills.io/integrate-skills#where-to-scan).
299
+ Discovery varies by agent; any coding agent with repository file access and GitHub access can use
300
+ the same instructions by reading the file directly:
301
+
302
+ ```text
303
+ Read .agents/skills/resolve-open-issues/SKILL.md and follow it to resolve all open GitHub issues
304
+ in this repository in a single PR, using one branch and the current worktree. Continue through
305
+ implementation, validation and PR checks. Track evidence for every issue, handle attestations
306
+ autonomously, and report precise blockers without claiming unresolved issues are fixed.
307
+ ```
308
+
309
+ Use the agent's native skill invocation when it discovers `resolve-open-issues`; the file-reading
310
+ prompt is the portable fallback. The skill can also be copied as a whole directory into another
311
+ repository's skill location; it reads that repository's instructions and validation requirements.
312
+ Keep this workflow in the repository being fixed. Atlas consumer integrations still follow the
313
+ playbook above and report Atlas defects as issues. The contributor skill lives in the Git checkout;
314
+ it is not part of the npm package.
@@ -3340,6 +3340,8 @@ export function layerExecutionKey(layer: LayerSummary): string
3340
3340
  ```
3341
3341
 
3342
3342
  A string equal for the mutable and the archived address of one execution: its producer, sha, time and parts.
3343
+ Object key order is ignored at every depth, including check evidence and extensions; array order is preserved.
3344
+ This is an advisory execution identity, not the content digest that addresses an immutable layer in storage.
3343
3345
 
3344
3346
  ### Archiving a recorded run as a layer
3345
3347
 
@@ -178,6 +178,9 @@ Consequences you can rely on:
178
178
  was removed keeps its evidence, outside the outline.
179
179
  - An immutable layer held by several backends is **one** layer, reported by the backend whose id sorts
180
180
  first.
181
+ - The mutable address of an execution already held as an immutable layer is suppressed by the
182
+ de-duplication helpers and static export. Execution identity compares producer, commit, time and
183
+ parts; object key order at any depth does not matter, while array order does.
181
184
 
182
185
  Leaving a layer, backend, environment, branch or version out of the input is how earlier outcomes are
183
186
  inspected.
package/llms-full.txt CHANGED
@@ -22,6 +22,7 @@ commands provide JSON results with published schemas; the HTTP API is described
22
22
  - [Standards used](#standards-used)
23
23
  - [Where the documentation comes from](#where-the-documentation-comes-from)
24
24
  - [An integration brief you can give an agent](#an-integration-brief-you-can-give-an-agent)
25
+ - [Resolve this repository's open issues](#resolve-this-repositorys-open-issues)
25
26
 
26
27
  ## Given only this repository link
27
28
 
@@ -296,6 +297,30 @@ docs/reporting-issues.md; do not edit node_modules or vendor Atlas into this pro
296
297
  If server access or CI secrets are unavailable, finish the local integration and report exactly which shared
297
298
  server/CI checks remain unverified. A synthetic pass, a generated plan, or an unavailable backend is not proof
298
299
  that the product's real suites are integrated.
300
+
301
+ ## Resolve this repository's open issues
302
+
303
+ For contributors working in this Atlas checkout, the
304
+ [resolve-open-issues skill](https://github.com/crvouga/atlas/blob/main/.agents/skills/resolve-open-issues/SKILL.md)
305
+ handles the entire open GitHub issue inventory in one PR, branch and worktree. It uses the
306
+ [Agent Skills format](https://agentskills.io/specification) in the
307
+ [shared `.agents/skills/` location](https://agentskills.io/integrate-skills#where-to-scan).
308
+ Discovery varies by agent; any coding agent with repository file access and GitHub access can use
309
+ the same instructions by reading the file directly:
310
+
311
+ ```text
312
+ Read .agents/skills/resolve-open-issues/SKILL.md and follow it to resolve all open GitHub issues
313
+ in this repository in a single PR, using one branch and the current worktree. Continue through
314
+ implementation, validation and PR checks. Track evidence for every issue, handle attestations
315
+ autonomously, and report precise blockers without claiming unresolved issues are fixed.
316
+ ```
317
+
318
+ Use the agent's native skill invocation when it discovers `resolve-open-issues`; the file-reading
319
+ prompt is the portable fallback. The skill can also be copied as a whole directory into another
320
+ repository's skill location; it reads that repository's instructions and validation requirements.
321
+ Keep this workflow in the repository being fixed. Atlas consumer integrations still follow the
322
+ playbook above and report Atlas defects as issues. The contributor skill lives in the Git checkout;
323
+ it is not part of the npm package.
299
324
  </doc>
300
325
 
301
326
  <doc path="docs/quickstart.md">
@@ -2235,6 +2260,9 @@ Consequences you can rely on:
2235
2260
  was removed keeps its evidence, outside the outline.
2236
2261
  - An immutable layer held by several backends is **one** layer, reported by the backend whose id sorts
2237
2262
  first.
2263
+ - The mutable address of an execution already held as an immutable layer is suppressed by the
2264
+ de-duplication helpers and static export. Execution identity compares producer, commit, time and
2265
+ parts; object key order at any depth does not matter, while array order does.
2238
2266
 
2239
2267
  Leaving a layer, backend, environment, branch or version out of the input is how earlier outcomes are
2240
2268
  inspected.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crvouga/atlas",
3
- "version": "0.10.1",
3
+ "version": "0.10.2",
4
4
  "description": "Atlas: specs of any kind, reported as layered evidence. Publish checks from any runner (JUnit, CTRF, a script), combine them across nodes, branches, environments and backends, gate CI on the result, and run statecharts against the real app.",
5
5
  "license": "MIT",
6
6
  "type": "module",