@aperant/framework 0.10.0 → 0.11.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.
Files changed (72) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/cli/commands/catch-up.d.mts +9 -0
  3. package/dist/cli/commands/catch-up.d.mts.map +1 -0
  4. package/dist/cli/commands/catch-up.mjs +64 -0
  5. package/dist/cli/commands/catch-up.mjs.map +1 -0
  6. package/dist/cli/commands/pr-review.d.mts +16 -4
  7. package/dist/cli/commands/pr-review.d.mts.map +1 -1
  8. package/dist/cli/commands/pr-review.mjs +30 -11
  9. package/dist/cli/commands/pr-review.mjs.map +1 -1
  10. package/dist/cli/commands/route.d.mts.map +1 -1
  11. package/dist/cli/commands/route.mjs +92 -2
  12. package/dist/cli/commands/route.mjs.map +1 -1
  13. package/dist/cli/commands/validate-evidence.d.mts +1 -1
  14. package/dist/cli/config/share-policy.d.mts.map +1 -1
  15. package/dist/cli/config/share-policy.mjs +1 -0
  16. package/dist/cli/config/share-policy.mjs.map +1 -1
  17. package/dist/cli/config/upgrade-gitignore.d.mts.map +1 -1
  18. package/dist/cli/config/upgrade-gitignore.mjs +1 -0
  19. package/dist/cli/config/upgrade-gitignore.mjs.map +1 -1
  20. package/dist/cli/coordination/catch-up.d.mts +26 -0
  21. package/dist/cli/coordination/catch-up.d.mts.map +1 -0
  22. package/dist/cli/coordination/catch-up.mjs +239 -0
  23. package/dist/cli/coordination/catch-up.mjs.map +1 -0
  24. package/dist/cli/coordination/last-seen.d.mts +45 -0
  25. package/dist/cli/coordination/last-seen.d.mts.map +1 -0
  26. package/dist/cli/coordination/last-seen.mjs +128 -0
  27. package/dist/cli/coordination/last-seen.mjs.map +1 -0
  28. package/dist/cli/coordination/store.d.mts +15 -0
  29. package/dist/cli/coordination/store.d.mts.map +1 -1
  30. package/dist/cli/coordination/store.mjs +16 -0
  31. package/dist/cli/coordination/store.mjs.map +1 -1
  32. package/dist/cli/design/frontmatter-schema.d.mts +8 -8
  33. package/dist/cli/dispatch.d.mts.map +1 -1
  34. package/dist/cli/dispatch.mjs +2 -0
  35. package/dist/cli/dispatch.mjs.map +1 -1
  36. package/dist/cli/git/default-branch.d.mts +51 -0
  37. package/dist/cli/git/default-branch.d.mts.map +1 -0
  38. package/dist/cli/git/default-branch.mjs +234 -0
  39. package/dist/cli/git/default-branch.mjs.map +1 -0
  40. package/dist/cli/git/identity.d.mts +3 -5
  41. package/dist/cli/git/identity.d.mts.map +1 -1
  42. package/dist/cli/git/identity.mjs +10 -4
  43. package/dist/cli/git/identity.mjs.map +1 -1
  44. package/dist/cli/install/legacy-paths.d.mts.map +1 -1
  45. package/dist/cli/install/legacy-paths.mjs +2 -0
  46. package/dist/cli/install/legacy-paths.mjs.map +1 -1
  47. package/dist/cli/personas/sidecar.d.mts +1 -1
  48. package/dist/cli/roadmap/lifecycle.d.mts +1 -1
  49. package/dist/cli/roadmap/rollup.d.mts +2 -2
  50. package/dist/plugin/.claude-plugin/plugin.json +2 -1
  51. package/dist/plugin/skills/apt/SKILL.md +29 -0
  52. package/dist/plugin/skills/apt-catch-up/SKILL.md +79 -0
  53. package/dist/plugin/skills/apt-pr-review/SKILL.md +5 -4
  54. package/dist/plugin/skills/apt-setup/SKILL.md +76 -0
  55. package/package.json +138 -138
  56. package/skills/apt/SKILL.md +29 -0
  57. package/skills/apt-catch-up/SKILL.md +79 -0
  58. package/skills/apt-pr-review/SKILL.md +5 -4
  59. package/skills/apt-setup/SKILL.md +76 -0
  60. package/src/cli/commands/catch-up.mjs +67 -0
  61. package/src/cli/commands/pr-review.mjs +32 -11
  62. package/src/cli/commands/route.mjs +92 -1
  63. package/src/cli/config/share-policy.mjs +1 -0
  64. package/src/cli/config/upgrade-gitignore.mjs +1 -0
  65. package/src/cli/coordination/catch-up.mjs +231 -0
  66. package/src/cli/coordination/last-seen.mjs +131 -0
  67. package/src/cli/coordination/store.mjs +18 -0
  68. package/src/cli/dispatch.mjs +2 -0
  69. package/src/cli/git/default-branch.mjs +250 -0
  70. package/src/cli/git/identity.mjs +9 -3
  71. package/src/cli/install/legacy-paths.mjs +2 -0
  72. package/templates/config.json +11 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-branch.mjs","sourceRoot":"","sources":["../../../src/cli/git/default-branch.mjs"],"names":[],"mappings":"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"}
