@massa-ai/cursor-plugin 1.53.0 → 1.55.0
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/.cursor-plugin/plugin.json +1 -1
- package/agent-profiles/balanced/massa-ai-architecture-specialist.md +1 -1
- package/agent-profiles/balanced/massa-ai-audit-specialist.md +1 -1
- package/agent-profiles/balanced/massa-ai-builder.md +1 -1
- package/agent-profiles/balanced/massa-ai-context-curator.md +1 -1
- package/agent-profiles/balanced/massa-ai-designer.md +1 -1
- package/agent-profiles/balanced/massa-ai-documentation-agent.md +1 -1
- package/agent-profiles/balanced/massa-ai-furps-analyst.md +1 -1
- package/agent-profiles/balanced/massa-ai-investigator.md +1 -1
- package/agent-profiles/balanced/massa-ai-judge.md +1 -1
- package/agent-profiles/balanced/massa-ai-meta-judge.md +1 -1
- package/agent-profiles/balanced/massa-ai-mobile-specialist.md +1 -1
- package/agent-profiles/balanced/massa-ai-navigator.md +1 -1
- package/agent-profiles/balanced/massa-ai-plan-critic.md +1 -1
- package/agent-profiles/balanced/massa-ai-planner.md +1 -1
- package/agent-profiles/balanced/massa-ai-requirements-analyst.md +1 -1
- package/agent-profiles/balanced/massa-ai-reviewer.md +1 -1
- package/agent-profiles/balanced/massa-ai-test-engineer.md +1 -1
- package/agent-profiles/balanced/massa-ai-verification-agent.md +1 -1
- package/agent-profiles/cheap/massa-ai-architecture-specialist.md +1 -1
- package/agent-profiles/cheap/massa-ai-audit-specialist.md +1 -1
- package/agent-profiles/cheap/massa-ai-builder.md +1 -1
- package/agent-profiles/cheap/massa-ai-context-curator.md +1 -1
- package/agent-profiles/cheap/massa-ai-designer.md +1 -1
- package/agent-profiles/cheap/massa-ai-documentation-agent.md +1 -1
- package/agent-profiles/cheap/massa-ai-furps-analyst.md +1 -1
- package/agent-profiles/cheap/massa-ai-investigator.md +1 -1
- package/agent-profiles/cheap/massa-ai-judge.md +1 -1
- package/agent-profiles/cheap/massa-ai-meta-judge.md +1 -1
- package/agent-profiles/cheap/massa-ai-mobile-specialist.md +1 -1
- package/agent-profiles/cheap/massa-ai-navigator.md +1 -1
- package/agent-profiles/cheap/massa-ai-plan-critic.md +1 -1
- package/agent-profiles/cheap/massa-ai-planner.md +1 -1
- package/agent-profiles/cheap/massa-ai-requirements-analyst.md +1 -1
- package/agent-profiles/cheap/massa-ai-reviewer.md +1 -1
- package/agent-profiles/cheap/massa-ai-test-engineer.md +1 -1
- package/agent-profiles/cheap/massa-ai-verification-agent.md +1 -1
- package/agent-profiles/heavy/massa-ai-architecture-specialist.md +1 -1
- package/agent-profiles/heavy/massa-ai-audit-specialist.md +1 -1
- package/agent-profiles/heavy/massa-ai-builder.md +1 -1
- package/agent-profiles/heavy/massa-ai-context-curator.md +1 -1
- package/agent-profiles/heavy/massa-ai-designer.md +1 -1
- package/agent-profiles/heavy/massa-ai-documentation-agent.md +1 -1
- package/agent-profiles/heavy/massa-ai-furps-analyst.md +1 -1
- package/agent-profiles/heavy/massa-ai-investigator.md +1 -1
- package/agent-profiles/heavy/massa-ai-judge.md +1 -1
- package/agent-profiles/heavy/massa-ai-meta-judge.md +1 -1
- package/agent-profiles/heavy/massa-ai-mobile-specialist.md +1 -1
- package/agent-profiles/heavy/massa-ai-navigator.md +1 -1
- package/agent-profiles/heavy/massa-ai-plan-critic.md +1 -1
- package/agent-profiles/heavy/massa-ai-planner.md +1 -1
- package/agent-profiles/heavy/massa-ai-requirements-analyst.md +1 -1
- package/agent-profiles/heavy/massa-ai-reviewer.md +1 -1
- package/agent-profiles/heavy/massa-ai-test-engineer.md +1 -1
- package/agent-profiles/heavy/massa-ai-verification-agent.md +1 -1
- package/agent-profiles/home/massa-ai-architecture-specialist.md +1 -1
- package/agent-profiles/home/massa-ai-audit-specialist.md +1 -1
- package/agent-profiles/home/massa-ai-builder.md +1 -1
- package/agent-profiles/home/massa-ai-context-curator.md +1 -1
- package/agent-profiles/home/massa-ai-designer.md +1 -1
- package/agent-profiles/home/massa-ai-documentation-agent.md +1 -1
- package/agent-profiles/home/massa-ai-furps-analyst.md +1 -1
- package/agent-profiles/home/massa-ai-investigator.md +1 -1
- package/agent-profiles/home/massa-ai-judge.md +1 -1
- package/agent-profiles/home/massa-ai-meta-judge.md +1 -1
- package/agent-profiles/home/massa-ai-mobile-specialist.md +1 -1
- package/agent-profiles/home/massa-ai-navigator.md +1 -1
- package/agent-profiles/home/massa-ai-plan-critic.md +1 -1
- package/agent-profiles/home/massa-ai-planner.md +1 -1
- package/agent-profiles/home/massa-ai-requirements-analyst.md +1 -1
- package/agent-profiles/home/massa-ai-reviewer.md +1 -1
- package/agent-profiles/home/massa-ai-test-engineer.md +1 -1
- package/agent-profiles/home/massa-ai-verification-agent.md +1 -1
- package/agent-profiles/work/massa-ai-architecture-specialist.md +1 -1
- package/agent-profiles/work/massa-ai-audit-specialist.md +1 -1
- package/agent-profiles/work/massa-ai-builder.md +1 -1
- package/agent-profiles/work/massa-ai-context-curator.md +1 -1
- package/agent-profiles/work/massa-ai-designer.md +1 -1
- package/agent-profiles/work/massa-ai-documentation-agent.md +1 -1
- package/agent-profiles/work/massa-ai-furps-analyst.md +1 -1
- package/agent-profiles/work/massa-ai-investigator.md +1 -1
- package/agent-profiles/work/massa-ai-judge.md +1 -1
- package/agent-profiles/work/massa-ai-meta-judge.md +1 -1
- package/agent-profiles/work/massa-ai-mobile-specialist.md +1 -1
- package/agent-profiles/work/massa-ai-navigator.md +1 -1
- package/agent-profiles/work/massa-ai-plan-critic.md +1 -1
- package/agent-profiles/work/massa-ai-planner.md +1 -1
- package/agent-profiles/work/massa-ai-requirements-analyst.md +1 -1
- package/agent-profiles/work/massa-ai-reviewer.md +1 -1
- package/agent-profiles/work/massa-ai-test-engineer.md +1 -1
- package/agent-profiles/work/massa-ai-verification-agent.md +1 -1
- package/agents/massa-ai-architecture-specialist.md +1 -1
- package/agents/massa-ai-audit-specialist.md +1 -1
- package/agents/massa-ai-builder.md +1 -1
- package/agents/massa-ai-context-curator.md +1 -1
- package/agents/massa-ai-designer.md +1 -1
- package/agents/massa-ai-documentation-agent.md +1 -1
- package/agents/massa-ai-furps-analyst.md +1 -1
- package/agents/massa-ai-investigator.md +1 -1
- package/agents/massa-ai-judge.md +1 -1
- package/agents/massa-ai-meta-judge.md +1 -1
- package/agents/massa-ai-mobile-specialist.md +1 -1
- package/agents/massa-ai-navigator.md +1 -1
- package/agents/massa-ai-plan-critic.md +1 -1
- package/agents/massa-ai-planner.md +1 -1
- package/agents/massa-ai-requirements-analyst.md +1 -1
- package/agents/massa-ai-reviewer.md +1 -1
- package/agents/massa-ai-test-engineer.md +1 -1
- package/agents/massa-ai-verification-agent.md +1 -1
- package/install.sh +182 -79
- package/package.json +1 -1
- package/skills/agents/architecture-specialist/SKILL.md +1 -1
- package/skills/agents/audit-specialist/SKILL.md +1 -1
- package/skills/agents/builder/SKILL.md +1 -1
- package/skills/agents/context-curator/SKILL.md +1 -1
- package/skills/agents/designer/SKILL.md +1 -1
- package/skills/agents/documentation-agent/SKILL.md +1 -1
- package/skills/agents/furps-analyst/SKILL.md +1 -1
- package/skills/agents/investigator/SKILL.md +1 -1
- package/skills/agents/judge/SKILL.md +1 -1
- package/skills/agents/meta-judge/SKILL.md +1 -1
- package/skills/agents/mobile-specialist/SKILL.md +1 -1
- package/skills/agents/navigator/SKILL.md +1 -1
- package/skills/agents/plan-critic/SKILL.md +1 -1
- package/skills/agents/planner/SKILL.md +1 -1
- package/skills/agents/requirements-analyst/SKILL.md +1 -1
- package/skills/agents/reviewer/SKILL.md +1 -1
- package/skills/agents/test-engineer/SKILL.md +1 -1
- package/skills/agents/verification-agent/SKILL.md +1 -1
- package/skills/massa-ai/references/architecture-lenses.md +2 -26
- package/skills/massa-ai/references/conversation-feedback.md +1 -13
- package/skills/massa-ai/references/hook-enforcement.md +3 -3
- package/skills/massa-ai/references/lessons.md +2 -2
- package/skills/massa-ai/references/maestro.md +0 -16
- package/skills/massa-ai/workflows/discovery.md +3 -35
- package/skills/massa-ai/workflows/skill-architect.md +8 -28
package/install.sh
CHANGED
|
@@ -11,15 +11,38 @@
|
|
|
11
11
|
# MCP registration is delegated to scripts/install-agents.sh, the single writer
|
|
12
12
|
# of host MCP config. This installer no longer ships a plugin-local mcp.json.
|
|
13
13
|
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
14
|
+
# LOCAL IS THE DEFAULT ROUTE. The Claude bridge is opt-in (--prefer-bridge).
|
|
15
|
+
#
|
|
16
|
+
# Cursor can bridge the Claude marketplace registry from ~/.claude — observed
|
|
17
|
+
# live in Cursor 3.14's "Cursor Plugins" exthost log on 2026-08-05
|
|
18
|
+
# ("loadClaudePlugin massa-ai@massa-ai"). This installer used to PREFER that
|
|
19
|
+
# bridge at user scope: on detection it deleted its own plugin directory and
|
|
20
|
+
# stripped its hook wiring, on the premise that the bridge loads the whole
|
|
21
|
+
# plugin.
|
|
22
|
+
#
|
|
23
|
+
# Measured on Cursor 3.16.17 (2026-08-17), with massa-ai listed and
|
|
24
|
+
# `enabledPlugins` true in ~/.claude, that premise is at best half true:
|
|
25
|
+
#
|
|
26
|
+
# hooks → fire in Cursor
|
|
27
|
+
# plugin → absent from the Cursor UI
|
|
28
|
+
# commands → absent (all 46 workflow commands)
|
|
29
|
+
#
|
|
30
|
+
# So bridge-preference silently withheld a working local install, and the user
|
|
31
|
+
# lost every workflow command with nothing replacing them. Detection reads
|
|
32
|
+
# ~/.claude, which is a fact about CLAUDE's files — never proof that Cursor
|
|
33
|
+
# loaded anything from them — and nothing here can observe the difference.
|
|
34
|
+
#
|
|
35
|
+
# The default therefore installs everything locally. --prefer-bridge (or
|
|
36
|
+
# MASSA_AI_CURSOR_PREFER_BRIDGE=1) restores the old behaviour for anyone whose
|
|
37
|
+
# bridge does deliver hooks.
|
|
38
|
+
#
|
|
39
|
+
# AD-017 TRADE-OFF, STATED PLAINLY: if the bridge IS delivering hooks and you
|
|
40
|
+
# take the default, both sources are live and every hook fires TWICE. The
|
|
41
|
+
# install warns when it detects that combination. Choose --prefer-bridge, or
|
|
42
|
+
# disable massa-ai in ~/.claude/settings.json, to keep exactly one source.
|
|
43
|
+
#
|
|
44
|
+
# Project-scope installs never consult the bridge — ~/.claude is a user
|
|
45
|
+
# surface, never a project one.
|
|
23
46
|
#
|
|
24
47
|
# Idempotent: re-running is a no-op when owned entries already present.
|
|
25
48
|
# Uninstall removes only ownership-marked entries + the plugin directory,
|
|
@@ -29,6 +52,13 @@
|
|
|
29
52
|
# apps/cursor-plugin/install.sh # install at user scope (~/.cursor)
|
|
30
53
|
# apps/cursor-plugin/install.sh --user # (same)
|
|
31
54
|
# apps/cursor-plugin/install.sh --project # install at project scope (./.cursor)
|
|
55
|
+
# apps/cursor-plugin/install.sh --prefer-bridge # leave hook wiring to the
|
|
56
|
+
# # Claude bridge instead of
|
|
57
|
+
# # installing it locally; use when
|
|
58
|
+
# # bridge-delivered hooks DO fire
|
|
59
|
+
# # in your Cursor, to avoid every
|
|
60
|
+
# # hook firing twice. Same as
|
|
61
|
+
# # MASSA_AI_CURSOR_PREFER_BRIDGE=1
|
|
32
62
|
# apps/cursor-plugin/install.sh --uninstall # remove owned entries + plugin dir
|
|
33
63
|
# apps/cursor-plugin/install.sh -h|--help # show this help
|
|
34
64
|
|
|
@@ -41,11 +71,26 @@ CLAUDE_PLUGIN_BIN="$REPO_ROOT/apps/claude-plugin/hooks/massa-ai-hook.ts"
|
|
|
41
71
|
SCOPE="user"
|
|
42
72
|
UNINSTALL=0
|
|
43
73
|
DRY_RUN=0
|
|
74
|
+
# Local is the DEFAULT route; the Claude bridge is opt-in.
|
|
75
|
+
#
|
|
76
|
+
# Bridge detection reads ~/.claude — a fact about CLAUDE's files — and infers
|
|
77
|
+
# from it that Cursor is loading massa-ai. That inference cannot be verified
|
|
78
|
+
# from here, and it was measured wrong on Cursor 3.16.17: the plugin and its
|
|
79
|
+
# 46 workflow commands were absent from the Cursor UI while ~/.claude said the
|
|
80
|
+
# plugin was installed and enabled. Preferring the bridge by default therefore
|
|
81
|
+
# meant silently withholding a working local install on the strength of a
|
|
82
|
+
# claim about a different product.
|
|
83
|
+
#
|
|
84
|
+
# So the default installs everything locally, and --prefer-bridge (or
|
|
85
|
+
# MASSA_AI_CURSOR_PREFER_BRIDGE=1) opts into leaving hook wiring to the
|
|
86
|
+
# bridge. See the AD-017 double-fire note where PREFER_BRIDGE is consumed.
|
|
87
|
+
PREFER_BRIDGE="${MASSA_AI_CURSOR_PREFER_BRIDGE:-0}"
|
|
44
88
|
|
|
45
89
|
for arg in "$@"; do
|
|
46
90
|
case "$arg" in
|
|
47
91
|
--user) SCOPE="user" ;;
|
|
48
92
|
--project) SCOPE="project" ;;
|
|
93
|
+
--prefer-bridge) PREFER_BRIDGE=1 ;;
|
|
49
94
|
--uninstall) UNINSTALL=1 ;;
|
|
50
95
|
--quiet) MASSA_AI_VERBOSE=0 ;;
|
|
51
96
|
--verbose) MASSA_AI_VERBOSE=1 ;;
|
|
@@ -249,14 +294,37 @@ if (typeof cfg.hooks !== "object" || cfg.hooks === null) cfg.hooks = {};
|
|
|
249
294
|
|
|
250
295
|
const hooks = cfg.hooks;
|
|
251
296
|
|
|
297
|
+
// Ownership test — marker first, command shape as the fallback. The marker is
|
|
298
|
+
// precise but not the only way our entries reach this file: an entry written by
|
|
299
|
+
// a release before the marker existed, or copied by hand from documentation,
|
|
300
|
+
// carries none, and was invisible to BOTH directions here — never deduped on
|
|
301
|
+
// install, never removed on uninstall. Claude's copy of this merge had exactly
|
|
302
|
+
// that gap and it double-fired every lifecycle event (measured live
|
|
303
|
+
// 2026-08-17). Referencing the massa-ai-hook binary is unambiguous; a user hook
|
|
304
|
+
// that merely mentions massa-ai elsewhere does not match.
|
|
305
|
+
const OWNED_COMMAND = /massa-ai-hook/;
|
|
306
|
+
|
|
307
|
+
function entryIsOwned(e) {
|
|
308
|
+
if (!e || typeof e !== "object") return false;
|
|
309
|
+
if (e._massaAiOwned === true) return true;
|
|
310
|
+
return typeof e.command === "string" && OWNED_COMMAND.test(e.command);
|
|
311
|
+
}
|
|
312
|
+
|
|
252
313
|
function hasOwned(arr) {
|
|
253
|
-
return Array.isArray(arr) && arr.some(
|
|
314
|
+
return Array.isArray(arr) && arr.some(entryIsOwned);
|
|
254
315
|
}
|
|
255
316
|
|
|
256
317
|
if (mode === "uninstall") {
|
|
257
|
-
|
|
318
|
+
// Back up before removing: this now deletes unmarked entries it did not
|
|
319
|
+
// necessarily write, so the install path's backup discipline applies here too.
|
|
320
|
+
if (existed) {
|
|
321
|
+
fs.copyFileSync(file, `${file}.massa-ai.bak-${ts}`);
|
|
322
|
+
}
|
|
323
|
+
// Every event, not just the ones this release writes — the predicate
|
|
324
|
+
// identifies our commands rather than a location.
|
|
325
|
+
for (const evt of Object.keys(hooks)) {
|
|
258
326
|
if (Array.isArray(hooks[evt])) {
|
|
259
|
-
hooks[evt] = hooks[evt].filter((e) => !(e
|
|
327
|
+
hooks[evt] = hooks[evt].filter((e) => !entryIsOwned(e));
|
|
260
328
|
if (hooks[evt].length === 0) delete hooks[evt];
|
|
261
329
|
}
|
|
262
330
|
}
|
|
@@ -536,86 +604,110 @@ fi
|
|
|
536
604
|
# ── Install ──────────────────────────────────────────────────────────────────
|
|
537
605
|
# PAU-08/09: bridge-preferred, local-fallback. Computed once, used to decide
|
|
538
606
|
# both which artifacts this run writes and what installRoute gets recorded.
|
|
607
|
+
# Local by default. The probe still runs when the bridge is NOT opted into,
|
|
608
|
+
# purely so the AD-017 double-fire warning below can be accurate — its result
|
|
609
|
+
# no longer decides what gets installed.
|
|
539
610
|
IS_BRIDGE=0
|
|
611
|
+
BRIDGE_AVAILABLE=0
|
|
540
612
|
if claude_bridge_detected; then
|
|
541
|
-
|
|
613
|
+
BRIDGE_AVAILABLE=1
|
|
614
|
+
fi
|
|
615
|
+
if [[ "$PREFER_BRIDGE" == "1" ]]; then
|
|
616
|
+
if [[ "$BRIDGE_AVAILABLE" == "1" ]]; then
|
|
617
|
+
IS_BRIDGE=1
|
|
618
|
+
vecho "--prefer-bridge: leaving hook wiring to the Claude bridge."
|
|
619
|
+
else
|
|
620
|
+
# Opting into a bridge that is not there would leave the user with no hooks
|
|
621
|
+
# at all, which is strictly worse than the default. Fall back loudly.
|
|
622
|
+
echo " ⚠ --prefer-bridge requested, but ~/.claude does not list massa-ai as installed and enabled." >&2
|
|
623
|
+
echo " Falling back to a local hook install so hooks are not silently absent." >&2
|
|
624
|
+
fi
|
|
542
625
|
fi
|
|
543
626
|
|
|
544
627
|
skill_count=0
|
|
545
628
|
specialist_count=0
|
|
546
629
|
|
|
547
630
|
if [[ "$IS_BRIDGE" -eq 1 ]]; then
|
|
548
|
-
vecho "
|
|
549
|
-
#
|
|
550
|
-
#
|
|
551
|
-
#
|
|
552
|
-
# stripped with the SAME filter merge_hooks_json's "uninstall" mode already
|
|
553
|
-
# uses — the bridge delivers hooks instead.
|
|
554
|
-
if [[ -d "$LEGACY_PLUGIN_DIR" ]]; then
|
|
555
|
-
rm -rf "$LEGACY_PLUGIN_DIR"
|
|
556
|
-
echo -e " - removed pre-fix plugin copy at $LEGACY_PLUGIN_DIR"
|
|
557
|
-
fi
|
|
558
|
-
if [[ -d "$PLUGIN_DIR" ]]; then
|
|
559
|
-
rm -rf "$PLUGIN_DIR"
|
|
560
|
-
echo -e " - removed local plugin copy at $PLUGIN_DIR (Claude bridge already loads massa-ai)"
|
|
561
|
-
fi
|
|
631
|
+
vecho "Claude-bridge route: ~/.claude lists massa-ai as installed and enabled, so Cursor delivers its HOOKS via the bridge. The plugin bundle is still installed locally — see below."
|
|
632
|
+
# Hook wiring, and only hook wiring, is what the bridge actually delivers.
|
|
633
|
+
# Owned entries are stripped with the SAME filter merge_hooks_json's
|
|
634
|
+
# "uninstall" mode uses, so the bridge's copy is the only one that fires.
|
|
562
635
|
if [[ -f "$HOOKS_JSON" ]]; then
|
|
563
636
|
merge_hooks_json "$HOOKS_JSON" "uninstall"
|
|
564
637
|
echo -e " - removed massa-ai hook entries from $HOOKS_JSON (the bridge delivers hooks instead)"
|
|
565
638
|
fi
|
|
566
|
-
|
|
567
|
-
vecho "Installing massa-ai Cursor plugin to: $PLUGIN_DIR"
|
|
568
|
-
# Migration: a pre-fix install left a copy at plugins/massa-ai. Leaving it in
|
|
569
|
-
# place risks Cursor discovering both and firing every hook twice, so it goes
|
|
570
|
-
# before the new location is written.
|
|
571
|
-
if [[ -d "$LEGACY_PLUGIN_DIR" ]]; then
|
|
572
|
-
rm -rf "$LEGACY_PLUGIN_DIR"
|
|
573
|
-
echo -e " - removed pre-fix plugin copy at $LEGACY_PLUGIN_DIR"
|
|
574
|
-
fi
|
|
575
|
-
mkdir -p "$PLUGIN_DIR/.cursor-plugin" "$PLUGIN_DIR/skills" "$PLUGIN_DIR/hooks"
|
|
576
|
-
# Migration: pre-fix installs bundled agents inside the plugin dir, which
|
|
577
|
-
# Cursor never reads. Drop that copy so upgraders converge on the one real
|
|
578
|
-
# discovery surface and a future Cursor plugin scan cannot double-register.
|
|
579
|
-
if [[ -d "$PLUGIN_DIR/agents" ]]; then
|
|
580
|
-
rm -rf "$PLUGIN_DIR/agents"
|
|
581
|
-
echo -e " - removed pre-fix agents copy at $PLUGIN_DIR/agents (Cursor reads $CURSOR_AGENTS_DIR)"
|
|
582
|
-
fi
|
|
639
|
+
fi
|
|
583
640
|
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
641
|
+
# The plugin bundle (manifest + workflow-command skills) installs on BOTH
|
|
642
|
+
# routes. It used to be skipped whenever the bridge was detected, on the
|
|
643
|
+
# premise that the bridge loads the whole plugin.
|
|
644
|
+
#
|
|
645
|
+
# Measured against Cursor 3.16.17 on 2026-08-17, that premise is half true.
|
|
646
|
+
# With the bridge active — massa-ai listed and `enabledPlugins` true in
|
|
647
|
+
# ~/.claude — hooks DO fire in Cursor, while the plugin and its 46 workflow
|
|
648
|
+
# commands are absent from the UI entirely. The old branch therefore deleted a
|
|
649
|
+
# working local bundle and nothing replaced it: the user kept the hooks and
|
|
650
|
+
# silently lost every workflow command. The header's "Cursor 3.14 also bridges
|
|
651
|
+
# the Claude marketplace registry" was pinned against a 2026-08-05 capture and
|
|
652
|
+
# was never re-verified against a later Cursor.
|
|
653
|
+
#
|
|
654
|
+
# So the two deliveries are gated independently: hooks by $IS_BRIDGE above,
|
|
655
|
+
# the bundle never. Reinstating the bundle on the bridge route cannot
|
|
656
|
+
# double-fire hooks — .cursor-plugin/plugin.json declares only
|
|
657
|
+
# name/version/description, so the bundle carries no hook wiring of its own;
|
|
658
|
+
# $HOOKS_JSON is the only surface that does, and on the bridge route it is
|
|
659
|
+
# left stripped.
|
|
660
|
+
vecho "Installing the massa-ai Cursor plugin bundle to: $PLUGIN_DIR"
|
|
661
|
+
# Migration: a pre-fix install left a copy at plugins/massa-ai. Leaving it in
|
|
662
|
+
# place risks Cursor discovering both and firing every hook twice, so it goes
|
|
663
|
+
# before the new location is written. Runs on both routes.
|
|
664
|
+
if [[ -d "$LEGACY_PLUGIN_DIR" ]]; then
|
|
665
|
+
rm -rf "$LEGACY_PLUGIN_DIR"
|
|
666
|
+
echo -e " - removed pre-fix plugin copy at $LEGACY_PLUGIN_DIR"
|
|
667
|
+
fi
|
|
668
|
+
mkdir -p "$PLUGIN_DIR/.cursor-plugin" "$PLUGIN_DIR/skills" "$PLUGIN_DIR/hooks"
|
|
669
|
+
# Migration: pre-fix installs bundled agents inside the plugin dir, which
|
|
670
|
+
# Cursor never reads. Drop that copy so upgraders converge on the one real
|
|
671
|
+
# discovery surface and a future Cursor plugin scan cannot double-register.
|
|
672
|
+
if [[ -d "$PLUGIN_DIR/agents" ]]; then
|
|
673
|
+
rm -rf "$PLUGIN_DIR/agents"
|
|
674
|
+
echo -e " - removed pre-fix agents copy at $PLUGIN_DIR/agents (Cursor reads $CURSOR_AGENTS_DIR)"
|
|
675
|
+
fi
|
|
605
676
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
677
|
+
# Copy manifest
|
|
678
|
+
cp "$SCRIPT_DIR/.cursor-plugin/plugin.json" "$PLUGIN_DIR/.cursor-plugin/plugin.json"
|
|
679
|
+
vecho " + .cursor-plugin/plugin.json"
|
|
680
|
+
|
|
681
|
+
# Copy the host-command skills (each in a subdirectory: skills/<name>/SKILL.md),
|
|
682
|
+
# quick + generated workflow commands alike. massa-ai/, persona-router/,
|
|
683
|
+
# agents/, and profile/ are the PDO-06 harness bundle, not a Cursor command
|
|
684
|
+
# skill — they are installed separately, into the shared harness skills
|
|
685
|
+
# directory (see "Skills bundling" below), not into this plugin-cache
|
|
686
|
+
# skills/ tree. `profile` was missing from this exclusion pre-fix, which
|
|
687
|
+
# leaked it into the command-skill cache mislabeled as `/profile`.
|
|
688
|
+
for src in "$SCRIPT_DIR/skills/"*/SKILL.md; do
|
|
689
|
+
name="$(basename "$(dirname "$src")")"
|
|
690
|
+
case "$name" in
|
|
691
|
+
massa-ai|persona-router|agents|profile) continue ;;
|
|
692
|
+
esac
|
|
693
|
+
mkdir -p "$PLUGIN_DIR/skills/$name"
|
|
694
|
+
cp "$src" "$PLUGIN_DIR/skills/$name/SKILL.md"
|
|
695
|
+
vecho " + skills/$name/SKILL.md"
|
|
696
|
+
skill_count=$((skill_count + 1))
|
|
697
|
+
done
|
|
698
|
+
|
|
699
|
+
# Copy hooks.json (the placeholder version — installer replaces paths)
|
|
700
|
+
cp "$SCRIPT_DIR/hooks/hooks.json" "$PLUGIN_DIR/hooks/hooks.json"
|
|
701
|
+
vecho " + hooks/hooks.json"
|
|
702
|
+
|
|
703
|
+
# Older installs shipped a plugin-local mcp.json here. Cursor reads
|
|
704
|
+
# ~/.cursor/mcp.json, not the plugin dir, and MCP is now owned by
|
|
705
|
+
# scripts/install-agents.sh — drop the residue so upgraders converge.
|
|
706
|
+
if [[ -f "$PLUGIN_DIR/mcp.json" ]]; then
|
|
707
|
+
rm -f "$PLUGIN_DIR/mcp.json"
|
|
708
|
+
# Not gated by --quiet: this deletes a file in the user's home, so it is a
|
|
709
|
+
# mutation notice rather than per-file chatter.
|
|
710
|
+
echo -e " - removed stale mcp.json (MCP is now registered in ~/.cursor/mcp.json)"
|
|
619
711
|
fi
|
|
620
712
|
|
|
621
713
|
# Flat agents and harness skills are written in BOTH branches (PAU-08/09):
|
|
@@ -708,9 +800,20 @@ fi
|
|
|
708
800
|
# Summary line in quiet mode
|
|
709
801
|
if [ "${MASSA_AI_VERBOSE:-0}" != "1" ]; then
|
|
710
802
|
if [[ "$IS_BRIDGE" -eq 1 ]]; then
|
|
711
|
-
ok "cursor plugin
|
|
803
|
+
ok "cursor plugin installed (${skill_count} skills, ${specialist_count} specialists) — hooks left to the Claude bridge (--prefer-bridge)"
|
|
804
|
+
ok " if massa-ai hooks do NOT fire in Cursor, the bridge is not delivering them: re-run without --prefer-bridge"
|
|
712
805
|
else
|
|
713
806
|
ok "cursor plugin installed (${skill_count} skills, ${specialist_count} specialists, 7 hooks)"
|
|
807
|
+
if [[ "$BRIDGE_AVAILABLE" -eq 1 ]]; then
|
|
808
|
+
# AD-017: both sources live. Not an error — the default is local by
|
|
809
|
+
# design — but the user must be told, because a doubled hook is silent
|
|
810
|
+
# and looks like the tool misbehaving rather than being installed twice.
|
|
811
|
+
echo " ⚠ ~/.claude also lists massa-ai as installed and enabled." >&2
|
|
812
|
+
echo " If Cursor's Claude bridge delivers those hooks, they now fire TWICE" >&2
|
|
813
|
+
echo " (once from the bridge, once from ~/.cursor/hooks.json)." >&2
|
|
814
|
+
echo " Keep one source: re-run with --prefer-bridge, or disable massa-ai" >&2
|
|
815
|
+
echo " in ~/.claude/settings.json (enabledPlugins)." >&2
|
|
816
|
+
fi
|
|
714
817
|
fi
|
|
715
818
|
else
|
|
716
819
|
vecho ""
|
package/package.json
CHANGED
|
@@ -56,7 +56,7 @@ Provide architectural guidance by evaluating structure, suggesting boundaries, a
|
|
|
56
56
|
- Verification Ladder: static (coupling, depth, boundary) checks; no behavioral changes.
|
|
57
57
|
- Massa-ai Memory: suggest durable architecture-decision memories only when a boundary or abstraction is recommended; main agent persists.
|
|
58
58
|
- Synapse: own ephemeral session when evaluation spans multiple modules with repeated searches.
|
|
59
|
-
- References: `references/architecture-lenses.md`, `references/architecture-domain-lens.md`, `references/architecture-coupling-lens.md`, `references/architecture-deepening-lens.md`.
|
|
59
|
+
- References (paths relative to the `massa-ai` skill directory): `references/architecture-lenses.md`, `references/architecture-domain-lens.md`, `references/architecture-coupling-lens.md`, `references/architecture-deepening-lens.md`.
|
|
60
60
|
|
|
61
61
|
## Validation Sensors
|
|
62
62
|
- Every finding has a `path:line` or metric pointer.
|
|
@@ -72,7 +72,7 @@ All lenses share `references/audit-scope.md` (scope rules) and `references/audit
|
|
|
72
72
|
- Verification Ladder: static checks per lens; no behavioral changes (findings-only).
|
|
73
73
|
- Massa-ai Memory: suggest durable audit-pattern memories only when a lens reveals a recurring issue class; main agent persists.
|
|
74
74
|
- Synapse: own ephemeral session when the audit spans multiple modules with repeated searches.
|
|
75
|
-
- References: `references/audit-scope.md`, `references/audit-report-io.md`, plus the per-lens references above.
|
|
75
|
+
- References (paths relative to the `massa-ai` skill directory): `references/audit-scope.md`, `references/audit-report-io.md`, plus the per-lens references above.
|
|
76
76
|
|
|
77
77
|
## Validation Sensors
|
|
78
78
|
- Every finding has a `path:line` pointer.
|
|
@@ -58,7 +58,7 @@ Implement an approved plan or task by modifying source code with a disjoint writ
|
|
|
58
58
|
- Verification Ladder: run the task's sensors (static + behavioral) before claiming Complete.
|
|
59
59
|
- Massa-ai Memory: suggest durable code-pattern memories only when the implementation establishes a reusable convention; main agent persists.
|
|
60
60
|
- Synapse: none (implementation is not a repeated-search task).
|
|
61
|
-
- References: `references/agent-orchestration.md`, `references/naming-standards.md`, `references/code-annotation.md`, `references/root-cause-scripts.md`.
|
|
61
|
+
- References (paths relative to the `massa-ai` skill directory): `references/agent-orchestration.md`, `references/naming-standards.md`, `references/code-annotation.md`, `references/root-cause-scripts.md`.
|
|
62
62
|
|
|
63
63
|
## Validation Sensors
|
|
64
64
|
- Verification commands from the plan pass (tests, build, typecheck, lint).
|
|
@@ -58,7 +58,7 @@ Prepare the minimum high-quality Context Packet required for another agent to do
|
|
|
58
58
|
- Verification Ladder: static checks only (file existence, reference existence).
|
|
59
59
|
- Massa-ai Memory: retrieve via `recall`; do not persist unless the main agent assigns it.
|
|
60
60
|
- Synapse: own ephemeral session per `references/synapse-policy.md`; pass `synapseSessionId` on every `search`.
|
|
61
|
-
- References: `references/context-firewall.md`, `references/synapse-policy.md`, `references/mcp-tools.md`.
|
|
61
|
+
- References (paths relative to the `massa-ai` skill directory): `references/context-firewall.md`, `references/synapse-policy.md`, `references/mcp-tools.md`.
|
|
62
62
|
|
|
63
63
|
## Validation Sensors
|
|
64
64
|
- Every file in the Context Packet exists (`test -f`).
|
|
@@ -59,7 +59,7 @@ Own the screen: verify an existing user-facing screen against its design source,
|
|
|
59
59
|
- Verification Ladder: behavioral (the UI module builds and its tests pass) and file-integrity (no validation asset weakened).
|
|
60
60
|
- Massa-ai Memory: suggest durable memories only when a reusable screen or design-token convention is established; the main agent persists.
|
|
61
61
|
- Synapse: none by default; request an ephemeral session only when the scope needs two or more related searches across the UI layer.
|
|
62
|
-
- References: `references/figma-pre-analysis.md`, `references/figma-wiring.md`, `references/design-implementation.md`, `references/naming-standards.md`, `references/verification-ladder.md`.
|
|
62
|
+
- References (paths relative to the `massa-ai` skill directory): `references/figma-pre-analysis.md`, `references/figma-wiring.md`, `references/design-implementation.md`, `references/naming-standards.md`, `references/verification-ladder.md`.
|
|
63
63
|
|
|
64
64
|
## Validation Sensors
|
|
65
65
|
- Every design element in scope appears in the conformance table with a verdict, or the table states why the design source did not cover it.
|
|
@@ -56,7 +56,7 @@ Generate engineering documentation artifacts (README, ADR, RFC, changelog, KDoc,
|
|
|
56
56
|
- Verification Ladder: static (doc-lint, stale-reference, link check); no behavioral sensors.
|
|
57
57
|
- Massa-ai Memory: suggest durable doc-format memories only when a documentation convention is established; main agent persists.
|
|
58
58
|
- Synapse: none (documentation is not a repeated-search task).
|
|
59
|
-
- References: `references/adr-authoring.md`, `references/rfc/`.
|
|
59
|
+
- References (paths relative to the `massa-ai` skill directory): `references/adr-authoring.md`, `references/rfc/`.
|
|
60
60
|
|
|
61
61
|
## Validation Sensors
|
|
62
62
|
- Stale-reference scan passes (no dead links to removed files).
|
|
@@ -60,7 +60,7 @@ Analyze exactly one FURPS+ dimension of a PRD or ADR against its checklist secti
|
|
|
60
60
|
- Verification Ladder: static evidence checks only — source-location proof per claim, absent-claim detection per `missing`.
|
|
61
61
|
- Massa-ai Memory: suggest durable memories only when a reusable refinement pattern is discovered; the main agent persists.
|
|
62
62
|
- Synapse: own ephemeral session when >= 2 searches are expected, per `references/synapse-policy.md`.
|
|
63
|
-
- References: `references/furps/checklist.md`, `references/furps/report-contract.md`, `references/furps/intake.md`, `references/agent-orchestration.md`.
|
|
63
|
+
- References (paths relative to the `massa-ai` skill directory): `references/furps/checklist.md`, `references/furps/report-contract.md`, `references/furps/intake.md`, `references/agent-orchestration.md`.
|
|
64
64
|
|
|
65
65
|
## Validation Sensors
|
|
66
66
|
- Source-location proof (quote plus section) for every `covered`/`partial` claim.
|
|
@@ -59,7 +59,7 @@ Read and understand the codebase to answer engineering questions without modifyi
|
|
|
59
59
|
- Verification Ladder: static checks (grep, search) and file-integrity; no behavioral changes.
|
|
60
60
|
- Massa-ai Memory: suggest durable architecture/dependency memories only when useful; main agent persists.
|
|
61
61
|
- Synapse: own ephemeral session per `references/synapse-policy.md`; pass `synapseSessionId` on every `search`.
|
|
62
|
-
- References: `references/codebase-investigation.md`, `references/agent-orchestration.md`, `references/synapse-policy.md`.
|
|
62
|
+
- References (paths relative to the `massa-ai` skill directory): `references/codebase-investigation.md`, `references/agent-orchestration.md`, `references/synapse-policy.md`.
|
|
63
63
|
|
|
64
64
|
## Validation Sensors
|
|
65
65
|
- Source-backed evidence for every claim (`path:line`).
|
|
@@ -80,7 +80,7 @@ next_step: <string>
|
|
|
80
80
|
- Verification Ladder: every score cites a quotation; a score without a quote is a sensor failure.
|
|
81
81
|
- Massa-ai Memory: suggest durable memories only for reusable evaluation failure patterns; the main agent persists.
|
|
82
82
|
- Policy: the orchestrator owns dispatch, consensus arithmetic, and the final verdict; this agent owns its scores and its file only.
|
|
83
|
-
- References: `references/agent-orchestration.md`, `references/audit-report-io.md` (Judge With Debate Report Contracts).
|
|
83
|
+
- References (paths relative to the `massa-ai` skill directory): `references/agent-orchestration.md`, `references/audit-report-io.md` (Judge With Debate Report Contracts).
|
|
84
84
|
|
|
85
85
|
## Model Hint
|
|
86
86
|
See `references/agent-orchestration.md` (Model Diversity Fallback): `metadata.model_tier`
|
|
@@ -71,7 +71,7 @@ overall: weighted-mean
|
|
|
71
71
|
- Verification Ladder: every criterion must be checkable by quoting the artifact — a criterion that cannot be evidenced is not a criterion.
|
|
72
72
|
- Massa-ai Memory: suggest durable memories only for reusable rubric patterns; the main agent persists.
|
|
73
73
|
- Policy: the main agent (judge-with-debate orchestrator) owns dispatch, YAML validation, retry, and consensus; this agent owns the specification only.
|
|
74
|
-
- References: `references/agent-orchestration.md`, `references/audit-report-io.md` (Judge With Debate Report Contracts).
|
|
74
|
+
- References (paths relative to the `massa-ai` skill directory): `references/agent-orchestration.md`, `references/audit-report-io.md` (Judge With Debate Report Contracts).
|
|
75
75
|
|
|
76
76
|
## Model Hint
|
|
77
77
|
See `references/agent-orchestration.md` (Model Diversity Fallback): `metadata.model_tier`
|
|
@@ -73,7 +73,7 @@ If none are present, refuse with: `Non-mobile target. Refusing mobile-specialist
|
|
|
73
73
|
- Verification Ladder: platform-specific static checks when available; no behavioral changes.
|
|
74
74
|
- Massa-ai Memory: suggest durable mobile-decision memories only when a platform constraint or lifecycle pattern is established; main agent persists.
|
|
75
75
|
- Synapse: own ephemeral session when guidance spans multiple mobile modules with repeated searches.
|
|
76
|
-
- References: `references/mobile-context.md`, `references/mobile-diagnosis.md`, `references/maestro.md`.
|
|
76
|
+
- References (paths relative to the `massa-ai` skill directory): `references/mobile-context.md`, `references/mobile-diagnosis.md`, `references/maestro.md`.
|
|
77
77
|
|
|
78
78
|
## Validation Sensors
|
|
79
79
|
- At least one detection signal is confirmed present before guidance is given.
|
|
@@ -66,7 +66,7 @@ The user's codebase is **already indexed** by massa-ai. The first move on any qu
|
|
|
66
66
|
- Orphaned-dims recovery: if a vector `search` returns 0 results while other dim tables hold chunks for the project, report to the parent agent that `index` with `forceReindex=true` is required. Do not run it.
|
|
67
67
|
- Context Firewall: summarize search output; return only `path:line` pointers and findings.
|
|
68
68
|
- Massa-ai Memory: suggest durable navigation facts (entry points, ownership boundaries) only when reusable; the main agent persists.
|
|
69
|
-
- References: `references/mcp-tools.md`, `references/codebase-investigation.md`, `references/synapse-policy.md`, `references/context-firewall.md`.
|
|
69
|
+
- References (paths relative to the `massa-ai` skill directory): `references/mcp-tools.md`, `references/codebase-investigation.md`, `references/synapse-policy.md`, `references/context-firewall.md`.
|
|
70
70
|
|
|
71
71
|
## Validation Sensors
|
|
72
72
|
- Every claim carries a `path:line` or symbol pointer.
|
|
@@ -79,7 +79,7 @@ Never receives full conversation context.
|
|
|
79
79
|
- Verification Ladder: every challenge names the concrete sensor that would settle it.
|
|
80
80
|
- Massa-ai Memory: suggest durable memories only for reusable failure modes or rejected approaches; the main agent persists.
|
|
81
81
|
- Policy: the main agent owns mode selection, synthesis, plan revision, and the Evidence Gate; this agent owns the critique only.
|
|
82
|
-
- References: `references/agent-orchestration.md`, `references/the-fool/`, `references/verification-ladder.md`.
|
|
82
|
+
- References (paths relative to the `massa-ai` skill directory): `references/agent-orchestration.md`, `references/the-fool/`, `references/verification-ladder.md`.
|
|
83
83
|
|
|
84
84
|
## Validation Sensors
|
|
85
85
|
- Every challenge ties to a plan section plus a concrete evidence gap or falsifiable check.
|
|
@@ -56,7 +56,7 @@ Transform an engineering request into a structured implementation plan.
|
|
|
56
56
|
- Verification Ladder: plan references expected sensors; does not run them.
|
|
57
57
|
- Massa-ai Memory: suggest durable decision memories only when the plan locks a strategy; main agent persists.
|
|
58
58
|
- Synapse: none (planning is not a repeated-search task).
|
|
59
|
-
- References: `references/agent-orchestration.md`, `references/subagent-design.md`.
|
|
59
|
+
- References (paths relative to the `massa-ai` skill directory): `references/agent-orchestration.md`, `references/subagent-design.md`.
|
|
60
60
|
|
|
61
61
|
## Validation Sensors
|
|
62
62
|
- Every step in the plan references a concrete file, module, or task.
|
|
@@ -55,7 +55,7 @@ Analyze requirements before implementation to surface ambiguity, gaps, contradic
|
|
|
55
55
|
- Verification Ladder: static (spec citation) only; no behavioral sensors.
|
|
56
56
|
- Massa-ai Memory: suggest durable requirement-decision memories only when an implicit requirement is accepted as an assumption; main agent persists.
|
|
57
57
|
- Synapse: none (analysis is not a repeated-search task).
|
|
58
|
-
- References: `references/spec-driven/specify.md`, `references/furps/`.
|
|
58
|
+
- References (paths relative to the `massa-ai` skill directory): `references/spec-driven/specify.md`, `references/furps/`.
|
|
59
59
|
|
|
60
60
|
## Validation Sensors
|
|
61
61
|
- Every finding cites a requirement ID or spec section.
|
|
@@ -57,7 +57,7 @@ Review implementation quality by analyzing the diff and flagging bugs, regressio
|
|
|
57
57
|
- Verification Ladder: static checks (lint, typecheck) as supporting evidence; behavioral checks belong to verification-agent.
|
|
58
58
|
- Massa-ai Memory: suggest durable code-quality memories only when a review reveals a reusable pattern; main agent persists.
|
|
59
59
|
- Synapse: none (review is not a repeated-search task).
|
|
60
|
-
- References: `references/agent-orchestration.md`.
|
|
60
|
+
- References (paths relative to the `massa-ai` skill directory): `references/agent-orchestration.md`.
|
|
61
61
|
|
|
62
62
|
## Validation Sensors
|
|
63
63
|
- Every finding has a `path:line` pointer.
|
|
@@ -58,7 +58,7 @@ Generate a testing strategy that covers unit, integration, edge cases, negative
|
|
|
58
58
|
- Verification Ladder: behavioral (tests) and file-integrity (no validation assets weakened).
|
|
59
59
|
- Massa-ai Memory: suggest durable test-pattern memories only when a testing convention is established; main agent persists.
|
|
60
60
|
- Synapse: none (test planning is not a repeated-search task).
|
|
61
|
-
- References: `references/verification-ladder.md`, `references/code-annotation.md`, `references/root-cause-scripts.md`.
|
|
61
|
+
- References (paths relative to the `massa-ai` skill directory): `references/verification-ladder.md`, `references/code-annotation.md`, `references/root-cause-scripts.md`.
|
|
62
62
|
|
|
63
63
|
## Validation Sensors
|
|
64
64
|
- Every acceptance criterion maps to at least one test case.
|
|
@@ -55,7 +55,7 @@ Centralize Verification Ladder logic and validate that a task's output meets its
|
|
|
55
55
|
- Verification Ladder: this agent IS the ladder; choose the cheapest sufficient evidence first.
|
|
56
56
|
- Massa-ai Memory: suggest durable verification-recipe memories only when a sensor pattern is reusable; main agent persists.
|
|
57
57
|
- Synapse: none (verification is not a repeated-search task).
|
|
58
|
-
- References: `references/verification-ladder.md`, `references/evidence-gate.md`.
|
|
58
|
+
- References (paths relative to the `massa-ai` skill directory): `references/verification-ladder.md`, `references/evidence-gate.md`.
|
|
59
59
|
|
|
60
60
|
## Validation Sensors
|
|
61
61
|
- Every acceptance criterion has a PASS/FAIL verdict with evidence.
|
|
@@ -39,28 +39,7 @@ Analyze dependency cost with strength, distance, and volatility.
|
|
|
39
39
|
|
|
40
40
|
Load `references/architecture-coupling-lens.md` when the audit target includes dependencies, imports, service calls, shared schemas/models, direct persistence access, co-change, or contract leakage.
|
|
41
41
|
|
|
42
|
-
Strength
|
|
43
|
-
|
|
44
|
-
- Intrusive: downstream depends on internals not designed for integration.
|
|
45
|
-
- Functional: sequential, transactional, or duplicated symmetric business rules.
|
|
46
|
-
- Model: upstream exposes internal domain model to downstream.
|
|
47
|
-
- Contract: integration-specific DTO/protocol hides internals.
|
|
48
|
-
|
|
49
|
-
Distance levels:
|
|
50
|
-
|
|
51
|
-
- same function or class
|
|
52
|
-
- same package
|
|
53
|
-
- same module/library
|
|
54
|
-
- different service
|
|
55
|
-
- external system or team
|
|
56
|
-
|
|
57
|
-
Volatility signals:
|
|
58
|
-
|
|
59
|
-
- core business logic
|
|
60
|
-
- frequent git changes or co-change
|
|
61
|
-
- TODO/FIXME clusters
|
|
62
|
-
- evolving API versions
|
|
63
|
-
- fragile tests or recurring regressions
|
|
42
|
+
Strength, distance, and volatility level definitions: full detail in `references/architecture-coupling-lens.md`.
|
|
64
43
|
|
|
65
44
|
Flag highest risk when high strength, high distance, and high volatility combine.
|
|
66
45
|
|
|
@@ -88,10 +67,7 @@ Check:
|
|
|
88
67
|
- test-only extraction that loses locality
|
|
89
68
|
- concepts split across many files without leverage
|
|
90
69
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
- If deleting a module removes complexity, it was probably shallow.
|
|
94
|
-
- If deleting it spreads complexity across callers, it was probably earning its keep.
|
|
70
|
+
Deletion test: full detail in `references/architecture-deepening-lens.md`.
|
|
95
71
|
|
|
96
72
|
Only recommend a new seam when variation, dependency direction, external I/O, or test substitution is real.
|
|
97
73
|
|
|
@@ -17,19 +17,7 @@ repeated micro-events.
|
|
|
17
17
|
|
|
18
18
|
## Line Shape
|
|
19
19
|
|
|
20
|
-
Each status update must be 1-2 lines. Use an emoji, a capitalized label in square brackets, and one or two plain sentences.
|
|
21
|
-
|
|
22
|
-
Do:
|
|
23
|
-
|
|
24
|
-
```md
|
|
25
|
-
🔵 [Start] Planning visual feedback for massa-ai. Workflow: Spec Driven. Session: Visual Feedback.
|
|
26
|
-
🔄 [Loading] Reading AGENTS.md and massa-ai router guidance before planning.
|
|
27
|
-
🧠 [Context] Found 8 relevant massa-ai memories and queried the requested NotebookLM source.
|
|
28
|
-
🤖 [Agent Running] Plan Critic is checking failure modes for the proposed design.
|
|
29
|
-
⚠️ [Divergence] Expected the legacy router path, but this checkout uses skills/massa-ai/SKILL.md.
|
|
30
|
-
✅ [Verified] Stale-reference checks and skill validation passed.
|
|
31
|
-
🏁 [Finished] Plan complete. Changed files: none. Remaining risk: none found.
|
|
32
|
-
```
|
|
20
|
+
Each status update must be 1-2 lines. Use an emoji, a capitalized label in square brackets, and one or two plain sentences. The worked example is not repeated here — it lives in the canonical policy block named under Policy Source above, which is always in context.
|
|
33
21
|
|
|
34
22
|
Avoid terse machine-shaped status lines, lowercase labels, equals-sign syntax, and tiny abbreviations.
|
|
35
23
|
|
|
@@ -131,7 +131,7 @@ recall stays owned by the router.
|
|
|
131
131
|
|
|
132
132
|
| Failure | Behavior |
|
|
133
133
|
|---|---|
|
|
134
|
-
| massa-ai REST unavailable | lesson still lands in `lessons.json`;
|
|
135
|
-
| `.specs/STATE.md` absent / workflow unset | stop gate falls back to flat matrix |
|
|
134
|
+
| massa-ai REST unavailable | lesson still lands in `lessons.json`; the memory write is fire-and-forget and is dropped silently (a timeout emits a `deadline-on-fire` JSON breadcrumb on **stderr**, nothing is written to disk) |
|
|
135
|
+
| `.specs/project/STATE.md` absent / workflow unset | stop gate falls back to flat matrix |
|
|
136
136
|
| bad / malformed stdin | hook exits 0, never blocks |
|
|
137
|
-
| hook non-critical error | exit 0, approve,
|
|
137
|
+
| hook non-critical error | exit 0, approve, degrade silently — there is no skip log file |
|
|
@@ -166,5 +166,5 @@ best-effort. An ungrounded lesson is refused by both `add` and the massa-ai writ
|
|
|
166
166
|
### Self-Check
|
|
167
167
|
|
|
168
168
|
After verification: if a reusable signal was found but no lesson was recorded,
|
|
169
|
-
state the skipped reason.
|
|
170
|
-
|
|
169
|
+
state the skipped reason. Nothing else records it — the hook loop keeps no skip
|
|
170
|
+
log on disk, so your stated reason is the only record.
|