@drawbridge/drawbridge-agents 0.1.35 → 0.1.37
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.
|
@@ -35,6 +35,24 @@
|
|
|
35
35
|
"../drawbridge-website"
|
|
36
36
|
]
|
|
37
37
|
},
|
|
38
|
+
"extraKnownMarketplaces": {
|
|
39
|
+
"ponytail": {
|
|
40
|
+
"source": {
|
|
41
|
+
"source": "github",
|
|
42
|
+
"repo": "DietrichGebert/ponytail"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"humanizer": {
|
|
46
|
+
"source": {
|
|
47
|
+
"source": "github",
|
|
48
|
+
"repo": "blader/humanizer"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"enabledPlugins": {
|
|
53
|
+
"ponytail@ponytail": true,
|
|
54
|
+
"humanizer@humanizer": true
|
|
55
|
+
},
|
|
38
56
|
"hooks": {
|
|
39
57
|
"PreToolUse": [
|
|
40
58
|
{
|
|
@@ -40,14 +40,23 @@ need to retest. Use this right after merging the work to `develop` (which deploy
|
|
|
40
40
|
**Open with an @-mention of the reassignee** — use `html_text` and start the body with
|
|
41
41
|
`<a data-asana-gid="<their user gid>"/>` (Asana expands it into a proper mention). A
|
|
42
42
|
comment without a mention may notify no one; reassignment alone is easy to miss.
|
|
43
|
-
4. **
|
|
43
|
+
4. **Run the draft through `humanizer`.** A real teammate reads this, and generated-sounding
|
|
44
|
+
prose reads as effort nobody spent. Invoke the `humanizer` skill on the drafted body: it
|
|
45
|
+
strips the AI tells — inflated claims, hedging, stock transitions, "it's worth noting",
|
|
46
|
+
restating the ask twice.
|
|
47
|
+
|
|
48
|
+
It pulls in the same direction as the word limit above, so apply it *before* the final
|
|
49
|
+
trim and re-check the result against both rules. Two things it must not touch: the
|
|
50
|
+
`<a data-asana-gid="..."/>` mention (leave the markup exactly as-is) and any concrete
|
|
51
|
+
detail from the Retest steps — if a pass makes the steps vaguer, keep the original wording.
|
|
52
|
+
5. **Confirm before writing.** This posts to an external system. Show the user the chosen
|
|
44
53
|
assignee and the drafted comment and get a go-ahead, unless they've told you to proceed
|
|
45
54
|
without asking.
|
|
46
|
-
|
|
55
|
+
6. **Apply** (on approval):
|
|
47
56
|
- `asana_update_task` — set `assignee` to the last commenter's gid and `due_at` to the
|
|
48
57
|
current date/time (ISO 8601).
|
|
49
58
|
- `asana_create_task_story` — post the comment.
|
|
50
|
-
|
|
59
|
+
7. **Report** the task URL, who it was assigned to, and confirm the due date was updated.
|
|
51
60
|
|
|
52
61
|
## Notes
|
|
53
62
|
|
|
@@ -14,13 +14,22 @@ knowledge graph, and the Asana handoff so nothing drifts at ship time.
|
|
|
14
14
|
1. **Verify it works.** Run the project's verification (the `verify` skill / build / lint /
|
|
15
15
|
manual smoke — there's no unit-test framework in api/sync/app-web). Confirm the behaviour
|
|
16
16
|
end-to-end, not just that it compiles.
|
|
17
|
-
2. **
|
|
17
|
+
2. **Review the diff for over-engineering.** Invoke the `ponytail-review` skill on the change
|
|
18
|
+
before it merges. It reports one line per finding — reinvented stdlib, a dependency that
|
|
19
|
+
wasn't needed, a speculative abstraction, flexibility nothing calls. Act on what's real and
|
|
20
|
+
say why you're keeping anything you skip; a finding that survives review deliberately is
|
|
21
|
+
fine, one that survives because nobody looked is how the family accretes code. This is the
|
|
22
|
+
cheapest point to cut it — after merge it's someone else's inheritance.
|
|
23
|
+
|
|
24
|
+
Ponytail's baseline is already ambient (a SessionStart hook applies it at `full` intensity
|
|
25
|
+
family-wide), so this step is the explicit diff pass, not the switch that turns it on.
|
|
26
|
+
3. **Reconcile the spec.** Find the matching `drawbridge-docs` user story by its
|
|
18
27
|
`<domain>/<slug>` ID (or the relevant `reference/` doc). If behaviour changed, update the
|
|
19
28
|
story in the same change (use `write-user-stories` for a new/edited story). If you can't,
|
|
20
29
|
flag the drift explicitly. See `conventions/docs-linkage.md`.
|
|
21
|
-
|
|
30
|
+
4. **Confirm doc anchors resolve.** Run `npx drawbridge-agents-check-docs`; fix any unresolved
|
|
22
31
|
`@story` / `@doc` tag. Add an anchor to newly-added feature code where it maps to a story.
|
|
23
|
-
|
|
32
|
+
5. **Refresh the knowledge graph — always, on every feature wrap** (not conditional on whether
|
|
24
33
|
structure "obviously" changed). The canonical graph is the committed snapshot in
|
|
25
34
|
`drawbridge-docs`, shared by the whole team; skipping it lets the shared graph drift. From the
|
|
26
35
|
`drawbridge-docs` repo: `npx drawbridge-agents-graph` (rebuilds `knowledge/graphs/global.json`
|
|
@@ -28,9 +37,9 @@ knowledge graph, and the Asana handoff so nothing drifts at ship time.
|
|
|
28
37
|
knowledge graph (<feature>)" && git push origin main`. If it reports "graphify runtime not
|
|
29
38
|
found", the `uv`/`graphify` binaries are in `~/.local/bin` — `export PATH="$HOME/.local/bin:$PATH"`
|
|
30
39
|
and retry (do NOT run `graphify install`; it rewrites `CLAUDE.md`).
|
|
31
|
-
|
|
40
|
+
6. **Hand off the task.** Invoke `drawbridge-asana-ship-handoff` with the Asana task to reassign
|
|
32
41
|
to the last commenter, post the change summary + retest steps, and set the due date.
|
|
33
|
-
|
|
42
|
+
7. **Clear the worktree.** If the feature was built in a git worktree (a sibling directory or a
|
|
34
43
|
`.worktrees/` folder), remove it now that the branch is merged: from the main checkout,
|
|
35
44
|
`git worktree remove <path>` then `git worktree prune`. If the removal complains about
|
|
36
45
|
uncommitted changes, inspect them first — add `--force` only once you've confirmed the dirt
|
|
@@ -39,6 +48,6 @@ knowledge graph, and the Asana handoff so nothing drifts at ship time.
|
|
|
39
48
|
|
|
40
49
|
## Notes
|
|
41
50
|
|
|
42
|
-
- Steps
|
|
51
|
+
- Steps 3–5 are what the drift-check Stop hook enforces; running them here means you won't get
|
|
43
52
|
blocked at turn end.
|
|
44
53
|
- "Shipped" in this family means merged to `develop` (that's the deployed dev environment).
|
package/README.md
CHANGED
|
@@ -20,7 +20,8 @@ claude/
|
|
|
20
20
|
CLAUDE.md ← aggregator — @-imports every conventions/*.md
|
|
21
21
|
|
|
22
22
|
.claude-template/ ← the complete shared .claude/, mirrored into each consumer repo
|
|
23
|
-
settings.json ← permissions, additionalDirectories, drift-check Stop hook
|
|
23
|
+
settings.json ← permissions, additionalDirectories, drift-check Stop hook,
|
|
24
|
+
family-wide plugin marketplaces + enabledPlugins
|
|
24
25
|
skills/ ← shared skills (drawbridge-ship-feature, -asana-ship-handoff, ...)
|
|
25
26
|
hooks/ agents/ commands/
|
|
26
27
|
|
|
@@ -48,6 +48,15 @@ skill) so it stops living only in tribal memory.
|
|
|
48
48
|
`ads-republishing.<connectionId>`). Never unique-index `coalesce` (superseding requires the
|
|
49
49
|
second insert to land), and writes that set `key` need the writer-side E11000 handler or a
|
|
50
50
|
replayed event logs a false error.
|
|
51
|
+
- **Adding an email/SMS vendor is a two-repo change** (api ↔ sync). A connection is deliverable
|
|
52
|
+
only if sync implements a sender for its slug — `lib/email.js` (`{ mailchimp, sendgrid }`) and
|
|
53
|
+
`lib/sms.js` (`{ twilio }`), which `queue/notification.js` reads **directly** as its guard and
|
|
54
|
+
org-scoped lookup; never re-list the slugs as literals, or the guard drifts from the senders
|
|
55
|
+
that exist. Adding a vendor to drawbridge-api `lib/connections.js` with `group : 'email'`/`'sms'`
|
|
56
|
+
makes it selectable throughout api and app-web, but with no sync sender every send is
|
|
57
|
+
cancelled, not delivered — merchant sees a workflow that ran and no message. The miss is
|
|
58
|
+
detectable, not silent: `notification.reason = 'connection-slug-mismatch'` plus an
|
|
59
|
+
Error-instance `logger.error` (a string never reaches Sentry Issues — see `sentry-sdk.md`).
|
|
51
60
|
- Schema-gated fields ship **api-first, booted**: a sibling writer setting a field new to a
|
|
52
61
|
drawbridge-api `$jsonSchema` (validators are strict + `additionalProperties: false`) must not
|
|
53
62
|
go live until the api has **booted** with the schema change on that environment — creating the
|
package/package.json
CHANGED