@@ -1,17 +1,15 @@
1
1
  /**
2
2
  * Auto-detect the current user's git identity. Returns null if git config is unset.
3
+ * Memoized per targetDir for the process lifetime (git identity is stable within a CLI invocation).
3
4
  */
4
- export function getGitIdentity(targetDir: any): {
5
- name: string;
6
- email: string;
7
- } | null;
5
+ export function getGitIdentity(targetDir: any): any;
8
6
  /**
9
7
  * Default owner string for roadmap phases when `--owner` is not passed.
10
8
  * Uses the current user's git identity name so solo developers are attributed
11
9
  * automatically. Team-mode skills can override by passing `--owner` explicitly
12
10
  * (typically after prompting against team.json members).
13
11
  */
14
- export function getDefaultOwner(targetDir: any): string;
12
+ export function getDefaultOwner(targetDir: any): any;
15
13
  /**
16
14
  * Auto-detect the current git branch. Returns null if not in a git repo or detached HEAD.
17
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.mts","sourceRoot":"","sources":["../../../src/cli/git/identity.mjs"],"names":[],"mappings":"AAMA;;GAEG;AACH;;;SAeC;AAED;;;;;GAKG;AACH,wDAGC;AAED;;GAEG;AACH,gEAWC"}
1
+ {"version":3,"file":"identity.d.mts","sourceRoot":"","sources":["../../../src/cli/git/identity.mjs"],"names":[],"mappings":"AAQA;;;GAGG;AACH,oDAkBC;AAED;;;;;GAKG;AACH,qDAGC;AAED;;GAEG;AACH,gEAWC"}
@@ -2,10 +2,15 @@
2
2
  * identity.mjs — git user/branch auto-detection helpers (C29).
3
3
  */
4
4
  import { execSync } from 'node:child_process';
5
+ const _identityCache = new Map();
5
6
  /**
6
7
  * Auto-detect the current user's git identity. Returns null if git config is unset.
8
+ * Memoized per targetDir for the process lifetime (git identity is stable within a CLI invocation).
7
9
  */
