@ssheleg/agent-sync 1.4.2 → 1.4.3

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
@@ -3,6 +3,30 @@
3
3
  All notable changes to this project are documented here.
4
4
  This project adheres to [Semantic Versioning](https://semver.org/).
5
5
 
6
+ ## 1.4.3 — 2026-08-03
7
+
8
+ ### Fixed
9
+
10
+ - **The `pipeline.json` example did not validate against the schema it cited.** It
11
+ claimed `task-pipeline`'s `pipeline.schema.json` permitted it while carrying a
12
+ string `id`, a `title` where the schema says `name`, and no `state` at all — which
13
+ is required. Anyone who copied it got a config `task-pipeline` rejects. The example
14
+ is now checked against that schema.
15
+ - **Gate texts stated only this plugin's half.** Each `check` read as if it replaced
16
+ the stage's own criteria, so a host that copied the block silently dropped them —
17
+ stage 9 lost the propagation sweep and the documentation gate, stage 10 lost the
18
+ ladder walk and the evidence rule. Every `check` is now written as
19
+ *`<the stage's own criteria>` **AND** agent-sync's clause*.
20
+ - **Stage 9 pointed at the wrong doctrine.** `task-pipeline:artifacts` is the
21
+ artifact-layout reference; that stage runs on `task-pipeline:documentation` and
22
+ `task-pipeline:gates` since the documentation track landed.
23
+ - **`guardedFiles` did not cover what the pipeline now creates.** `docs/DOCMAP.md`
24
+ holds a project's registers, propagation matrix and ratchet floors, and
25
+ `docs/superpowers/retro.md` is capped at ten standing instructions — so a
26
+ concurrent write there drops a lesson instead of conflicting visibly. Both are
27
+ guarded, with the reasoning in `references/pipeline-binding.md` because the config
28
+ schema keeps `agent-sync.json` to known keys.
29
+
6
30
  ## 1.4.2 — 2026-07-30
7
31
 
8
32
  ### Changed
package/README.md CHANGED
@@ -461,6 +461,13 @@ Security reports: [SECURITY.md](SECURITY.md).
461
461
  bundle, which installs the whole family for Claude Code, Cursor, Codex and 70+
462
462
  other agents with one command.
463
463
 
464
+ ## Author
465
+
466
+ Built by ssheleg — [sshlg.me](https://sshlg.me)
467
+
468
+ - X / Twitter — [@sshlg93](https://x.com/sshlg93)
469
+ - Telegram — [@sshlg](https://t.me/sshlg)
470
+
464
471
  ## License
465
472
 
466
473
  MIT © ssheleg
@@ -17,7 +17,9 @@
17
17
  "guardedFiles": [
18
18
  "docs/DECISIONS.md",
19
19
  "docs/OPEN_QUESTIONS.md",
20
- "docs/ROADMAP.md"
20
+ "docs/ROADMAP.md",
21
+ "docs/DOCMAP.md",
22
+ "docs/superpowers/retro.md"
21
23
  ],
22
24
  "claimTags": {
23
25
  "docs/ROADMAP.md": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ssheleg/agent-sync",
3
- "version": "1.4.2",
3
+ "version": "1.4.3",
4
4
  "description": "Let concurrent coding agents share one project without colliding \u2014 leases with TTL, race-free id reservation, a run journal and a generated board, over a pluggable knowledge cloud.",
5
5
  "bin": {
6
6
  "agent-sync": "bin/agent-sync.js"
@@ -38,7 +38,10 @@
38
38
  "bugs": {
39
39
  "url": "https://github.com/ssheleg/agent-sync/issues"
40
40
  },
41
- "author": "ssheleg",
41
+ "author": {
42
+ "name": "ssheleg",
43
+ "url": "https://x.com/sshlg93"
44
+ },
42
45
  "license": "MIT",
43
46
  "engines": {
44
47
  "node": ">=18"
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "agent-sync",
3
3
  "displayName": "Agent Sync",
4
- "version": "1.4.2",
4
+ "version": "1.4.3",
5
5
  "description": "Coordination layer for multi-agent repositories \u2014 leases with TTL, race-free ID reservation, a run journal, a cross-repo signal feed and a generated board, over a pluggable knowledge cloud.",
6
6
  "author": {
7
- "name": "ssheleg"
7
+ "name": "ssheleg",
8
+ "url": "https://x.com/sshlg93"
8
9
  },
9
10
  "homepage": "https://github.com/ssheleg/agent-sync",
10
11
  "repository": "https://github.com/ssheleg/agent-sync",
@@ -4,7 +4,7 @@ description: "Use when several coding agents work one repository at the same tim
4
4
  compatibility: "Requires the task-pipeline skill for its stages (npx sshlg-skills install). Needs python3 3.9+ (stdlib only, HTTP included - nothing to pip install) and bash for the hooks. The knowledge backend is configured per project; with none configured it degrades to git-file leases. Enforcement hooks are Claude Code only - on other agents the same checks run as a self-check."
5
5
  license: MIT
6
6
  metadata:
7
- version: "1.4.2"
7
+ version: "1.4.3"
8
8
  author: ssheleg
9
9
  ---
10
10
 
@@ -24,30 +24,65 @@
24
24
  ## pipeline.json
25
25
 
26
26
  `task-pipeline`'s `pipeline.schema.json` already permits this; nothing is forked.
27
- Add `agent-sync` to `skills[]` on the six stages that call it:
27
+ Add `agent-sync` to `skills[]` on the six stages that call it, and append its
28
+ clause to each of those stages' existing `gate.check`:
28
29
 
29
30
  ```json
30
31
  {
31
32
  "stages": [
32
- { "id": "0", "title": "Intake grill", "skills": ["task-pipeline:grill", "agent-sync"],
33
- "gate": { "type": "manual", "check": "brief committed and lease held" } },
34
- { "id": "3", "title": "Spec", "skills": ["task-pipeline:spec", "agent-sync"],
35
- "gate": { "type": "auto", "check": "every id in the spec was reserved" } },
36
- { "id": "4", "title": "Plan", "skills": ["task-pipeline:planning", "agent-sync"],
37
- "gate": { "type": "auto", "check": "no two parallel tasks write one file" } },
38
- { "id": "5", "title": "Dev", "skills": ["task-pipeline:build", "agent-sync"],
39
- "gate": { "type": "auto", "check": "lease live and submodule pointers current" } },
40
- { "id": "9", "title": "Docs + wiki", "skills": ["task-pipeline:artifacts", "agent-sync"],
41
- "gate": { "type": "auto", "check": "board regenerated and no mirror drift" } },
42
- { "id": "10", "title": "Acceptance", "skills": ["task-pipeline:acceptance", "agent-sync"],
43
- "gate": { "type": "auto", "check": "every lease released and every claim tag written through" } }
33
+ { "id": 0, "state": "intake", "name": "Intake grill",
34
+ "skills": ["task-pipeline:grill", "agent-sync"],
35
+ "gate": { "type": "manual", "check": "<the stage's own criteria> AND the lease for this task is held before the brief is committed" } },
36
+ { "id": 3, "state": "spec", "name": "Spec",
37
+ "skills": ["task-pipeline:spec", "agent-sync"],
38
+ "gate": { "type": "manual", "check": "<the stage's own criteria> AND every id the spec writes was reserved first" } },
39
+ { "id": 4, "state": "plan", "name": "Plan",
40
+ "skills": ["task-pipeline:planning", "agent-sync"],
41
+ "gate": { "type": "auto", "check": "<the stage's own criteria> AND no two parallel tasks write one file" } },
42
+ { "id": 5, "state": "dev", "name": "Dev",
43
+ "skills": ["task-pipeline:build", "agent-sync"],
44
+ "gate": { "type": "auto", "check": "<the stage's own criteria> AND the lease is live and submodule pointers are current" } },
45
+ { "id": 9, "state": "docs-wiki", "name": "Docs + wiki",
46
+ "skills": ["task-pipeline:documentation", "task-pipeline:gates", "agent-sync"],
47
+ "gate": { "type": "auto", "check": "<the stage's own criteria — the propagation sweep and a green documentation gate with its ratchets printed> AND the board is regenerated with no mirror drift" } },
48
+ { "id": 10, "state": "acceptance", "name": "Acceptance",
49
+ "skills": ["task-pipeline:acceptance", "agent-sync"],
50
+ "gate": { "type": "manual", "check": "<the stage's own criteria> AND every lease is released and every claim tag written through" } }
44
51
  ]
45
52
  }
46
53
  ```
47
54
 
55
+ **Three things in that JSON are contract, not style.** `state` is **required** by
56
+ `pipeline.schema.json`, `id` is an **integer**, and the human label is `name` — not
57
+ `title`. This example carried `"id": "0"` with a `title` and no `state` until
58
+ 2026-08-03, while claiming the schema permitted it; anyone who copied it got a config
59
+ `task-pipeline` rejects.
60
+
61
+ **And the gate text EXTENDS, never replaces.** Each `check` above is
62
+ *`<the stage's own criteria>` **AND** agent-sync's clause* — written out that way on
63
+ purpose. An earlier version of this file stated only agent-sync's half, so a host
64
+ that copied it silently dropped the stage's real gate: stage 9 lost the propagation
65
+ sweep and the documentation gate, stage 10 lost the ladder walk and the evidence
66
+ rule.
67
+
48
68
  Stages 1, 2, 6, 7 and 8 keep their own `skills[]`; `agent-sync` only journals there,
49
69
  which needs no wiring.
50
70
 
71
+ ## What must be guarded
72
+
73
+ `guardedFiles` is every shared file two agents could write in the same minute — and
74
+ since the pipeline's documentation track it is longer than the registers:
75
+
76
+ | File | Why it is shared state |
77
+ |---|---|
78
+ | the decision register (`docs/DECISIONS.md` or `docs/adr/`) | append-only; a concurrent write loses an entry |
79
+ | `docs/OPEN_QUESTIONS.md`, `docs/ROADMAP.md` | the same |
80
+ | **`docs/DOCMAP.md`** | seeded into every project the pipeline touches; holds the registers, the propagation matrix and the ratchet floors. Losing it loses the map |
81
+ | **`docs/superpowers/retro.md`** | capped at ten standing instructions, so a concurrent write silently **drops a lesson** instead of conflicting visibly |
82
+
83
+ The schema keeps `agent-sync.json` to known keys, which is why this reasoning lives
84
+ here and not as a comment in the config.
85
+
51
86
  ## Preflight
52
87
 
53
88
  `task-pipeline` is required. When it is absent, print the install line and **stop** —
@@ -32,7 +32,7 @@ from datetime import datetime, timezone
32
32
  from pathlib import Path
33
33
  from typing import Any
34
34
 
35
- VERSION = "1.4.2"
35
+ VERSION = "1.4.3"
36
36
 
37
37
  CONFIG_PATH = Path(".claude/agent-sync.json")
38
38
  ENV_FILE = Path(".env.agent-sync")