@creator-notes/cnotes 0.58.0 → 0.59.1
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/dist/lib/brand.d.ts +3 -0
- package/dist/lib/brand.d.ts.map +1 -1
- package/dist/lib/brand.js +3 -0
- package/dist/lib/brand.js.map +1 -1
- package/package.json +1 -1
- package/skills/attention-planner/SKILL.md +207 -89
- package/skills/attention-planner/references/attention-type.md +3 -2
- package/skills/attention-planner/references/card-shapes.md +136 -14
- package/skills/attention-planner/references/evidence-ledger.md +3 -2
- package/skills/attention-planner/references/orientation-canvas.md +112 -0
- package/skills/cnotes/SKILL.md +25 -10
- package/skills/cnotes/references/humanizer.md +3 -2
- package/skills/wayfind/SKILL.md +4 -2
package/dist/lib/brand.d.ts
CHANGED
|
@@ -20,6 +20,9 @@ export declare const BRAND: {
|
|
|
20
20
|
readonly url: "https://creatornotes.app";
|
|
21
21
|
/** Bare domain. */
|
|
22
22
|
readonly domain: "creatornotes.app";
|
|
23
|
+
/** Developer portal (docs only). The API stays on `url`; never a server target. */
|
|
24
|
+
readonly devUrl: "https://cnotes.dev";
|
|
25
|
+
readonly devDomain: "cnotes.dev";
|
|
23
26
|
/** The installed command. */
|
|
24
27
|
readonly command: "cnotes";
|
|
25
28
|
/** Published package name. */
|
package/dist/lib/brand.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/lib/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,KAAK;IAChB,kDAAkD;;IAElD,kEAAkE;;IAElE,mBAAmB;;IAEnB,6BAA6B;;IAE7B,8BAA8B;;IAE9B,uFAAuF;;IAEvF,oCAAoC;;CAE5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/lib/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,KAAK;IAChB,kDAAkD;;IAElD,kEAAkE;;IAElE,mBAAmB;;IAEnB,mFAAmF;;;IAGnF,6BAA6B;;IAE7B,8BAA8B;;IAE9B,uFAAuF;;IAEvF,oCAAoC;;CAE5B,CAAC"}
|
package/dist/lib/brand.js
CHANGED
|
@@ -20,6 +20,9 @@ export const BRAND = {
|
|
|
20
20
|
url: "https://creatornotes.app",
|
|
21
21
|
/** Bare domain. */
|
|
22
22
|
domain: "creatornotes.app",
|
|
23
|
+
/** Developer portal (docs only). The API stays on `url`; never a server target. */
|
|
24
|
+
devUrl: "https://cnotes.dev",
|
|
25
|
+
devDomain: "cnotes.dev",
|
|
23
26
|
/** The installed command. */
|
|
24
27
|
command: "cnotes",
|
|
25
28
|
/** Published package name. */
|
package/dist/lib/brand.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/lib/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,kDAAkD;IAClD,IAAI,EAAE,eAAe;IACrB,kEAAkE;IAClE,GAAG,EAAE,0BAA0B;IAC/B,mBAAmB;IACnB,MAAM,EAAE,kBAAkB;IAC1B,6BAA6B;IAC7B,OAAO,EAAE,QAAQ;IACjB,8BAA8B;IAC9B,WAAW,EAAE,uBAAuB;IACpC,uFAAuF;IACvF,SAAS,EAAE,SAAS;IACpB,oCAAoC;IACpC,IAAI,EAAE,uBAAuB;CACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/lib/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,kDAAkD;IAClD,IAAI,EAAE,eAAe;IACrB,kEAAkE;IAClE,GAAG,EAAE,0BAA0B;IAC/B,mBAAmB;IACnB,MAAM,EAAE,kBAAkB;IAC1B,mFAAmF;IACnF,MAAM,EAAE,oBAAoB;IAC5B,SAAS,EAAE,YAAY;IACvB,6BAA6B;IAC7B,OAAO,EAAE,QAAQ;IACjB,8BAA8B;IAC9B,WAAW,EAAE,uBAAuB;IACpC,uFAAuF;IACvF,SAAS,EAAE,SAAS;IACpB,oCAAoC;IACpC,IAAI,EAAE,uBAAuB;CACrB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: attention-planner
|
|
3
|
-
description: Turn everything that arrived into either finished agent work or one answerable Attention card scheduled as a focus block, then close the loop when the human answers. Use when the user invokes /attention-planner, asks "what needs me today", "plan my attention", "triage the digest", "triage this transcript", "what did I answer", "close the day", "close the week", or says they answered a card ("I filled ATTENTION-12"). Runs on the cnotes CLI and expects the cnotes skill to be installed.
|
|
3
|
+
description: Turn everything that arrived into either finished agent work or one answerable Attention card scheduled as a focus block, then close the loop when the human answers. Use when the user invokes /attention-planner, asks "what needs me today", "plan my attention", "protect a block for <thing>", "triage the digest", "triage this transcript", "what did I answer", "close the day", "close the week", or says they answered a card ("I filled ATTENTION-12"). Runs on the cnotes CLI and expects the cnotes skill to be installed.
|
|
4
4
|
metadata:
|
|
5
|
-
short-description: One
|
|
5
|
+
short-description: One open card at a time, loop closed by the agent
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Attention planner
|
|
9
9
|
|
|
10
10
|
The job: restore the human's control over their commitments, one answerable
|
|
11
11
|
card at a time. The human holds three things an agent cannot supply: judgment,
|
|
12
|
-
authorization, and accountability. The agent
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
authorization, and accountability. The agent's attention is cheap, bounded
|
|
13
|
+
only by its tools, access, runtime, and cost, never by a working day. So route
|
|
14
|
+
every item that arrived to the cheapest resource that can safely settle it,
|
|
15
|
+
hand the human only the residue as a card they can answer in the time it says,
|
|
16
|
+
and when they answer, make things move and say what moved.
|
|
16
17
|
|
|
17
18
|
Felt from the chair: "I answered one thing, five things moved, and I know what
|
|
18
19
|
is still waiting." Judge every write by that sentence. Create the smallest
|
|
@@ -26,31 +27,49 @@ canvas layout, the humanizer). Consult it rather than guessing.
|
|
|
26
27
|
|
|
27
28
|
| Concept | CreatorNotes shape |
|
|
28
29
|
|---|---|
|
|
29
|
-
| Rules | One standing note the human ratified, titled `Attention rules`: hours and timezone, deep units per day and their length, the protected morning, sources the agent may read, actions it may take unasked, actions that always need a yes. Found with `cnotes search "attention rules"`. Mentioned from every card |
|
|
30
|
+
| Rules | One standing note the human ratified, titled `Attention rules`: hours and timezone, deep units per day and their length, the protected morning, protected priorities, sources the agent may read, actions it may take unasked, reviews it may complete unasked, actions that always need a yes. Found with `cnotes search "attention rules"`. Mentioned from every card |
|
|
30
31
|
| Queue | Today's **IncomingDigest** note. The only list. Headings: `Agent completed`, `Ready for shallow window`, `Waiting for Deep Work`, `Moved today`. Versioned through the day, never duplicated. If the intake pipeline wrote none, create today's from what arrived |
|
|
31
|
-
| Card | An **Attention** note: a time-boxed
|
|
32
|
+
| Card | An **Attention** note: a time-boxed interface for one human. Four shapes: **decide** (deep), **make** (deep), **shallow**, and the one-time **rules** card. Tagged `deep` or `shallow` plus a state: `open` (unanswered), `answered` (answer recorded, follow-through running), `closed` (every promise settled). Shapes and worked examples in [references/card-shapes.md](references/card-shapes.md) |
|
|
32
33
|
| Block | A `cnotes focus plan` landed on the card with `--canvas` and `--target`. The only source of truth for when. The card title carries no time, so a moved block never leaves a stale title |
|
|
33
|
-
| Orientation canvas |
|
|
34
|
+
| Orientation canvas | For a deep card whose answer rests on more than the card itself: `ATTENTION-N · Orientation`, built once with `cnotes canvas place` as a left-to-right story with the flow of thought written beside the notes, per [references/orientation-canvas.md](references/orientation-canvas.md). The block opens here. A card that carries everything the reader needs lands its block on the home board instead |
|
|
34
35
|
|
|
35
36
|
An Attention is not a Task. A Task says what work must be done. A card says
|
|
36
37
|
why this needs the human now, gives enough context to decide without opening
|
|
37
38
|
other notes, separates confirmed from inferred, asks only for the inputs that
|
|
38
|
-
person alone can give, states what the agent does after the answer,
|
|
39
|
-
which external actions still wait for approval
|
|
39
|
+
person alone can give, states what the agent does after the answer, names
|
|
40
|
+
which external actions still wait for approval, and says how the agent will
|
|
41
|
+
learn that the answer exists.
|
|
40
42
|
|
|
41
43
|
## Lanes
|
|
42
44
|
|
|
43
45
|
| Lane | What belongs here | Budget | Block |
|
|
44
46
|
|---|---|---|---|
|
|
45
|
-
| Agent automatic | Retrieve, compare, summarize, draft, reproduce, organize. Anything an existing decision or rule already settles |
|
|
46
|
-
| Deep Work |
|
|
47
|
-
| Shallow PM | Approve, send, route, or a two-minute yes or no after the agent prepared the draft | One 30-minute window per working day after the first deep block. Never a deep unit | Lands on the queue, or on the shallow card |
|
|
47
|
+
| Agent automatic | Retrieve, compare, summarize, draft, reproduce, organize. Anything an existing decision or rule already settles | Bounded by tools, access, runtime, and cost. Never by human attention | None. Do it now, version the notes it touched, list it under `Agent completed` |
|
|
48
|
+
| Deep Work | Deciding or making that cannot be drafted and batch-approved. Two shapes: **decide** ends in an answer; **make** ends in an artifact the human had to produce or explore themselves | Deep units from the Rules (default four of 45 minutes, combinable to 90 or 135 for one sitting) | One card, morning first |
|
|
49
|
+
| Shallow PM | Approve, send, route, complete a prepared review, or a two-minute yes or no after the agent prepared the draft | One 30-minute window per working day after the first deep block. Never a deep unit | Lands on the queue, or on the shallow card |
|
|
48
50
|
| Interrupt | A real customer blocked, an irreversible move imminent, a committed response at risk | The next unused deep unit | The card names what it displaced |
|
|
49
51
|
|
|
50
52
|
Inbox processing is never Deep Work. A ready approve-and-send is never Deep
|
|
51
53
|
Work. An unscheduled deep item is not a card; it waits on the queue under
|
|
52
54
|
`Waiting for Deep Work`.
|
|
53
55
|
|
|
56
|
+
## Budgets
|
|
57
|
+
|
|
58
|
+
Three numbers, kept apart because they answer different questions.
|
|
59
|
+
|
|
60
|
+
| Budget | Value | Governs |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| Daily capacity | The Rules' deep units (default four of 45 minutes) | How much sitting time exists. A card's block spends one to three units. Units the block leaves unplanned stay unplanned; a later run may plan a second sitting on the same open card, never a second card |
|
|
63
|
+
| Open cards | One open deep card and one open shallow card at any moment, plus the rules card on the first run | Whether a new card may exist at all. A card leaves this count when it becomes `answered`, so follow-through never blocks the next question |
|
|
64
|
+
| New cards per run | At most one deep and one shallow | How much a single run may add. Three runs a day cannot stack three deep cards: the open-card cap holds across runs. A run that finds the deep slot taken versions that card or leaves the item under `Waiting for Deep Work` |
|
|
65
|
+
|
|
66
|
+
Open cards inherited above the cap (from an older planner, or a run that
|
|
67
|
+
broke the rule) are not planned. The gates in intake step 6 pick the one that
|
|
68
|
+
holds the slot; the rest wait under `Waiting for Deep Work`, named with a
|
|
69
|
+
mention, until it frees. An inherited card is brought up to the current
|
|
70
|
+
contract (shape on the Lane line, the trigger line) only when its block is
|
|
71
|
+
planned, never as a sweep.
|
|
72
|
+
|
|
54
73
|
## Three loops
|
|
55
74
|
|
|
56
75
|
### 1 · Intake (agent, every morning)
|
|
@@ -59,94 +78,165 @@ Work. An unscheduled deep item is not a card; it waits on the queue under
|
|
|
59
78
|
create it exactly as [references/attention-type.md](references/attention-type.md)
|
|
60
79
|
says, then read the rubric back and author to it.
|
|
61
80
|
2. **Read the Rules.** If none exist, this run's only card is the Rules card
|
|
62
|
-
(shape in card-shapes). Do not guess a schedule.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
81
|
+
(shape in card-shapes). Do not guess a schedule. If the Rules exist but
|
|
82
|
+
lack a line this skill reads (protected priorities, reviews the agent may
|
|
83
|
+
complete unasked), treat the missing line as "none", say so on the queue,
|
|
84
|
+
and put the two lines under `Ready for shallow window` as one item. Never
|
|
85
|
+
mint a second Rules card.
|
|
86
|
+
3. **Load the delta, not the world.** `cnotes focus list --days 7`, open and
|
|
87
|
+
answered cards (`cnotes notes list --type Attention --tags open --json`,
|
|
88
|
+
then `--tags answered`), today's queue, the priority board the Rules name
|
|
89
|
+
if any, then what arrived since the last run: `cnotes shared`,
|
|
90
|
+
`cnotes timeline --since 1d`, new Transcript notes, and the digest the
|
|
91
|
+
intake pipeline wrote. A digest or canvas digest is orientation; open the
|
|
92
|
+
underlying notes before any consequential claim.
|
|
69
93
|
4. **Open the run.** `cnotes operations begin --prompt "Attention planner · <date> · intake"`.
|
|
70
94
|
One active run per user: if `begin` refuses, another session is writing.
|
|
71
95
|
Hold the run only while writing.
|
|
72
|
-
5. **Do the agent-automatic work first.**
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
96
|
+
5. **Do the agent-automatic work first.** Settle any `answered` card's
|
|
97
|
+
unfinished follow-through before anything new (loop 3). Then for each
|
|
98
|
+
item ask: can the agent retrieve, compare, draft, reproduce, or organize
|
|
99
|
+
it; does an existing decision or rule settle it; would waiting block a
|
|
100
|
+
customer, a deadline, or a dependent owner; is the evidence ready enough
|
|
101
|
+
to decide? Version the existing notes with the results. Never turn a
|
|
102
|
+
research chore into human attention. If evidence is missing, assign its
|
|
103
|
+
retrieval to the agent or the responsible owner.
|
|
79
104
|
6. **Choose at most one deep item.** Ordered gates, not a score: Interrupt,
|
|
80
|
-
then
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
105
|
+
then a protected priority (an item the Rules or the priority board name
|
|
106
|
+
as protected or highest, in that order), then the one decision or making
|
|
107
|
+
that unlocks the most dependent work, then queue. A busy operational
|
|
108
|
+
decision never outranks a protected priority just because more things
|
|
109
|
+
hang off it. Ties: the earliest real deadline, enough evidence to decide
|
|
110
|
+
now, the least context switching. Search for an open card asking the same
|
|
111
|
+
thing and version it rather than minting a sibling. If the deep slot is
|
|
112
|
+
already taken by an open card, the item waits. If an urgent item displaces
|
|
113
|
+
a planned block, name the displaced block on the card. Never hide the
|
|
114
|
+
trade.
|
|
86
115
|
7. **Write the card.** Read `cnotes types show Attention` and the cnotes
|
|
87
|
-
skill's humanizer reference first.
|
|
88
|
-
|
|
89
|
-
|
|
116
|
+
skill's humanizer reference first. Pick the shape: **decide** when the
|
|
117
|
+
block ends in an answer the agent can act on; **make** when the human must
|
|
118
|
+
produce or explore something themselves (a strategy, a draft only they
|
|
119
|
+
can write, a problem not yet answerable) and the block protects that
|
|
120
|
+
sitting. Question and default first for decide; what the sitting produces
|
|
121
|
+
first for make. Context second, evidence per
|
|
122
|
+
[references/evidence-ledger.md](references/evidence-ledger.md), the
|
|
123
|
+
post-answer contract last, ending with how the agent learns the answer
|
|
124
|
+
exists (step 9 of loop 3). Every card names one existing Project,
|
|
90
125
|
Decision, or Customer with an `advances` mention plus one sentence of what
|
|
91
|
-
becomes true. No such object exists: the work is queue hygiene. Leave it
|
|
92
|
-
the queue and do not invent a Project to hang it on. Mention every note
|
|
93
|
-
`[ID: Title](relationship:verb)`, never as a bare display ID.
|
|
126
|
+
becomes true. No such object exists: the work is queue hygiene. Leave it
|
|
127
|
+
on the queue and do not invent a Project to hang it on. Mention every note
|
|
128
|
+
by `[ID: Title](relationship:verb)`, never as a bare display ID.
|
|
94
129
|
8. **Route artifact review.** When the human must inspect a canvas, section,
|
|
95
130
|
or draft, create the official request only after the artifact exists:
|
|
96
131
|
`cnotes review request <canvas> --reviewer me --target <ref> --brief "…" --acceptance "…" --source ATTENTION-N --idempotency-key "attention-N-<slug>-v1" --json`.
|
|
97
|
-
Paste the returned `url` and `requestId` into the card
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
132
|
+
Paste the returned `url` and `requestId` into the card, and write on the
|
|
133
|
+
card what an `approved` outcome authorizes. Never construct the URL.
|
|
134
|
+
Private comments (`canvas comments add`) are working notes, not a request.
|
|
135
|
+
`comments submit` sends a finished review to someone else's canvas and
|
|
136
|
+
requests nothing.
|
|
137
|
+
9. **Schedule.** Deep card: decide whether it needs an orientation canvas.
|
|
138
|
+
It does when the answer rests on something beyond the card: a standing
|
|
139
|
+
decision that constrains it, a source that left things open, an artifact
|
|
140
|
+
to inspect. Build it per
|
|
141
|
+
[references/orientation-canvas.md](references/orientation-canvas.md)
|
|
142
|
+
(frames, labelled edges, banner, portals, and a text card per step that
|
|
143
|
+
projects the card), then
|
|
144
|
+
`cnotes focus plan --start <ISO with the Rules' offset> --duration 45m|90m|135m --goal "Deep Work · <decision or artifact>" --canvas CANVAS-X --target ATTENTION-N`.
|
|
145
|
+
A card that carries everything the reader needs skips the canvas: land the
|
|
146
|
+
block on the home board with `--canvas <home board> --target ATTENTION-N`,
|
|
147
|
+
or goal-only when there is no home board. Shallow window: one block after
|
|
148
|
+
the first deep block, landed on the queue or the shallow card when that
|
|
149
|
+
note sits on a canvas, goal-only otherwise. Cancel the window when
|
|
150
|
+
`Ready for shallow window` is empty. A block that moves is cancelled
|
|
151
|
+
before it is re-planned. Never plan a closed or past card. Verify with
|
|
152
|
+
`cnotes focus list`.
|
|
108
153
|
10. **Update the queue.** Version today's digest with `Agent completed`,
|
|
109
154
|
`Ready for shallow window`, and `Waiting for Deep Work`. Mark the intake
|
|
110
155
|
source processed only after those writes and plans succeeded.
|
|
111
|
-
11. **Close the run.** Report the card by title, when its block
|
|
112
|
-
agent finished,
|
|
156
|
+
11. **Close the run.** Report the card by title and shape, when its block
|
|
157
|
+
runs, what the agent finished, what waits, and how the agent will learn
|
|
158
|
+
the answer (a scheduled close, or the human saying so). Surface the
|
|
159
|
+
orientation canvas link when one exists.
|
|
113
160
|
|
|
114
161
|
### 2 · Decide (human, time-boxed)
|
|
115
162
|
|
|
116
|
-
The block opens the
|
|
117
|
-
question and the recommended default first; everything else is on
|
|
118
|
-
they want it. They answer by filling the `Your decision` line and
|
|
119
|
-
by replying in chat with the card's title.
|
|
120
|
-
|
|
121
|
-
|
|
163
|
+
The block opens the canvas landed on the card. On a decide card the human
|
|
164
|
+
reads the question and the recommended default first; everything else is on
|
|
165
|
+
the card if they want it. They answer by filling the `Your decision` line and
|
|
166
|
+
saving, or by replying in chat with the card's title. On a make card they
|
|
167
|
+
work in the sitting, then fill the `Outcome` line with what now exists or
|
|
168
|
+
"continue", or leave the produced note versioned; either is an answer. Nothing
|
|
169
|
+
else is asked of them when a scheduled close will find the answer. When no
|
|
170
|
+
schedule exists, the card's last line asks them to say they answered, and
|
|
171
|
+
that one sentence is the whole ritual.
|
|
122
172
|
|
|
123
173
|
### 3 · Close the loop (agent, after each block and at day end)
|
|
124
174
|
|
|
125
|
-
1. **Find answered cards.** An open card
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
175
|
+
1. **Find answered cards.** An open card is answered when its latest version
|
|
176
|
+
has text after `**Your decision:**` or `**Outcome:**`, when a chat reply
|
|
177
|
+
names it, when a make card's produced note carries a version by the human
|
|
178
|
+
after the block started, or when a linked review request reached an
|
|
179
|
+
outcome that maps to an answer. Map every review state explicitly, as
|
|
180
|
+
`cnotes review get <requestId> --json` returns it:
|
|
181
|
+
|
|
182
|
+
| Review state | Meaning for the card |
|
|
183
|
+
|---|---|
|
|
184
|
+
| `submitted`, outcome `approved` | Yes to what the card's `Review action` says the review settles. Follow through on that, and on nothing the card did not name |
|
|
185
|
+
| `submitted`, outcome `changes_requested` | No as drafted. The findings are the human's edit: version the artifact, request again under the next idempotency key (`-v2`), card stays `open` |
|
|
186
|
+
| `submitted`, no outcome | Not an answer; a plain comment send. Read the comments as working notes and keep the card `open` |
|
|
187
|
+
| `returned` | Not an answer. The reason names what the reviewer lacked; supply it and request again |
|
|
188
|
+
| `revoked`, `expired` | Not an answer. The ask died; request again or move the item to the queue |
|
|
189
|
+
| `pending`, `accepted` | Waiting |
|
|
190
|
+
|
|
191
|
+
Execute only when the answer resolves the card's question and grants the
|
|
192
|
+
permission the action needs. A terminal review is not by itself a grant.
|
|
193
|
+
2. **Record the answer.** Open the run, then version the card with a
|
|
194
|
+
`## Follow-through` section (shape in card-shapes): the version number the
|
|
195
|
+
answer was read from, and one line per promised action from `After you
|
|
196
|
+
answer`, each with a status: `done`, `waiting: <whose yes>`,
|
|
197
|
+
`failed: <reason>`, `skipped: <why>`. Tag it `answered,<lane>`. Write this
|
|
198
|
+
before executing anything, so a crash leaves a ledger, not a mystery.
|
|
199
|
+
3. **Execute from the ledger.** Convert the answer into the promised updates:
|
|
129
200
|
version connected notes, produce the promised draft or brief, hand named
|
|
130
|
-
owners their requests.
|
|
131
|
-
|
|
201
|
+
owners their requests. Update each line as it lands. On a rerun, read the
|
|
202
|
+
ledger first: a `done` line is never repeated, a `failed` line is retried,
|
|
203
|
+
a `waiting` line is checked for its yes. A send recorded `done` is never
|
|
204
|
+
sent twice, whatever the queue says.
|
|
205
|
+
4. **Mint durable objects only when the answer created them.** A Decision,
|
|
132
206
|
Requirement, Task, Question, or Issue, and only then. Prefer a new version
|
|
133
207
|
of an existing note over a sibling.
|
|
134
|
-
|
|
208
|
+
5. **Respect the reserved actions.** Customer contact, commitments, deletions,
|
|
135
209
|
and anything irreversible happen only if the answer explicitly approved
|
|
136
|
-
them.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
210
|
+
them. Otherwise the line stays `waiting: <whose yes>` and the ask goes to
|
|
211
|
+
the queue under `Ready for shallow window`.
|
|
212
|
+
6. **Close the card.** Only when no ledger line is `failed` and every
|
|
213
|
+
`waiting` line names a yes that now sits on the queue: version it with a
|
|
214
|
+
`## Closed` section (what was done, what still waits, with mentions), then
|
|
215
|
+
`cnotes notes update ATTENTION-N --tags closed,<lane>`. A card with a
|
|
216
|
+
`failed` line stays `answered` and is the first thing the next run
|
|
217
|
+
settles. A new answer on an already `answered` card (the human edited the
|
|
218
|
+
line after the recorded version) gets a second `Follow-through` block, not
|
|
219
|
+
a silent rerun.
|
|
220
|
+
7. **Open the next card** only if judgment is still needed, and still only
|
|
221
|
+
one, and only if the deep slot is empty.
|
|
222
|
+
8. **Update the queue.** `Moved today`, in outcome language, including any
|
|
223
|
+
follow-through that failed or still waits.
|
|
224
|
+
9. **State the trigger.** The last line of every card's `After you answer`
|
|
225
|
+
says how the agent learns the answer exists: "A scheduled close runs at
|
|
226
|
+
<time>" when a routine exists, or "Tell the agent you answered" when none
|
|
227
|
+
does. Never promise follow-through the host cannot wake up for.
|
|
141
228
|
|
|
142
229
|
## Closing the day and the week
|
|
143
230
|
|
|
144
231
|
**Day.** When the user says so, or after the last block, version today's
|
|
145
232
|
digest with `Moved today`: what is now true that was not true this morning;
|
|
146
233
|
deep units used of the budget; whether the shallow window ran or was
|
|
147
|
-
cancelled; what is still open
|
|
148
|
-
|
|
149
|
-
|
|
234
|
+
cancelled; what is still open, including answered cards whose follow-through
|
|
235
|
+
failed or waits. A move is a change in what is true: a commitment made, a
|
|
236
|
+
blocker released, a decision recorded, an artifact that now exists. A sent
|
|
237
|
+
email or a drafted brief counts by the change it enabled, named in outcome
|
|
238
|
+
language; the artifact alone is not the move. If nothing moved, write that.
|
|
239
|
+
Do not mint a journal or an Achievement note.
|
|
150
240
|
|
|
151
241
|
**Week.** Friday after the last block, version the standing Update titled
|
|
152
242
|
`Attention spend · weekly close` (create it once if it does not exist, never a
|
|
@@ -158,10 +248,14 @@ shows a trade the human must choose.
|
|
|
158
248
|
## Intake sources
|
|
159
249
|
|
|
160
250
|
- **IncomingDigest.** Already synthesized, PII-free evidence. Read only the
|
|
161
|
-
latest version of today's.
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
251
|
+
latest version of today's. PII here means what the pipeline stripped: end
|
|
252
|
+
users' names, emails, phone numbers, ticket IDs, and source-system
|
|
253
|
+
identifiers. Never write those into CreatorNotes. Workspace members, named
|
|
254
|
+
owners, Customer notes (an account, not a person), and speaker attribution
|
|
255
|
+
by role or member name are workspace vocabulary and belong on cards. Join
|
|
256
|
+
Q-IDs only through the owner's private action key if they gave one. Older
|
|
257
|
+
IntakeDigest or DailyAttentionDigest notes are superseded: read them, never
|
|
258
|
+
create them.
|
|
165
259
|
- **Transcript.** Raw evidence, never a reading assignment for the human.
|
|
166
260
|
Preserve it. Write one short Huddle outcome note `derived-from` it,
|
|
167
261
|
separating what participants settled from what they proposed, questioned,
|
|
@@ -169,10 +263,17 @@ shows a trade the human must choose.
|
|
|
169
263
|
artifact production to the named owners. Tag the transcript `digested` only
|
|
170
264
|
after the linked updates and plans succeed. The card carries the
|
|
171
265
|
decision-ready context and links the transcript as provenance only.
|
|
172
|
-
- **Shared with you.** `cnotes shared` is the inbox of asks and shares.
|
|
173
|
-
review assigned to
|
|
174
|
-
target against every criterion,
|
|
175
|
-
|
|
266
|
+
- **Shared with you.** `cnotes shared` is the inbox of asks and shares. The
|
|
267
|
+
agent prepares every review assigned to the human: `cnotes review get`,
|
|
268
|
+
judge the pinned target against every criterion, draft the findings and
|
|
269
|
+
the outcome. It runs `complete` or `return` itself only when the Rules
|
|
270
|
+
delegate that class of review (the Rules card names which). Every other
|
|
271
|
+
prepared review goes under `Ready for shallow window` with the drafted
|
|
272
|
+
outcome as the recommended default, the criterion that fails and the edit
|
|
273
|
+
that would satisfy it, and the human completes it in the window. Dates and
|
|
274
|
+
promises inside a draft go stale while a review waits; check them against
|
|
275
|
+
today before calling a criterion met. Never fabricate an outcome you could
|
|
276
|
+
not judge.
|
|
176
277
|
|
|
177
278
|
## Board hygiene
|
|
178
279
|
|
|
@@ -187,8 +288,9 @@ when the send rests on them.
|
|
|
187
288
|
## Invariants
|
|
188
289
|
|
|
189
290
|
1. Work the agent can do safely never becomes a card.
|
|
190
|
-
2.
|
|
191
|
-
|
|
291
|
+
2. One open deep card and one open shallow card at a time, at most one of
|
|
292
|
+
each minted per run. A shallow card only for a drafted, consequential
|
|
293
|
+
external send. The Rules card is the single exception.
|
|
192
294
|
3. Every card names what it advances with an `advances` mention, or the work
|
|
193
295
|
stays on the queue.
|
|
194
296
|
4. Untested product behaviour is Unknown. It never appears as fact in a
|
|
@@ -196,16 +298,32 @@ when the send rests on them.
|
|
|
196
298
|
Validation, then draft.
|
|
197
299
|
5. A review request carries the server-returned URL and request ID, or it
|
|
198
300
|
does not exist on the card.
|
|
199
|
-
6. PII and source identifiers never enter CreatorNotes from the
|
|
301
|
+
6. End-user PII and source identifiers never enter CreatorNotes from the
|
|
302
|
+
queue.
|
|
200
303
|
7. Intake is marked processed only after the writes and plans succeed.
|
|
304
|
+
8. The agent executes only on an answer that resolves the question and grants
|
|
305
|
+
the permission the action needs. A terminal review, a cancelled ask, or a
|
|
306
|
+
returned review is not an answer.
|
|
307
|
+
9. A card closes only from its follow-through ledger, and a ledger line is
|
|
308
|
+
never repeated once `done`.
|
|
201
309
|
|
|
202
310
|
Triage mints nothing but Attention, plus Comms or Validation when a card will
|
|
203
311
|
approve or rest on that object, plus one Huddle on the transcript path. Every
|
|
204
312
|
other type waits for the answer.
|
|
205
313
|
|
|
206
|
-
##
|
|
314
|
+
## How the agent wakes
|
|
207
315
|
|
|
208
316
|
Three moments: morning intake, the close after the last block, the Friday
|
|
209
|
-
close.
|
|
210
|
-
|
|
211
|
-
|
|
317
|
+
close. The text of this skill cannot wake anyone; only one of these can:
|
|
318
|
+
|
|
319
|
+
- **Scheduled routines**, when the host agent supports them. Schedule all
|
|
320
|
+
three so the card is waiting when the human sits down and the close finds
|
|
321
|
+
the answer without being told. This is the intended mode.
|
|
322
|
+
- **The human's invocation**: "I filled ATTENTION-12", "close the day",
|
|
323
|
+
"what did I answer". Always a trigger, and the only one when no routine
|
|
324
|
+
exists.
|
|
325
|
+
|
|
326
|
+
There is no event trigger: saving an answer or finishing a block does not
|
|
327
|
+
notify the agent. So at the end of intake, say which mode is in force, and
|
|
328
|
+
write it on the card (loop 3, step 9). Automatic follow-through that was
|
|
329
|
+
never scheduled is a broken promise, not a feature.
|
|
@@ -23,7 +23,7 @@ it must never block a quick human capture.
|
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
25
|
RUBRIC=$(cat <<'TXT'
|
|
26
|
-
An Attention note is a time-boxed
|
|
26
|
+
An Attention note is a time-boxed interface for one human. It asks only for judgment, permission, preference, or accountability that an agent cannot supply safely, or protects a sitting in which the human must make or explore something themselves. A good one leads with the question and a recommended default, or with what the sitting produces, says why it needs attention now, gives enough source-grounded context to decide without opening other notes, and states what happens after the answer, which external actions still need approval, and how the agent will learn the answer exists. Keep the time box honest: about two minutes for a shallow approve-or-send, 45 to 135 minutes for deep judgment or making.
|
|
27
27
|
|
|
28
28
|
If you are an agent: do every safe step first and list it under "What the agent already did". Name the Project, Decision, or Customer this card advances with an advances mention and one sentence of what becomes true. Classify each consequential claim as Confirmed, Reported, Inference, Recommendation, or Unknown, and link its source with a readable relationship mention such as [NOTE-12: Title](relationship:references); never a bare display ID. Treat untested product behaviour as Unknown. Lean less the harder the choice is to undo; on a pure value fork, do not pick, give the default with its dissent. When the human must inspect a canvas or draft, link an official review request with its server-returned URL and request ID; private comments are not a request. Write "Complete when" as an observable state, never "discussed" or "reviewed".
|
|
29
29
|
TXT
|
|
@@ -37,7 +37,8 @@ cnotes types show Attention -w <workspaceId> --json # validationPrompt must be
|
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
If an existing Attention type comes back with an empty `validationPrompt`,
|
|
40
|
-
|
|
40
|
+
or one that predates the make shape (no mention of a sitting), apply the
|
|
41
|
+
rubric above the same way and read it back again.
|
|
41
42
|
|
|
42
43
|
## Related types the planner may touch
|
|
43
44
|
|
|
@@ -1,27 +1,34 @@
|
|
|
1
1
|
# Card shapes
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Four shapes, one rule: the reader arrives cold and should be able to answer
|
|
4
4
|
before scrolling. Question first, recommended default second, context third,
|
|
5
5
|
evidence fourth, the post-answer contract last. Depth follows the stakes: a
|
|
6
6
|
shallow card is a screen at most, a deep card a few, and neither carries a
|
|
7
7
|
section that adds no decision value. Provenance and the post-answer contract
|
|
8
|
-
are never omitted
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
are never omitted, and the contract always ends by saying how the agent will
|
|
9
|
+
learn the answer exists.
|
|
10
|
+
|
|
11
|
+
The human answers after the colon on a `**Your decision:**` line (decide and
|
|
12
|
+
shallow cards) or an `**Outcome:**` line (make cards). A card is answered when
|
|
13
|
+
any such line has text after the colon, when the human names the card in chat,
|
|
14
|
+
or, on a make card, when the produced note carries a version by the human after
|
|
15
|
+
the block started. Titles carry no time: the focus block is the source of truth
|
|
13
16
|
for when, and a moved block must not leave a stale title behind.
|
|
14
17
|
|
|
18
|
+
States travel as tags: `open` until answered, `answered` while the ledger runs,
|
|
19
|
+
`closed` once every promise is settled. The lane tag (`deep`, `shallow`) stays
|
|
20
|
+
throughout.
|
|
21
|
+
|
|
15
22
|
Read `cnotes types show Attention` and the cnotes skill's humanizer reference
|
|
16
23
|
before writing. Mention every note as `[ID: Title](relationship:verb)`; reuse
|
|
17
24
|
the workspace's relationship vocabulary (`cnotes rel types`).
|
|
18
25
|
|
|
19
|
-
## Deep card
|
|
26
|
+
## Deep card · decide
|
|
20
27
|
|
|
21
28
|
```markdown
|
|
22
29
|
# <The decision the human will produce>
|
|
23
30
|
|
|
24
|
-
**Lane:** Deep Work · 45 min
|
|
31
|
+
**Lane:** Deep Work · 45 min · decide
|
|
25
32
|
**Advances:** [PROJECT-N: Title](relationship:advances) by <what becomes true if this block succeeds>
|
|
26
33
|
**Rules:** [NOTE-N: Attention rules](relationship:references)
|
|
27
34
|
|
|
@@ -69,6 +76,8 @@ options cost. Under one screen. Orientation mentions belong here:>
|
|
|
69
76
|
2. The agent will <scheduling, delegation, or preparation step>.
|
|
70
77
|
3. The agent will not <customer contact, commitment, destructive change, or
|
|
71
78
|
other external side effect> without your explicit yes.
|
|
79
|
+
4. <"A scheduled close runs at HH:MM and picks this up." or "Tell the agent
|
|
80
|
+
you answered; nothing runs until you do.">
|
|
72
81
|
|
|
73
82
|
## Complete when
|
|
74
83
|
|
|
@@ -82,6 +91,8 @@ after the artifact exists and `cnotes review request` returned:
|
|
|
82
91
|
## Review action
|
|
83
92
|
|
|
84
93
|
**Decision:** <what this review settles>
|
|
94
|
+
**An approved outcome authorizes:** <exactly what the agent may then do, and
|
|
95
|
+
what still needs a separate yes>
|
|
85
96
|
**Acceptance:** <short, testable criteria>
|
|
86
97
|
**Open the review:** [Review the proposal](<url returned by the server>)
|
|
87
98
|
**Request:** `<requestId>`
|
|
@@ -90,6 +101,72 @@ after the artifact exists and `cnotes review request` returned:
|
|
|
90
101
|
[SECTION-N: The exact review surface](relationship:related-to)
|
|
91
102
|
```
|
|
92
103
|
|
|
104
|
+
## Deep card · make
|
|
105
|
+
|
|
106
|
+
For a sitting the human must spend themselves: a strategy to develop, a
|
|
107
|
+
problem to explore before it has an answerable question, a draft only they
|
|
108
|
+
can write. The block protects the making; the agent scaffolds it and takes
|
|
109
|
+
over afterwards. The card leads with what the sitting produces, not with a
|
|
110
|
+
question.
|
|
111
|
+
|
|
112
|
+
```markdown
|
|
113
|
+
# <The artifact or state the sitting produces>
|
|
114
|
+
|
|
115
|
+
**Lane:** Deep Work · 90 min · make
|
|
116
|
+
**Advances:** [PROJECT-N: Title](relationship:advances) by <what becomes true when this exists>
|
|
117
|
+
**Rules:** [NOTE-N: Attention rules](relationship:references)
|
|
118
|
+
|
|
119
|
+
## What this sitting produces
|
|
120
|
+
|
|
121
|
+
<One sentence: the note, section, or canvas that exists at the end, and the
|
|
122
|
+
state it must reach. Name the target note with a mention:>
|
|
123
|
+
|
|
124
|
+
- [STRATEGY-N: Title](relationship:produces)
|
|
125
|
+
|
|
126
|
+
**Outcome:**
|
|
127
|
+
|
|
128
|
+
## Why now
|
|
129
|
+
|
|
130
|
+
<Stakes and what waits on this. Three sentences.>
|
|
131
|
+
|
|
132
|
+
## Start here
|
|
133
|
+
|
|
134
|
+
<The agent's scaffold: the notes to open first, the draft or outline it
|
|
135
|
+
prepared, the questions to hold in mind, the constraints that already bind
|
|
136
|
+
the answer. Under one screen. Orientation mentions belong here.>
|
|
137
|
+
|
|
138
|
+
## Evidence
|
|
139
|
+
|
|
140
|
+
<Only the claims the making rests on. The full table when a claim would
|
|
141
|
+
change what gets made; otherwise one line per claim with its class and
|
|
142
|
+
source.>
|
|
143
|
+
|
|
144
|
+
## What the agent already did
|
|
145
|
+
|
|
146
|
+
- <the outline, comparison, or research that seeds the sitting>
|
|
147
|
+
- <what is assigned to another owner, by name>
|
|
148
|
+
|
|
149
|
+
## After the block
|
|
150
|
+
|
|
151
|
+
1. The agent will read the produced note and <version the linked notes, or
|
|
152
|
+
extract the decisions it contains into Decision notes>.
|
|
153
|
+
2. The agent will <schedule the next sitting if the outcome says "continue",
|
|
154
|
+
or route what now exists>.
|
|
155
|
+
3. The agent will not <share, send, or commit the artifact> without your
|
|
156
|
+
explicit yes.
|
|
157
|
+
4. <"A scheduled close runs at HH:MM and picks this up." or "Tell the agent
|
|
158
|
+
you finished; nothing runs until you do.">
|
|
159
|
+
|
|
160
|
+
## Complete when
|
|
161
|
+
|
|
162
|
+
<An observable state of the artifact: "a version of STRATEGY-N names the
|
|
163
|
+
wedge and the two alternatives it rejects", never "time was spent".>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
The `Outcome` line takes what now exists, or `continue` with what is still
|
|
167
|
+
missing. A make card whose outcome is `continue` stays `open` and the next run
|
|
168
|
+
plans another sitting on the same card; it never mints a sibling.
|
|
169
|
+
|
|
93
170
|
## Shallow card
|
|
94
171
|
|
|
95
172
|
Only for a consequential external send that already has a draft. Anything
|
|
@@ -142,6 +219,8 @@ The one shallow card allowed without a draft. Its answer becomes the standing
|
|
|
142
219
|
- Sources the agent may read: <the intake workspace, shared items, transcripts, the priority board>
|
|
143
220
|
- Actions the agent may take unasked: research, compare, draft, version notes, plan and cancel focus blocks
|
|
144
221
|
- Actions that always need a yes: customer contact, commitments, deletions, anything irreversible
|
|
222
|
+
- Protected priorities: <the one or two objects that outrank throughput, such as a strategy canvas, or "none">
|
|
223
|
+
- Reviews the agent may complete unasked: <a class, such as reviews it requested itself or drafts under 500 words, or "none: prepare every review, I complete it">
|
|
145
224
|
- Interrupt rule: a blocked customer takes the next unused deep unit
|
|
146
225
|
|
|
147
226
|
**Your decision:**
|
|
@@ -152,27 +231,48 @@ The agent saves the ratified lines as the standing `Attention rules` note,
|
|
|
152
231
|
mentions it from every future card, and runs intake.
|
|
153
232
|
```
|
|
154
233
|
|
|
234
|
+
## Follow-through section
|
|
235
|
+
|
|
236
|
+
Appended as a new version the moment an answer is found, before anything is
|
|
237
|
+
executed, and updated as each line lands. The tags change to
|
|
238
|
+
`answered,<lane>` in the same write. A rerun reads this first: `done` is never
|
|
239
|
+
repeated, `failed` is retried, `waiting` is checked for its yes.
|
|
240
|
+
|
|
241
|
+
```markdown
|
|
242
|
+
## Follow-through
|
|
243
|
+
|
|
244
|
+
Answer read from version <N>, <date>: <the answer in one line>.
|
|
245
|
+
|
|
246
|
+
1. <promised action> · done · [NOTE-N: Title](relationship:references)
|
|
247
|
+
2. <promised action> · waiting: <whose yes, and where it sits on the queue>
|
|
248
|
+
3. <promised action> · failed: <reason, and what the next run will try>
|
|
249
|
+
4. <promised action> · skipped: <why the answer made it unnecessary>
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
A second answer on the same card (the human changed the line after version
|
|
253
|
+
N) gets a second `Follow-through` block under it, never an edit of the first.
|
|
254
|
+
|
|
155
255
|
## Closed section
|
|
156
256
|
|
|
157
|
-
Appended as a new version when
|
|
158
|
-
`
|
|
257
|
+
Appended as a new version only when no line above is `failed` and every
|
|
258
|
+
`waiting` line names a yes that now sits on the queue. The tags change to
|
|
259
|
+
`closed,<lane>` in the same write.
|
|
159
260
|
|
|
160
261
|
```markdown
|
|
161
262
|
## Closed
|
|
162
263
|
|
|
163
|
-
Answered <date>: <the answer in one line>.
|
|
164
264
|
Done: <what the agent did, with mentions>.
|
|
165
|
-
Still waiting: <the external action that needs a yes, or "nothing">.
|
|
265
|
+
Still waiting: <the external action that needs a yes and where it sits, or "nothing">.
|
|
166
266
|
```
|
|
167
267
|
|
|
168
|
-
## Worked example ·
|
|
268
|
+
## Worked example · decide
|
|
169
269
|
|
|
170
270
|
A fictional customer, written the way a real card should read.
|
|
171
271
|
|
|
172
272
|
```markdown
|
|
173
273
|
# Choose the recovery offer for Northwind's export failures
|
|
174
274
|
|
|
175
|
-
**Lane:** Deep Work · 45 min
|
|
275
|
+
**Lane:** Deep Work · 45 min · decide
|
|
176
276
|
**Advances:** [CUSTOMER-7: Northwind Logistics](relationship:advances) by a recovery offer they can accept this week instead of escalating to procurement
|
|
177
277
|
**Rules:** [NOTE-31: Attention rules](relationship:references)
|
|
178
278
|
|
|
@@ -216,6 +316,7 @@ Exports over 50,000 rows time out; the agent reproduced it today. The fix is sch
|
|
|
216
316
|
1. The agent will fill the offer into the draft and version it.
|
|
217
317
|
2. The agent will queue the send for the shallow window.
|
|
218
318
|
3. The agent will not send anything to Northwind without your explicit yes on the draft.
|
|
319
|
+
4. A scheduled close runs at 12:15 and picks this up.
|
|
219
320
|
|
|
220
321
|
## Complete when
|
|
221
322
|
|
|
@@ -252,4 +353,25 @@ Their procurement conversation is Friday. Sending today gives them two working d
|
|
|
252
353
|
1. `yes`: the agent sends it and records the send on the customer note.
|
|
253
354
|
2. `edit`: the agent applies your edit, then sends.
|
|
254
355
|
3. `hold`: it returns to the queue under `Ready for shallow window`.
|
|
356
|
+
4. A scheduled close runs at 12:15 and picks this up.
|
|
255
357
|
```
|
|
358
|
+
|
|
359
|
+
## Worked example · follow-through
|
|
360
|
+
|
|
361
|
+
The decide card above, after the human wrote "fix date plus one month's
|
|
362
|
+
credit" on version 3 and the close loop ran:
|
|
363
|
+
|
|
364
|
+
```markdown
|
|
365
|
+
## Follow-through
|
|
366
|
+
|
|
367
|
+
Answer read from version 3, Tuesday: fix date plus one month's credit.
|
|
368
|
+
|
|
369
|
+
1. Fill the offer into [COMMS-12: Northwind recovery note](relationship:references) · done
|
|
370
|
+
2. Queue the send for the shallow window · done · listed under `Ready for shallow window` on [INCOMINGDIGEST-9: Tuesday](relationship:references)
|
|
371
|
+
3. Send to Northwind · waiting: your yes on [ATTENTION-43: Send the recovery note to Northwind?](relationship:references)
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
Every line is `done` or `waiting` on a yes that sits on the queue, so the card
|
|
375
|
+
closes in the same run. Had line 1 failed (the draft locked by another
|
|
376
|
+
session, say), the card would stay `answered` and the next run would retry
|
|
377
|
+
line 1 before minting anything new.
|
|
@@ -44,10 +44,11 @@ The ledger's depth follows the stakes, not the template.
|
|
|
44
44
|
|
|
45
45
|
| Card | Ledger |
|
|
46
46
|
|---|---|
|
|
47
|
-
|
|
|
47
|
+
| Decide | The full table, one row per consequential claim |
|
|
48
|
+
| Make | Only the claims the making rests on. The full table when a claim would change what gets made; otherwise one line per claim with its class and source |
|
|
48
49
|
| Shallow | One line per claim the draft makes, each with its class and source. If the draft makes no product-behaviour claims, one line saying so |
|
|
49
50
|
| Rules | None. The card asks for preferences, not facts |
|
|
50
51
|
|
|
51
|
-
A
|
|
52
|
+
A decide card with no Reported, Inference, or Unknown rows is a signal to look
|
|
52
53
|
again: either the decision is agent-automatic and should not be a card, or a
|
|
53
54
|
claim has been promoted without a source.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Orientation canvas
|
|
2
|
+
|
|
3
|
+
A deep card whose answer rests on more than itself gets a canvas the block
|
|
4
|
+
opens on: a standing decision that constrains it, a source that left things
|
|
5
|
+
open, an artifact to inspect. A card that carries everything the reader needs
|
|
6
|
+
skips the canvas and lands its block on the home board; a canvas that would
|
|
7
|
+
hold only the card and its source is presentation overhead, not orientation.
|
|
8
|
+
When the canvas is warranted, it is not done when the right notes are on it. A flat pile of five correct notes makes the human
|
|
9
|
+
reconstruct the chain the agent already knows, which is the failure the canvas
|
|
10
|
+
exists to prevent. Lay it as a story the reader follows left to right in ten
|
|
11
|
+
seconds, and write the flow of thought on the board beside the notes.
|
|
12
|
+
|
|
13
|
+
Title: `ATTENTION-N · Orientation`, using the card's immutable display id, never
|
|
14
|
+
its heading. Goal: one sentence saying what the block decides and that the card
|
|
15
|
+
is first. One `cnotes canvas place` call builds the whole thing from a spec; the
|
|
16
|
+
sections size themselves around their content, so no coordinates.
|
|
17
|
+
|
|
18
|
+
## The frames, left to right
|
|
19
|
+
|
|
20
|
+
| Frame | Holds | Edge to the card |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `1 · Came from` | The digest, transcript, or share the card was minted from, plus one text card saying which item and why nothing else needed the sitting | `produced` |
|
|
23
|
+
| `2 · Decide here` | The Attention card, with a text card beside it per element: why now, then one per numbered decision with its recommendation and what flips it | none; this is the card |
|
|
24
|
+
| `What it rests on` (under frame 2) | The standing Decision that constrains the answer, the Huddle or Validation that left things open, each with a text card | `constrains`, `left open`, `grounds` |
|
|
25
|
+
| `3 · Advances` | The Project, Decision, or Customer the card names in `advances`, with a text card saying what becomes true if the block succeeds and which external send still needs a yes | from the card: `advances` |
|
|
26
|
+
| `Where things live` (bottom) | Portals: the work board the card came from and the home board | none |
|
|
27
|
+
|
|
28
|
+
Banner at the top, `richtext` medium, untinted, at most five sentences, in the
|
|
29
|
+
cnotes skill's banner order (hard rule 7 under "Canvas Elements"): what happened,
|
|
30
|
+
what this board is for, who answers and where, how to read it. Then the lines
|
|
31
|
+
only this canvas needs: the block day and time, "answer on the card", where the
|
|
32
|
+
portals go. A banner that opens with the block time and the reading order and
|
|
33
|
+
never says what the card is about fails the cnotes cold-reader test.
|
|
34
|
+
Reminder material (rules, operating plan) does not go on an orientation canvas;
|
|
35
|
+
the home board carries it.
|
|
36
|
+
|
|
37
|
+
## The text cards
|
|
38
|
+
|
|
39
|
+
Each text card is a projection of a note that already holds the full record.
|
|
40
|
+
The rules are the cnotes skill's rules for text elements, applied hard:
|
|
41
|
+
|
|
42
|
+
- At most three sentences. One bold lead phrase is fine (`**Why now.**`, `**1 · The date you owe.**`).
|
|
43
|
+
- Every number, date, name, and recommendation is lifted from the card or its
|
|
44
|
+
source verbatim. Never restate a figure, never add one. Run the preservation
|
|
45
|
+
gate before placing.
|
|
46
|
+
- Name every note and canvas with a relationship mention carrying its real title
|
|
47
|
+
(`[DECISION-6J2: Title](relationship:constrains)`); it renders as a chip. A bare
|
|
48
|
+
display id is a defect. The chip is for the reader, not the graph: the note body
|
|
49
|
+
still carries the mention that travels.
|
|
50
|
+
- Untinted by default. Tint only by role: `#F59E0B` for the constraining rule,
|
|
51
|
+
`#3B82F6` for source evidence. Nothing else.
|
|
52
|
+
- `size: "small"` (560px) beside a 280px note card. Put text cards in the same
|
|
53
|
+
frame as the note they project, in a vertical stack under or beside it.
|
|
54
|
+
|
|
55
|
+
A text card that says something no note says is a bug: put it in the note first,
|
|
56
|
+
then project it.
|
|
57
|
+
|
|
58
|
+
## Spec template
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{ "placement": "exact", "origin": { "x": 100, "y": 100 },
|
|
62
|
+
"root": { "kind": "stack", "axis": "vertical", "gap": "spacious", "items": [
|
|
63
|
+
{ "kind": "item", "type": "richtext", "size": "medium", "content": "# <Day HH:MM> · <card title>\n<reading order; answer on the card; portals below>" },
|
|
64
|
+
{ "kind": "stack", "axis": "horizontal", "gap": "spacious", "align": "start", "items": [
|
|
65
|
+
{ "kind": "section", "name": "1 · Came from", "child": { "kind": "stack", "axis": "vertical", "gap": "medium", "items": [
|
|
66
|
+
{ "kind": "item", "type": "note", "noteId": "<DIGEST>", "key": "src" },
|
|
67
|
+
{ "kind": "item", "type": "richtext", "size": "small", "content": "<which item, why only this sitting>" } ] } },
|
|
68
|
+
{ "kind": "stack", "axis": "vertical", "gap": "medium", "items": [
|
|
69
|
+
{ "kind": "section", "name": "2 · Decide here", "child": { "kind": "stack", "axis": "horizontal", "gap": "medium", "align": "start", "items": [
|
|
70
|
+
{ "kind": "item", "type": "note", "noteId": "ATTENTION-N", "key": "card" },
|
|
71
|
+
{ "kind": "stack", "axis": "vertical", "gap": "tight", "items": [
|
|
72
|
+
{ "kind": "item", "type": "richtext", "size": "small", "content": "**Why now.** <from the card>" },
|
|
73
|
+
{ "kind": "item", "type": "richtext", "size": "small", "content": "**1 · <decision>.** <recommendation>. Flips if <condition>." } ] } ] } },
|
|
74
|
+
{ "kind": "section", "name": "What it rests on", "child": { "kind": "stack", "axis": "horizontal", "gap": "medium", "align": "start", "items": [
|
|
75
|
+
{ "kind": "stack", "axis": "vertical", "gap": "tight", "items": [
|
|
76
|
+
{ "kind": "item", "type": "note", "noteId": "<DECISION>", "key": "rule" },
|
|
77
|
+
{ "kind": "item", "type": "richtext", "size": "small", "colorHex": "#F59E0B", "content": "<the standing rule and what it forces here>" } ] },
|
|
78
|
+
{ "kind": "stack", "axis": "vertical", "gap": "tight", "items": [
|
|
79
|
+
{ "kind": "item", "type": "note", "noteId": "<HUDDLE or VALIDATION>", "key": "open" },
|
|
80
|
+
{ "kind": "item", "type": "richtext", "size": "small", "colorHex": "#3B82F6", "content": "<what it left open, what is reported, what is unknown>" } ] } ] } } ] },
|
|
81
|
+
{ "kind": "section", "name": "3 · Advances", "child": { "kind": "stack", "axis": "vertical", "gap": "medium", "items": [
|
|
82
|
+
{ "kind": "item", "type": "note", "noteId": "<PROJECT>", "key": "obj" },
|
|
83
|
+
{ "kind": "item", "type": "richtext", "size": "small", "content": "<what becomes true; which send stays with the human>" } ] } } ] },
|
|
84
|
+
{ "kind": "section", "name": "Where things live", "child": { "kind": "stack", "axis": "horizontal", "gap": "medium", "items": [
|
|
85
|
+
{ "kind": "item", "type": "canvas", "linkedCanvasId": "<work board convex id>" },
|
|
86
|
+
{ "kind": "item", "type": "canvas", "linkedCanvasId": "<home board convex id>" } ] } } ] },
|
|
87
|
+
"edges": [
|
|
88
|
+
{ "from": "@src", "to": "@card", "label": "produced" },
|
|
89
|
+
{ "from": "@card", "to": "@obj", "label": "advances" },
|
|
90
|
+
{ "from": "@rule", "to": "@card", "label": "constrains" },
|
|
91
|
+
{ "from": "@open", "to": "@card", "label": "left open" } ] }
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Drop a frame that has nothing to hold; never leave an empty one. Add a frame
|
|
95
|
+
only when the card rests on something the reader must see (a Contradiction or a
|
|
96
|
+
Fork gets its own layout from the workspace's layout catalog instead).
|
|
97
|
+
|
|
98
|
+
## Rebuilding
|
|
99
|
+
|
|
100
|
+
An orientation canvas is rebuilt, not patched: `bulk-remove` every node (notes,
|
|
101
|
+
sections, portals, the banner) inside one operations run, then `place` the new
|
|
102
|
+
spec. Section ids change; nothing should reference them by id. The focus block
|
|
103
|
+
targets the card, not a section, so it survives the rebuild. Verify with
|
|
104
|
+
`cnotes focus list` that the block still lands on the canvas and the card.
|
|
105
|
+
|
|
106
|
+
## Read-back test
|
|
107
|
+
|
|
108
|
+
`cnotes canvas read`: every note sits in a named frame, every edge carries a
|
|
109
|
+
verb, every text card is at most three sentences and traceable to a note, the
|
|
110
|
+
banner names the block, and both portals resolve. Then the glance test: a
|
|
111
|
+
person zoomed to fit should see came from, decide here, advances, and start
|
|
112
|
+
reading at the card.
|
package/skills/cnotes/SKILL.md
CHANGED
|
@@ -253,7 +253,11 @@ cnotes canvas digest <canvasId>
|
|
|
253
253
|
# NAMING: never put an em-dash (—) or en-dash (–) in a canvas name. Use the interpunct
|
|
254
254
|
# · (U+00B7, MIDDLE DOT — a small mid-height dot, NOT a bullet •) as the separator,
|
|
255
255
|
# e.g. "Path to Revenue · Funding strategy", not "Path to Revenue — Funding strategy".
|
|
256
|
-
cnotes canvas create "<name>"
|
|
256
|
+
cnotes canvas create "<name>" --goal "<text>" [--audience "<text>"] # prints Ref (CANVAS-N) + Link — surface them to the user (see "Surfacing the canvas link")
|
|
257
|
+
# --goal is not optional in practice: write it FIRST, for a reader, as the decision or artifact
|
|
258
|
+
# the board exists to produce ("Decide whether X; pick the first slice"), never as a brief to
|
|
259
|
+
# yourself ("Research Tufte, diverge on..."). The goal renders only inside the (i) popover, so
|
|
260
|
+
# nobody sees it before the banner; the banner restates it (hard rule 7).
|
|
257
261
|
cnotes canvas update <canvasId> [--title "<text>"] [--goal "<text>"] [--audience "<text>"]
|
|
258
262
|
cnotes canvas delete <canvasId>
|
|
259
263
|
cnotes canvas set-as-home <canvasId>
|
|
@@ -266,10 +270,12 @@ cnotes canvas add-node <canvasId> --note <noteId> [--x <n>] [--y <n>] # (despi
|
|
|
266
270
|
# text = free-form rich text placed on the canvas (wire type: richtext). Markdown —
|
|
267
271
|
# headings, emphasis, images. Optional background tint (--color); DEFAULT IS NO BACKGROUND.
|
|
268
272
|
# A HEADING IS JUST `--content '# Q1 Goals'` with no tint — there is no separate heading
|
|
269
|
-
# element. CARD-sized framing (at most ~3 sentences
|
|
273
|
+
# element. CARD-sized framing (at most ~3 sentences; the orientation banner may run to ~5 and follows hard rule 7), emphasis
|
|
270
274
|
# quoting a note, image tiles. Unversioned, unsearchable, no display ID (nothing can cite
|
|
271
|
-
# it) — never the sole home of a claim.
|
|
272
|
-
#
|
|
275
|
+
# it) — never the sole home of a claim. When the card names a note or canvas, write a
|
|
276
|
+
# relationship mention with the REAL title, `[NOTE-12: Title](relationship:verb)`: it renders
|
|
277
|
+
# as a chip (verified 2026-09-05). A bare display id in card prose is a defect. The chip is
|
|
278
|
+
# presentational (no graph edge), so knowledge worth keeping = a typed note.
|
|
273
279
|
cnotes canvas add-text <canvasId> --content "<markdown>" [--size small|medium|large] [--color "<hex>"] [--x <n>] [--y <n>] # inline (short only)
|
|
274
280
|
cnotes canvas add-text <canvasId> --content-file <path.md> [--size small|medium|large] [--color "<hex>"] [--x <n>] [--y <n>]
|
|
275
281
|
cnotes canvas add-richtext ... # DEPRECATED alias of add-text (identical flags). Use add-text.
|
|
@@ -876,7 +882,7 @@ A canvas holds two tiers of material, and the difference is load-bearing:
|
|
|
876
882
|
| N distinct things (questions, risks, options, findings) | **N notes** grouped in a **list**; `--description` = one-line frame | bullets in one text element or in a list `--description` |
|
|
877
883
|
| A named REGION of the canvas ("Shaping", "Open Questions") | a **section** frame (`add-section`) — draggable region, mention-addressable as `[[SECTION-<n>]]` from note bodies | a floating text heading over an implied area |
|
|
878
884
|
| A heading / one-line label where a frame is too heavy (a column header inside a frame, a lane key) | a **text** element holding a markdown heading — `add-text --content '# Q1 Goals'`, no `--color` (leave it untinted), title case | a tinted card, or a section frame for something that isn't a region |
|
|
879
|
-
|
|
|
885
|
+
| Orientation: what happened, what this board is for, and how to read it | a **text** orientation banner in the fixed shape of rule 7 (one per canvas; a band may add a short one; up to ~5 sentences) | a reading-order-only banner, or a Guide note nobody needs off-canvas |
|
|
880
886
|
| Emphasis — restating a key claim for screen presence | a **text** element that QUOTES a note (the note stays the home) | the text element as the only copy |
|
|
881
887
|
| An image tile (logo, mockup, screenshot) | a **text** element holding the image, beside the owning note; embed the same image in the note body via `cnotes files upload <path> --markdown` so the note stays self-contained | the image as the knowledge itself |
|
|
882
888
|
| A grid of images for review (mood board) | N text-element image tiles in a `grid` place spec + ONE note holding the decision criteria / rationale for the set | a caption note per tile, or rationale in the tiles |
|
|
@@ -887,7 +893,7 @@ A canvas holds two tiers of material, and the difference is load-bearing:
|
|
|
887
893
|
#### Hard rules (each one has burned a real canvas)
|
|
888
894
|
|
|
889
895
|
1. **A canvas element must never be the sole home of a claim.** Verdict tallies, dates, scan provenance, and even a moat-defining sentence have each been authored as text elements — then cited downstream while being unversioned, unsearchable, and uncitable. If a text element says something true and useful, a note says it first; the text element may quote the note. (Canvas-specific wayfinding — how to read THIS canvas — is the one exemption; it has no off-canvas value.)
|
|
890
|
-
2. **
|
|
896
|
+
2. **Name notes and canvases from text elements with relationship mentions, never bare ids.** `[NOTE-12: Title](relationship:references)` inside a text element renders as a mention chip carrying the target's real title (the Text node registers the mention schema; verified live 2026-09-05, and a list description renders the same mention as a labelled span). "See RISK-64" as plain prose is a defect: the reader gets no title and no link. Pick the relationship type from the verb the sentence uses and reuse the workspace vocabulary. The chip is presentational: it creates no graph relationship, is not searchable, and is not versioned, so a relationship that must survive off the canvas still lives as a mention in a NOTE body (rule 5).
|
|
891
897
|
3. **A text element is capped at card size**: at most 3 sentences, one heading at most, never a list of distinct knowledge items (questions, risks, findings — those are N notes; a 3-line color legend or lane key is fine). The one exception is the orientation banner (table row 5, up to ~5 sentences). A heading-only text element (`--content '# Q1 Goals'`) is of course fine — that is the smallest legitimate use. The cap is physical as much as doctrinal: a text element renders its full content inline, so long blocks explode the canvas — one canvas hit 43,000px tall from eight text reference blocks and had to be rebuilt as notes.
|
|
892
898
|
4. **Detail's HOME is the note body; text detail cards are projections.** Write the full spec/content INTO each note's body first. A parallel text card under a note is allowed only as a projection — it condenses or quotes a note that already contains everything, and says so ("from STAGE-3"). A detail card whose content exists nowhere else is the anti-pattern: one teaching canvas carried its entire method in text cards over one-line stub notes, and an agent reading it back got seven stubs and no method.
|
|
893
899
|
5. **Edges can connect any node type** (note, text, list, canvas-link, section — plus legacy heading nodes), as long as both endpoints are on the same canvas; labels are short verb phrases ("fixes", "grounds", "depends on"). A section endpoint is addressed by the section node's Convex id (`sectionNodes[].id` in `canvas get --json` — `canvas read` shows only display ids), not its SECTION-n display id, and the edge anchors to the frame's border — use one when the relationship's endpoint is genuinely the whole region ("this cluster feeds that stage"), not as a shortcut for a note-to-note link. `canvas read` returns edges, so they are no longer invisible on read-back — but an edge is still CANVAS-LOCAL: it is not part of the note graph, never appears in `rel list`, is not searchable, and means nothing once you leave this canvas. So any relationship **between notes** that must survive off the canvas has to ALSO exist as a mention inside the note bodies. The mention is the copy that travels; the edge is the copy you can see. Edges to text/list/canvas-link nodes are diagram decoration (pointing a label at a cluster, wiring a portal) and carry no note-to-note relationship to mirror.
|
|
@@ -904,14 +910,23 @@ A canvas holds two tiers of material, and the difference is load-bearing:
|
|
|
904
910
|
|
|
905
911
|
Do not hand-pick a hex outside this table: the renderer snaps every tint to the nearest role by hue, so an off-palette color does not get you a new shade — it just picks a role imprecisely (`#c2410c` lands on Danger, not Warning). A tint colors the CARD only; text inside it keeps the normal prose colors, so the tint can never make a card harder to read. If you cannot name the role, omit the color.
|
|
906
912
|
|
|
907
|
-
|
|
913
|
+
7. **The orientation banner opens for a stranger, in a fixed order.** The banner is the first and often the only card a cold reader sees (the goal sits behind the (i) button; nobody reads it first), so a banner that gives only the reading order fails: one shipped as "A story in six frames, read top to bottom. Frames 1 to 3 are the events: a release note is written, an agent writes an ad from it, the scope changes" and the reader could not say which release note, whose agent, or why any of it mattered. Write it in this order, at most ~5 sentences, heading = the board's subject (the canvas title or the goal), never a clever name for the banner:
|
|
914
|
+
1. **What happened** — one dated sentence naming the people, products and events a stranger can look up ("On 19 September 2026 Deniss asked why CreatorNotes records every note a person opens but nothing an agent reads").
|
|
915
|
+
2. **What this board is for** — the goal restated in reader's words: the decision or artifact it produces.
|
|
916
|
+
3. **Who acts on it and how** — who decides, answers, or builds, and where the answer goes (as a mention chip with its real title, rule 2).
|
|
917
|
+
4. **How to read it** — reading order and what each frame holds.
|
|
918
|
+
Nothing before the banner has defined anything, so no unnamed referents in it: not "the ad", "the app", "the scope", "the card" until the thing has been named or chipped. Wayfind maps and Attention orientation canvases add their own lines (destination, block time) after these four, never instead of them.
|
|
908
919
|
|
|
909
|
-
|
|
920
|
+
#### Three completion tests
|
|
921
|
+
|
|
922
|
+
Run all three before ending your operation:
|
|
910
923
|
|
|
911
924
|
**The read-back test (for the next agent):** run `cnotes canvas read` and check that every claim is present as a NOTE section with a display ID, and the reasoning can be followed through note bodies and their mentions. Content that appears only as anonymous text-element prose fails the test even when visible — nothing can cite, search, or version it. List members read back as ID+title links without bodies; that is fine — the IDs are citable and batch-fetchable via `cnotes notes get`. As a heuristic for working canvases, at least ~4 notes per text element (zero text elements is fine); fewer means text elements are carrying content. Explainer canvases using the projection pattern (rule 4) are exempt from the ratio, not from the test.
|
|
912
925
|
|
|
913
926
|
**The glance test (for the human):** zoomed to fit, a person should grasp what this canvas argues and where to start reading in about 10 seconds. A canvas that passes read-back but renders as an undifferentiated card grid is also not done — that is what section labels, orientation banners, projections, and layout are for.
|
|
914
927
|
|
|
928
|
+
**The cold-reader test (for the person who was not in the session):** cover everything but the banner. Can someone who never saw the conversation say what happened, what this board decides or produces, and who acts on it? If the banner only gives the reading order, or leans on "the ad" / "the app" / "the card" before naming them, it fails (rule 7). Run this on the banner text itself, not on your memory of the run.
|
|
929
|
+
|
|
915
930
|
#### Worked example
|
|
916
931
|
|
|
917
932
|
Right shape (a real competitor scan): 31 typed notes (COMPETITOR profile, FACT evidence row, INSIGHT verdicts per dimension, RISK/IDEA/STRATEGY response bands, QUESTION follow-ups in a list), three short text banners framing the bands ("Threats, Steals, Response — what hurts us, what's worth taking, the plan"), and labeled edges mirrored as mentions (`FACT-44 --grounds--> INSIGHT-361`).
|
|
@@ -922,7 +937,7 @@ Wrong shape (same material): one 5,000-char text element holding a "deep scan wr
|
|
|
922
937
|
|
|
923
938
|
The durable rules above stand on versioning, search, and citability. Four rules also lean on today's platform behavior — if a future release changes these, the corresponding rule can relax:
|
|
924
939
|
|
|
925
|
-
-
|
|
940
|
+
- Mentions inside text elements and list descriptions are presentational chips only: no graph relationship, no search presence, no versions (motivates rule 1 and the mirror-as-mentions half of rule 5).
|
|
926
941
|
- `canvas read` returns sections, edges and portals, but list containers still read back as their one-line frame only. An edge read back is still canvas-local and ungraphed (motivates rule 5's mirror-as-mentions requirement).
|
|
927
942
|
- Agents have no update verb for **text or list** elements — to change one, remove and re-add it (one more reason content that evolves belongs in notes, which have versions). Section frames are the exception: `canvas update-section` edits a frame in place.
|
|
928
943
|
|
|
@@ -1100,7 +1115,7 @@ Full DSL alternative: a layout doc whose leaves are
|
|
|
1100
1115
|
|
|
1101
1116
|
The optional `key` lets edges and other items reference this leaf later (`@<key>`).
|
|
1102
1117
|
|
|
1103
|
-
`richtext.content` (the **text** element) accepts markdown directly — the server converts to TipTap before measuring.
|
|
1118
|
+
`richtext.content` (the **text** element) accepts markdown directly — the server converts to TipTap before measuring. Markdown including relationship mentions: `[NOTE-X: Title](relationship:verb)` renders as a chip with the real title, so use one wherever the card names a note or canvas (a bare id is a defect), and keep it card-sized per "Canvas Elements — When to Use What".
|
|
1104
1119
|
|
|
1105
1120
|
`list.description` is a one-line **frame**, never the content itself — the content is `noteIds` (the member notes). For N distinct things, create N notes (right type per item, e.g. `Question` for open questions) and list their ids. A `list` with a multi-item description and an empty `noteIds` is the wrong shape — use a card-sized **text** element (`richtext`, at most ~3 sentences) only for a short framing block with no members; anything longer, or any set of distinct items, is N notes.
|
|
1106
1121
|
|
|
@@ -252,8 +252,9 @@ These are objective and never need judgment. Enforce them on every write:
|
|
|
252
252
|
- **Relationship type matches the narrated verb** — prose "Blocks X" around a
|
|
253
253
|
`references`/untyped chip is a graph bug, not a style choice: retype to
|
|
254
254
|
`relationship:blocks` (or `[[blocks::NOTE-123]]`) and drop the redundant verb.
|
|
255
|
-
- **
|
|
256
|
-
|
|
255
|
+
- **Canvas richtext and list descriptions name notes with relationship mentions** —
|
|
256
|
+
`[NOTE-12: Title](relationship:verb)` renders as a chip with the real title; a bare
|
|
257
|
+
display id in card prose ("see RISK-64") is a defect.
|
|
257
258
|
- **Richtext stays card-sized** — at most ~3 sentences, one heading; distinct
|
|
258
259
|
items are N typed notes, not a wall of text.
|
|
259
260
|
- **No placeholder or artifact tokens** — "lorem ipsum", "TODO", "[insert X]",
|
package/skills/wayfind/SKILL.md
CHANGED
|
@@ -137,8 +137,10 @@ The user arrives with a loose idea.
|
|
|
137
137
|
`wayfind` plus the mode.
|
|
138
138
|
5. **Place the map** in one `cnotes canvas place` spec: orientation banner,
|
|
139
139
|
the four sections with their contents, blocking edges (blocker → dependent,
|
|
140
|
-
label "blocks"). Banner is at most five sentences
|
|
141
|
-
|
|
140
|
+
label "blocks"). Banner is at most five sentences in the cnotes skill's banner
|
|
141
|
+
order (hard rule 7 under "Canvas Elements"): what happened and who asked,
|
|
142
|
+
the destination in reader's words, who resolves tickets and how, then how the
|
|
143
|
+
four frames read. Plain display IDs only — mention syntax corrupts richtext.
|
|
142
144
|
6. **Fire the research subagents** for frontier research tickets; fold whatever
|
|
143
145
|
returns into resolutions (steps 4–6 of the work loop) before closing.
|
|
144
146
|
7. **Close the run, surface the canvas link, stop.** Charting resolves nothing
|