8
10
  export function getGitIdentity(targetDir) {
11
+ if (_identityCache.has(targetDir))
12
+ return _identityCache.get(targetDir);
13
+ let result = null;
9
14
  try {
10
15
  const name = execSync('git config user.name 2>/dev/null', {
11
16
  cwd: targetDir,
@@ -15,13 +20,14 @@ export function getGitIdentity(targetDir) {
15
20
  cwd: targetDir,
16
21
  encoding: 'utf-8',
17
22
  }).trim();
18
- if (!name || !email)
19
- return null;
20
- return { name, email };
23
+ if (name && email)
24
+ result = { name, email };
21
25
  }
22
26
  catch {
23
- return null;
27
+ /* no git config — result stays null */
24
28
  }
29
+ _identityCache.set(targetDir, result);
30
+ return result;
25
31
  }
26
32
  /**
27
33
  * Default owner string for roadmap phases when `--owner` is not passed.
@@ -1 +1 @@
1
- {"version":3,"file":"identity.mjs","sourceRoot":"","sources":["../../../src/cli/git/identity.mjs"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,SAAS;IACvC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,QAAQ,CAAC,kCAAkC,EAAE;YACzD,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,OAAO;SACjB,CAAC,CAAC,IAAI,EAAE,CAAA;QACT,MAAM,KAAK,GAAG,QAAQ,CAAC,mCAAmC,EAAE;YAC3D,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,OAAO;SACjB,CAAC,CAAC,IAAI,EAAE,CAAA;QACT,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QAChC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IACvB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,SAAS;IACxC,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;IAC1C,OAAO,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAA;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAS;IACzC,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,QAAQ,CAAC,6CAA6C,EAAE;YACtE,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,OAAO;SACjB,CAAC,CAAC,IAAI,EAAE,CAAA;QACT,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAC7C,OAAO,MAAM,CAAA;IACd,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"identity.mjs","sourceRoot":"","sources":["../../../src/cli/git/identity.mjs"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAE,CAAA;AAEhC;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,SAAS;IACvC,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACvE,IAAI,MAAM,GAAG,IAAI,CAAA;IACjB,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,QAAQ,CAAC,kCAAkC,EAAE;YACzD,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,OAAO;SACjB,CAAC,CAAC,IAAI,EAAE,CAAA;QACT,MAAM,KAAK,GAAG,QAAQ,CAAC,mCAAmC,EAAE;YAC3D,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,OAAO;SACjB,CAAC,CAAC,IAAI,EAAE,CAAA;QACT,IAAI,IAAI,IAAI,KAAK;YAAE,MAAM,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACR,uCAAuC;IACxC,CAAC;IACD,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IACrC,OAAO,MAAM,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,SAAS;IACxC,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;IAC1C,OAAO,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAA;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAS;IACzC,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,QAAQ,CAAC,6CAA6C,EAAE;YACtE,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,OAAO;SACjB,CAAC,CAAC,IAAI,EAAE,CAAA;QACT,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAC7C,OAAO,MAAM,CAAA;IACd,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-paths.d.mts","sourceRoot":"","sources":["../../../src/cli/install/legacy-paths.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;;;;;GAMG;AAEH,gDAAgD;AAChD,mCADW,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CA+I1C;;kBArJY,MAAM;kBACN,MAAM;;;;;qBAEN,aAAa,CAAC,MAAM,CAAC"}
1
+ {"version":3,"file":"legacy-paths.d.mts","sourceRoot":"","sources":["../../../src/cli/install/legacy-paths.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;;;;;GAMG;AAEH,gDAAgD;AAChD,mCADW,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAiJ1C;;kBAvJY,MAAM;kBACN,MAAM;;;;;qBAEN,aAAa,CAAC,MAAM,CAAC"}
@@ -86,6 +86,7 @@ export const LEGACY_INSTALL_PATHS = Object.freeze({
86
86
  'agents/apt.md',
87
87
  'agents/apt-author-skill.md',
88
88
  'agents/apt-bootstrap.md',
89
+ 'agents/apt-catch-up.md',
89
90
  'agents/apt-caveman.md',
90
91
  'agents/apt-classify.md',
91
92
  'agents/apt-close-task.md',
@@ -129,6 +130,7 @@ export const LEGACY_INSTALL_PATHS = Object.freeze({
129
130
  'commands/apt.md',
130
131
  'commands/apt-author-skill.md',
131
132
  'commands/apt-bootstrap.md',
133
+ 'commands/apt-catch-up.md',
132
134
  'commands/apt-caveman.md',
133
135
  'commands/apt-classify.md',
134
136
  'commands/apt-close-task.md',
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-paths.mjs","sourceRoot":"","sources":["../../../src/cli/install/legacy-paths.mjs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"legacy-paths.mjs","sourceRoot":"","sources":["../../../src/cli/install/legacy-paths.mjs"],"names":[],"mappings":"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"}
@@ -209,7 +209,7 @@ export type PersonaEvidenceAnchor = {
209
209
  source: "codebase" | "project_md" | "app_wizard";
210
210
  file: string;
211
211
  line_range?: string | undefined;
212
- confidence?: "medium" | "high" | "low" | undefined;
212
+ confidence?: "high" | "low" | "medium" | undefined;
213
213
  };
214
214
  export type Persona = {
215
215
  id?: string | undefined;
@@ -45,7 +45,7 @@ export function applyLifecyclePhaseSideEffect(targetDir: any, task: any, spec: a
45
45
  commit: string | null;
46
46
  rollup: {
47
47
  before: any;
48
- after: "planned" | "completed" | "blocked" | "in-progress" | null;
48
+ after: "completed" | "in-progress" | "planned" | "blocked" | null;
49
49
  changed: boolean;
50
50
  milestone_id: any;
51
51
  };
@@ -16,7 +16,7 @@ export function rollupMilestoneStatus(milestone: object): "completed" | "in-prog
16
16
  */
17
17
  export function applyRollup(roadmap: any, milestoneId: any): {
18
18
  before: any;
19
- after: "planned" | "completed" | "blocked" | "in-progress" | null;
19
+ after: "in-progress" | "completed" | "planned" | "blocked" | null;
20
20
  changed: boolean;
21
21
  milestone_id: any;
22
22
  };
@@ -31,7 +31,7 @@ export function applyRollup(roadmap: any, milestoneId: any): {
31
31
  export function writeRollup(projectDir: any, scope: any, milestoneId: any): {
32
32
  committed: boolean;
33
33
  before: any;
34
- after: "planned" | "completed" | "blocked" | "in-progress" | null;
34
+ after: "in-progress" | "completed" | "planned" | "blocked" | null;
35
35
  changed: boolean;
36
36
  milestone_id: any;
37
37
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aperant",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "AI coding framework — composable skills for planning, executing, verifying, and reviewing code with any LLM provider. Works as Claude Code commands, Codex tasks, or programmatically.",
5
5
  "author": {
6
6
  "name": "Mikalsen AI",
@@ -25,6 +25,7 @@
25
25
  "skills/apt",
26
26
  "skills/apt-author-skill",
27
27
  "skills/apt-bootstrap",
28
+ "skills/apt-catch-up",
28
29
  "skills/apt-caveman",
29
30
  "skills/apt-classify",
30
31
  "skills/apt-close-task",
@@ -75,6 +75,34 @@ SessionStart hook — zero latency on /apt. If `update_check` is null,
75
75
  no chip. Skip the chip entirely once the user has run `/apt:update`
76
76
  in the current session (the cache is cleared there).
77
77
 
78
+ **Catch-up panel (runtime-agnostic):** if the route envelope includes a
79
+ non-null `catch_up` field, print the combined panel BEFORE the mode handler
80
+ runs, regardless of runtime (Claude Code, Codex, Gemini, Cursor, …). The
81
+ panel has two halves; render `catch_up.welcome_back` first, then
82
+ `catch_up.team_digest`. Omit a half whose field is null.
83
+
84
+ If `catch_up.welcome_back` is present (your own half-finished work):
85
+
86
+ ```
87
+ Where you left off: {description} — {lifecycle_phase}{current_subtask ? " · subtask " + current_subtask : ""} ({relative_time})
88
+ {next_step ? " Next: " + next_step : ""}
89
+ {others_count > 0 ? " (+" + others_count + " others · /apt:resume)" : ""}
90
+ ```
91
+
92
+ If `catch_up.team_digest` is present (what teammates merged while you were away):
93
+
94
+ ```
95
+ While you were away:
96
+ {for each entry in team_digest.entries: " #" + number + " " + title + " — " + author}
97
+ {team_digest.more_count > 0 ? " +" + team_digest.more_count + " more on main" : ""}
98
+ ```
99
+
100
+ This is display-only here — the Last-Seen Marker advance happens in route.mjs,
101
+ not in this skill. The panel is computed lazily on interactive (TTY) calls
102
+ only; non-TTY/background/spawned calls carry no `catch_up` field. Do not call
103
+ it an "activity feed", "changelog", or "notifications" — it is the
104
+ Welcome-Back Summary + Team-Change Digest.
105
+
78
106
  Then proceed to the matching mode handler below. Do NOT deviate from the routing decision.
79
107
  </mandatory_first_step>
80
108
 
@@ -129,6 +157,7 @@ Show available commands table:
129
157
  | `apt:scan` | Discover standards + refresh feature registry |
130
158
  | `apt:docs` | Generate/update documentation |
131
159
  | `apt:resume` | Restore context after session break |
160
+ | `apt:catch-up` | Re-view the catch-up panel (Welcome-Back + Team-Change Digest) — never advances the Last-Seen Marker |
132
161
  | `apt:pause` | Human-initiated handoff — save state when YOU need to stop |
133
162
  | `apt:ship` | Create PR with traceability |
134
163
  | `apt:close-task` | Post-merge closer — confirm PR merged, flip phase, drain narration ledger |
@@ -0,0 +1,79 @@
1
+ ---
2
+ name: apt:catch-up
3
+ description: "Re-view the catch-up panel (Welcome-Back + Team-Change Digest) on demand"
4
+ apt-skill-version: {{APT_VERSION}}
5
+ stage: resume
6
+ intent: capture
7
+ when_to_use: "The user dismissed the auto catch-up panel on their last /apt and wants to re-summon it — an idempotent re-view of where they left off plus what teammates merged. Distinct from /apt:resume (full context restore) and never advances the Last-Seen Marker."
8
+ user_invocable: true
9
+ internal: false
10
+ spawns_agent: false
11
+ agent_name: null
12
+ task_context: none
13
+ default_execution_mode: auto
14
+ execution_modes:
15
+ - auto
16
+ allowed-tools: "Bash, Read"
17
+ argument-hint: "apt:catch-up"
18
+ gates: []
19
+ ---
20
+ <objective>
21
+ Recompute and display the combined catch-up panel — the **Welcome-Back
22
+ Summary** (your most-recently-active task, phase, next step) and the
23
+ **Team-Change Digest** (the PRs teammates merged to main since you last
24
+ pulled) — exactly as the auto-on-apt display would show it, but **without
25
+ advancing the Last-Seen Marker**. This is a read-only re-view: a user who
26
+ dismissed the auto panel can re-summon it without disturbing the baseline and
27
+ without invoking the heavier `/apt:resume`.
28
+ </objective>
29
+
30
+ <your_environment>
31
+ - **Working directory:** The project root (where you were invoked)
32
+ - **apt-tools:** `node packages/framework/bin/apt-tools.mjs` or the installed `apt-tools` binary
33
+ - **Last-Seen Marker:** `.aperant/last-seen/{email-slug}.json` (gitignored, per-machine) — this skill READS it but NEVER writes it.
34
+ </your_environment>
35
+
36
+ <process>
37
+
38
+ ## 1. Recompute the panel (read-only)
39
+
40
+ ```bash
41
+ node packages/framework/bin/apt-tools.mjs catch-up .
42
+ ```
43
+
44
+ This computes the SAME panel the interactive route call produces, against the
45
+ **current** marker — and deliberately does **NOT** call `advanceLastSeen`
46
+ (recompute-only contract). Parse the JSON `catch_up` field from the envelope.
47
+
48
+ ## 2. Render the panel
49
+
50
+ Render exactly as the `apt/SKILL.md` "Catch-up panel" block does — Welcome-Back
51
+ half first, then the Team-Change Digest half. Omit a half whose field is null.
52
+
53
+ If `catch_up` is null, tell the user there is nothing new since their last
54
+ visit (no active stale task and no new merges on main).
55
+
56
+ ```
57
+ Where you left off: {description} — {lifecycle_phase} · subtask {current_subtask} ({relative_time})
58
+ Next: {next_step}
59
+ (+{others_count} others · /apt:resume)
60
+
61
+ While you were away:
62
+ #{number} {title} — {author}
63
+ +{more_count} more on main
64
+ ```
65
+
66
+ </process>
67
+
68
+ <notes>
69
+ - **Never advances the marker.** Unlike the auto-on-apt display (which advances
70
+ the Last-Seen Marker after the panel is evaluated), this command is purely a
71
+ re-view. Re-running it is idempotent.
72
+ - **Distinct from `/apt:resume`.** Resume restores full context and routes to
73
+ the next action; catch-up is a lightweight orientation re-view.
74
+ - **v1 is lazy compute.** The panel is computed on demand here, bounded by the
75
+ commits since your last pull. A background pre-warm worker (like the
76
+ update-check worker) is a tracked follow-up (LD-12), not part of v1.
77
+ - **Vocabulary.** This is the Welcome-Back Summary + Team-Change Digest — not an
78
+ "activity feed", "changelog", or "notifications".
79
+ </notes>
@@ -247,10 +247,11 @@ The command resolves in this precedence order:
247
247
 
248
248
  1. `config.json:pr_review.authorship_overrides['pr-${PR_NUMBER}']` (per-PR pin)
249
249
  2. `config.json:pr_review.authorship_override` (global: `owned` | `external` | `auto`)
250
- 3. `gh pr view` → `authorAssociation` + `headRepository.owner.login` vs. viewer login
251
- - `authorAssociation IN (OWNER, MEMBER, COLLABORATOR)` AND same-repo branch → **owned**
252
- - Fork OR `authorAssociation IN (NONE, CONTRIBUTOR, FIRST_TIME_CONTRIBUTOR)` → **external**
253
- 4. Offline / gh unavailable / ambiguous payload → **unknown**
250
+ 3. `gh pr view` → `gh.author.login` vs. viewer login (G44 — `owned` means a PR you **authored**, not a branch you can push to)
251
+ - Same-repo branch AND `gh.author.login === viewer login` → **owned**
252
+ - Any other same-repo PR (a teammate's, or a repo-`OWNER` viewing someone else's PR) → **external** (`authorAssociation` is no longer consulted for the `owned` decision — it is retained only in the human-readable signal)
253
+ - Fork (head-repo owner base-repo owner) → **external**
254
+ 4. Offline / gh unavailable / ambiguous payload → **unknown** (treated as `external` for safety, see below)
254
255
 
255
256
  When the result is `unknown`, treat it as `external` for safety and prompt the user:
256
257
 
@@ -205,6 +205,7 @@ AskUserQuestion([
205
205
  - "Visibility" → jump to **Step 3e** (Batch 6 only), then skip to **Step 4** and **Step 5**
206
206
  - "Task Tracking" → jump to **Step 3g** (Batch 8 only), then skip to **Step 4** and **Step 5**
207
207
  - "Changelog & Release Notes" → jump to **Step 3h** (Batch 9 only), then skip to **Step 4** and **Step 5**
208
+ - "Collaboration" → jump to **Step 3i** (Batch 10 only), then skip to **Step 4** and **Step 5**
208
209
  - "Everything" → proceed to **Step 2** and run all batches (same as fresh setup). **Legacy-completes-Everything marker write:** if the starting config has no `onboarding` block (legacy unmarked config) and the user completes the full flow, write a full `onboarding` block at Step 5 as `{ completed: true, seeded_from_template: false, seeded_at: <ISO-8601 now> }` to record the explicit onboarding pass.
209
210
  - "Done" → display "Settings unchanged." and exit
210
211
 
@@ -1180,6 +1181,74 @@ The selective-edit pass through Batch 9 MUST respect the §1b dispatch — it do
1180
1181
 
1181
1182
  ---
1182
1183
 
1184
+ ## 3i. Present Settings (Batch 10: Collaboration Catch-Up)
1185
+
1186
+ The **collaboration catch-up** surfaces show on every interactive (TTY) `/apt`
1187
+ call: a **Welcome-Back Summary** (your most-recently-active task + next step,
1188
+ always-on, local-only) and a **Team-Change Digest** (the PRs teammates merged
1189
+ to main since you last pulled — gated to `share.visibility` `team`/`oss`).
1190
+ Written to `.aperant/config.json.collaboration`.
1191
+
1192
+ ```
1193
+ AskUserQuestion([
1194
+ {
1195
+ question: "Show the Welcome-Back Summary when you return after a break?",
1196
+ header: "Welcome-Back",
1197
+ multiSelect: false,
1198
+ options: [
1199
+ { label: "Yes (Recommended)", description: "On your next /apt after the staleness window, surface where you left off — task, phase, next step. Local only." },
1200
+ { label: "No", description: "Never show the welcome-back nudge." }
1201
+ ]
1202
+ },
1203
+ {
1204
+ question: "How many hours away before the Welcome-Back Summary fires?",
1205
+ header: "Threshold (hours)",
1206
+ multiSelect: false,
1207
+ options: [
1208
+ { label: "16 (Recommended)", description: "Roughly 'since yesterday' — fires after an overnight gap." },
1209
+ { label: "8", description: "Fires after a long lunch / half-day gap." },
1210
+ { label: "24", description: "Once-a-day cadence." }
1211
+ ]
1212
+ },
1213
+ {
1214
+ question: "Show the Team-Change Digest (teammates' merged PRs since your last pull)?",
1215
+ header: "Team Digest",
1216
+ multiSelect: false,
1217
+ options: [
1218
+ { label: "Yes (Recommended)", description: "Only computes when share.visibility is team/oss; reads local git history, never fetches." },
1219
+ { label: "No", description: "Never show the digest, even in team/oss mode." }
1220
+ ]
1221
+ },
1222
+ {
1223
+ question: "Maximum PRs to list in the digest before '+N more on main'?",
1224
+ header: "Digest Max Entries",
1225
+ multiSelect: false,
1226
+ options: [
1227
+ { label: "7 (Recommended)", description: "Low-noise ceiling; the rest collapse into a '+N more' tail." },
1228
+ { label: "5", description: "Tighter." },
1229
+ { label: "12", description: "Roomier." }
1230
+ ]
1231
+ }
1232
+ ])
1233
+ ```
1234
+
1235
+ For hosts without structured prompts, present the same four questions as
1236
+ numbered lists (Batch 5 style) and read single-index responses.
1237
+
1238
+ ### 3i.1 Review-Mode routing entry
1239
+
1240
+ The "1b. Review Mode" routing table (§1b) includes "Collaboration" as a
1241
+ selectable edit target — jumping directly back into this Batch 10 picker.
1242
+
1243
+ ### 3i.2 Confirmation row
1244
+
1245
+ Add a row to the Step 8 table:
1246
+ ```
1247
+ | Collaboration | welcome-back {on/off} ({N}h) · team-digest {on/off} (max {M}) |
1248
+ ```
1249
+
1250
+ ---
1251
+
1183
1252
  ## 4. Map Answers to Config
1184
1253
 
1185
1254
  **AUDIT-001 — file-routing contract for per-device fields (UPDATED 0.8.1 for FRAMEWORK-RFC-001):** the
@@ -1295,6 +1364,12 @@ Note: task ids are slug-first since v0.6.6 — the date-format setting controls
1295
1364
  - "Sub-Agents" → `"sub-agents"`
1296
1365
  - "Sequential" → `"sequential"`
1297
1366
 
1367
+ **Collaboration Catch-Up (Batch 10):**
1368
+ - Welcome-Back "Yes" → `collaboration.welcome_back.enabled: true`, "No" → `false`
1369
+ - Threshold → `collaboration.welcome_back.threshold_hours: <8|16|24>`
1370
+ - Team Digest "Yes" → `collaboration.team_digest.enabled: true`, "No" → `false`
1371
+ - Digest Max Entries → `collaboration.team_digest.max_entries: <5|7|12>`
1372
+
1298
1373
  ## 5. Write Config
1299
1374
 
1300
1375
  Write merged config to two files per AUDIT-001 routing (see Step 4 block):
@@ -1402,6 +1477,7 @@ Display:
1402
1477
  | Debate Mode | {Auto / Agent Team / Sub-Agents / Sequential} |
1403
1478
  | Visibility | {solo / team / oss} (overrides if any) |
1404
1479
  | Changelog & Release Notes | dev: {Yes/No}; release-notes: {Yes/No} (audience, persona-filter) |
1480
+ | Collaboration | welcome-back {on/off} ({N}h) · team-digest {on/off} (max {M}) |
1405
1481
  | Saved as Defaults | {Yes/No} |
1406
1482
 
1407
1483
  Config saved to: .aperant/config.json