@rolexjs/core 1.4.0-dev-20260306030100 → 1.4.0-dev-20260309051522
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/index.d.ts +23 -1
- package/dist/index.js +343 -29
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -115,6 +115,11 @@ declare const scope: _rolexjs_system.Structure;
|
|
|
115
115
|
declare const milestone: _rolexjs_system.Structure;
|
|
116
116
|
declare const deliverable: _rolexjs_system.Structure;
|
|
117
117
|
declare const wiki: _rolexjs_system.Structure;
|
|
118
|
+
declare const product: _rolexjs_system.Structure;
|
|
119
|
+
declare const strategy: _rolexjs_system.Structure;
|
|
120
|
+
declare const spec: _rolexjs_system.Structure;
|
|
121
|
+
declare const release: _rolexjs_system.Structure;
|
|
122
|
+
declare const channel: _rolexjs_system.Structure;
|
|
118
123
|
|
|
119
124
|
declare const activate: _rolexjs_system.Process;
|
|
120
125
|
declare const want: _rolexjs_system.Process;
|
|
@@ -142,13 +147,22 @@ declare const milestoneProject: _rolexjs_system.Process;
|
|
|
142
147
|
declare const deliverProject: _rolexjs_system.Process;
|
|
143
148
|
declare const wikiProject: _rolexjs_system.Process;
|
|
144
149
|
|
|
150
|
+
declare const ownProduct: _rolexjs_system.Process;
|
|
151
|
+
declare const disownProduct: _rolexjs_system.Process;
|
|
152
|
+
declare const strategyProduct: _rolexjs_system.Process;
|
|
153
|
+
declare const specProduct: _rolexjs_system.Process;
|
|
154
|
+
declare const releaseProduct: _rolexjs_system.Process;
|
|
155
|
+
declare const channelProduct: _rolexjs_system.Process;
|
|
156
|
+
|
|
145
157
|
declare const born: _rolexjs_system.Process;
|
|
146
158
|
declare const found: _rolexjs_system.Process;
|
|
147
159
|
declare const establish: _rolexjs_system.Process;
|
|
148
160
|
declare const launch: _rolexjs_system.Process;
|
|
161
|
+
declare const publish: _rolexjs_system.Process;
|
|
149
162
|
declare const retire: _rolexjs_system.Process;
|
|
150
163
|
declare const die: _rolexjs_system.Process;
|
|
151
164
|
declare const archive: _rolexjs_system.Process;
|
|
165
|
+
declare const deprecate: _rolexjs_system.Process;
|
|
152
166
|
declare const dissolve: _rolexjs_system.Process;
|
|
153
167
|
declare const abolish: _rolexjs_system.Process;
|
|
154
168
|
declare const rehire: _rolexjs_system.Process;
|
|
@@ -213,6 +227,14 @@ interface CommandResultMap {
|
|
|
213
227
|
"project.deliver": CommandResult;
|
|
214
228
|
"project.wiki": CommandResult;
|
|
215
229
|
"project.archive": CommandResult;
|
|
230
|
+
"product.create": CommandResult;
|
|
231
|
+
"product.strategy": CommandResult;
|
|
232
|
+
"product.spec": CommandResult;
|
|
233
|
+
"product.release": CommandResult;
|
|
234
|
+
"product.channel": CommandResult;
|
|
235
|
+
"product.own": CommandResult;
|
|
236
|
+
"product.disown": CommandResult;
|
|
237
|
+
"product.deprecate": CommandResult;
|
|
216
238
|
"org.found": CommandResult;
|
|
217
239
|
"org.charter": CommandResult;
|
|
218
240
|
"org.dissolve": CommandResult;
|
|
@@ -546,4 +568,4 @@ interface Protocol {
|
|
|
546
568
|
/** The protocol instance — single source of truth for all channel adapters. */
|
|
547
569
|
declare const protocol: Protocol;
|
|
548
570
|
|
|
549
|
-
export { type ApplyResult, type ArgEntry, type CommandContext, type CommandResult, type CommandResultMap, type Commands, type ContextData, type InstructionDef, type Migration, type MigrationRecord, type ParamDef, type ParamType, type Platform, type Protocol, type PrototypeData, type PrototypeRepository, type Renderer, RendererRouter, Role, type RoleDeps, type RoleSnapshot, type RoleX, type RoleXRepository, RoleXService, type ToolDef, abandon, abolish, activate, applyPrototype, appoint, archive, background, born, charge, charter, charterOrg, complete, createCommands, deliverProject, deliverable, die, directives, dismiss, dissolve, duty, encounter, enroll, establish, experience, findInState, finish, fire, found, goal, hire, identity, individual, instructions, launch, master, milestone, milestoneProject, mindset, organization, past, plan, planGoal, position, principle, procedure, processes, project, protocol, realize, reflect, rehire, removeParticipant, requirement, retire, scope, scopeProject, society, task, toArgs, todo, tone, want, wiki, wikiProject, world };
|
|
571
|
+
export { type ApplyResult, type ArgEntry, type CommandContext, type CommandResult, type CommandResultMap, type Commands, type ContextData, type InstructionDef, type Migration, type MigrationRecord, type ParamDef, type ParamType, type Platform, type Protocol, type PrototypeData, type PrototypeRepository, type Renderer, RendererRouter, Role, type RoleDeps, type RoleSnapshot, type RoleX, type RoleXRepository, RoleXService, type ToolDef, abandon, abolish, activate, applyPrototype, appoint, archive, background, born, channel, channelProduct, charge, charter, charterOrg, complete, createCommands, deliverProject, deliverable, deprecate, die, directives, dismiss, disownProduct, dissolve, duty, encounter, enroll, establish, experience, findInState, finish, fire, found, goal, hire, identity, individual, instructions, launch, master, milestone, milestoneProject, mindset, organization, ownProduct, past, plan, planGoal, position, principle, procedure, processes, product, project, protocol, publish, realize, reflect, rehire, release, releaseProduct, removeParticipant, requirement, retire, scope, scopeProject, society, spec, specProduct, strategy, strategyProduct, task, toArgs, todo, tone, want, wiki, wikiProject, world };
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
import {
|
|
3
|
-
create as
|
|
3
|
+
create as create6,
|
|
4
4
|
createRuntime,
|
|
5
|
-
link as
|
|
6
|
-
process as
|
|
5
|
+
link as link4,
|
|
6
|
+
process as process7,
|
|
7
7
|
relation as relation2,
|
|
8
8
|
remove,
|
|
9
9
|
structure as structure3,
|
|
10
10
|
transform as transform4,
|
|
11
|
-
unlink as
|
|
11
|
+
unlink as unlink4
|
|
12
12
|
} from "@rolexjs/system";
|
|
13
13
|
|
|
14
14
|
// src/structures.ts
|
|
@@ -52,6 +52,16 @@ var milestone = structure(
|
|
|
52
52
|
);
|
|
53
53
|
var deliverable = structure("deliverable", "Project output and delivery", project);
|
|
54
54
|
var wiki = structure("wiki", "Project-level knowledge base entry", project);
|
|
55
|
+
var product = structure(
|
|
56
|
+
"product",
|
|
57
|
+
"A product with vision, contracts, and releases",
|
|
58
|
+
society,
|
|
59
|
+
[relation("ownership", "Who owns this product", individual)]
|
|
60
|
+
);
|
|
61
|
+
var strategy = structure("strategy", "Product strategy \u2014 how to win", product);
|
|
62
|
+
var spec = structure("spec", "Product behavior contract \u2014 BDD specification", product);
|
|
63
|
+
var release = structure("release", "Product version release", product);
|
|
64
|
+
var channel = structure("channel", "Product distribution channel", product);
|
|
55
65
|
|
|
56
66
|
// src/execution.ts
|
|
57
67
|
import { create, process, transform } from "@rolexjs/system";
|
|
@@ -171,38 +181,84 @@ var deliverProject = process4(
|
|
|
171
181
|
);
|
|
172
182
|
var wikiProject = process4("wiki", "Add a wiki entry to a project", project, create3(wiki));
|
|
173
183
|
|
|
184
|
+
// src/product.ts
|
|
185
|
+
import { create as create4, link as link3, process as process5, unlink as unlink3 } from "@rolexjs/system";
|
|
186
|
+
var ownProduct = process5(
|
|
187
|
+
"own",
|
|
188
|
+
"Assign an owner to the product",
|
|
189
|
+
product,
|
|
190
|
+
link3(product, "ownership")
|
|
191
|
+
);
|
|
192
|
+
var disownProduct = process5(
|
|
193
|
+
"disown",
|
|
194
|
+
"Remove an owner from the product",
|
|
195
|
+
product,
|
|
196
|
+
unlink3(product, "ownership")
|
|
197
|
+
);
|
|
198
|
+
var strategyProduct = process5(
|
|
199
|
+
"strategy",
|
|
200
|
+
"Define the strategy for a product",
|
|
201
|
+
product,
|
|
202
|
+
create4(strategy)
|
|
203
|
+
);
|
|
204
|
+
var specProduct = process5(
|
|
205
|
+
"spec",
|
|
206
|
+
"Add a behavior contract to a product",
|
|
207
|
+
product,
|
|
208
|
+
create4(spec)
|
|
209
|
+
);
|
|
210
|
+
var releaseProduct = process5(
|
|
211
|
+
"release",
|
|
212
|
+
"Add a version release to a product",
|
|
213
|
+
product,
|
|
214
|
+
create4(release)
|
|
215
|
+
);
|
|
216
|
+
var channelProduct = process5(
|
|
217
|
+
"channel",
|
|
218
|
+
"Add a distribution channel to a product",
|
|
219
|
+
product,
|
|
220
|
+
create4(channel)
|
|
221
|
+
);
|
|
222
|
+
|
|
174
223
|
// src/lifecycle.ts
|
|
175
|
-
import { create as
|
|
176
|
-
var born =
|
|
224
|
+
import { create as create5, process as process6, transform as transform3 } from "@rolexjs/system";
|
|
225
|
+
var born = process6(
|
|
177
226
|
"born",
|
|
178
227
|
"An individual is born into society",
|
|
179
228
|
society,
|
|
180
|
-
|
|
229
|
+
create5(individual)
|
|
181
230
|
);
|
|
182
|
-
var found =
|
|
183
|
-
var establish =
|
|
184
|
-
var launch =
|
|
185
|
-
var
|
|
231
|
+
var found = process6("found", "Found an organization", society, create5(organization));
|
|
232
|
+
var establish = process6("establish", "Establish a position", society, create5(position));
|
|
233
|
+
var launch = process6("launch", "Launch a project", society, create5(project));
|
|
234
|
+
var publish = process6("publish", "Publish a product", society, create5(product));
|
|
235
|
+
var retire = process6(
|
|
186
236
|
"retire",
|
|
187
237
|
"Retire an individual",
|
|
188
238
|
individual,
|
|
189
239
|
transform3(individual, past)
|
|
190
240
|
);
|
|
191
|
-
var die =
|
|
192
|
-
var archive =
|
|
193
|
-
var
|
|
241
|
+
var die = process6("die", "An individual dies", individual, transform3(individual, past));
|
|
242
|
+
var archive = process6("archive", "Archive a project", project, transform3(project, past));
|
|
243
|
+
var deprecate = process6(
|
|
244
|
+
"deprecate",
|
|
245
|
+
"Deprecate a product",
|
|
246
|
+
product,
|
|
247
|
+
transform3(product, past)
|
|
248
|
+
);
|
|
249
|
+
var dissolve = process6(
|
|
194
250
|
"dissolve",
|
|
195
251
|
"Dissolve an organization",
|
|
196
252
|
organization,
|
|
197
253
|
transform3(organization, past)
|
|
198
254
|
);
|
|
199
|
-
var abolish =
|
|
255
|
+
var abolish = process6(
|
|
200
256
|
"abolish",
|
|
201
257
|
"Abolish a position",
|
|
202
258
|
position,
|
|
203
259
|
transform3(position, past)
|
|
204
260
|
);
|
|
205
|
-
var rehire =
|
|
261
|
+
var rehire = process6(
|
|
206
262
|
"rehire",
|
|
207
263
|
"Rehire a retired individual",
|
|
208
264
|
past,
|
|
@@ -280,8 +336,8 @@ var Role = class {
|
|
|
280
336
|
// ================================================================
|
|
281
337
|
fmt(command, result) {
|
|
282
338
|
const rendered = this.deps.renderer.render(command, result);
|
|
283
|
-
const
|
|
284
|
-
const ch = this.cognitiveHint(
|
|
339
|
+
const process8 = command.includes(".") ? command.slice(command.indexOf(".") + 1) : command;
|
|
340
|
+
const ch = this.cognitiveHint(process8);
|
|
285
341
|
if (!ch) return rendered;
|
|
286
342
|
const lines = rendered.split("\n");
|
|
287
343
|
lines.splice(2, 0, `I \u2192 ${ch}`);
|
|
@@ -510,8 +566,8 @@ var Role = class {
|
|
|
510
566
|
// ================================================================
|
|
511
567
|
// Cognitive hints
|
|
512
568
|
// ================================================================
|
|
513
|
-
cognitiveHint(
|
|
514
|
-
switch (
|
|
569
|
+
cognitiveHint(process8) {
|
|
570
|
+
switch (process8) {
|
|
515
571
|
case "activate":
|
|
516
572
|
if (!this.focusedGoalId)
|
|
517
573
|
return "I have no goal yet. I should call `want` to declare one, or `focus` to review existing goals.";
|
|
@@ -590,13 +646,13 @@ import { parse } from "@rolexjs/parser";
|
|
|
590
646
|
import { structure as structure2 } from "@rolexjs/system";
|
|
591
647
|
function createCommands(ctx) {
|
|
592
648
|
const { rt, society: society2, past: past2, resolve, resourcex, issuex } = ctx;
|
|
593
|
-
async function ok(node,
|
|
594
|
-
return { state: await rt.project(node), process:
|
|
649
|
+
async function ok(node, process8) {
|
|
650
|
+
return { state: await rt.project(node), process: process8 };
|
|
595
651
|
}
|
|
596
|
-
async function archive2(node,
|
|
652
|
+
async function archive2(node, process8) {
|
|
597
653
|
const target = structure2(node.name, node.description ?? "", past);
|
|
598
654
|
const archived = await rt.transform(node, target);
|
|
599
|
-
return ok(archived,
|
|
655
|
+
return ok(archived, process8);
|
|
600
656
|
}
|
|
601
657
|
function validateGherkin(source) {
|
|
602
658
|
if (!source) return;
|
|
@@ -821,6 +877,45 @@ ${text}`;
|
|
|
821
877
|
async "project.archive"(project2) {
|
|
822
878
|
return archive2(await resolve(project2), "archive");
|
|
823
879
|
},
|
|
880
|
+
// ---- Product ----
|
|
881
|
+
async "product.create"(content, id, alias) {
|
|
882
|
+
validateGherkin(content);
|
|
883
|
+
const node = await rt.create(society2, product, content, id, alias);
|
|
884
|
+
return ok(node, "create");
|
|
885
|
+
},
|
|
886
|
+
async "product.strategy"(product2, strategy2, id) {
|
|
887
|
+
validateGherkin(strategy2);
|
|
888
|
+
const node = await rt.create(await resolve(product2), strategy, strategy2, id);
|
|
889
|
+
return ok(node, "strategy");
|
|
890
|
+
},
|
|
891
|
+
async "product.spec"(product2, spec2, id) {
|
|
892
|
+
validateGherkin(spec2);
|
|
893
|
+
const node = await rt.create(await resolve(product2), spec, spec2, id);
|
|
894
|
+
return ok(node, "spec");
|
|
895
|
+
},
|
|
896
|
+
async "product.release"(product2, release2, id) {
|
|
897
|
+
validateGherkin(release2);
|
|
898
|
+
const node = await rt.create(await resolve(product2), release, release2, id);
|
|
899
|
+
return ok(node, "release");
|
|
900
|
+
},
|
|
901
|
+
async "product.channel"(product2, channel2, id) {
|
|
902
|
+
validateGherkin(channel2);
|
|
903
|
+
const node = await rt.create(await resolve(product2), channel, channel2, id);
|
|
904
|
+
return ok(node, "channel");
|
|
905
|
+
},
|
|
906
|
+
async "product.own"(product2, individual2) {
|
|
907
|
+
const prodNode = await resolve(product2);
|
|
908
|
+
await rt.link(prodNode, await resolve(individual2), "ownership", "own");
|
|
909
|
+
return ok(prodNode, "own");
|
|
910
|
+
},
|
|
911
|
+
async "product.disown"(product2, individual2) {
|
|
912
|
+
const prodNode = await resolve(product2);
|
|
913
|
+
await rt.unlink(prodNode, await resolve(individual2), "ownership", "own");
|
|
914
|
+
return ok(prodNode, "disown");
|
|
915
|
+
},
|
|
916
|
+
async "product.deprecate"(product2) {
|
|
917
|
+
return archive2(await resolve(product2), "deprecate");
|
|
918
|
+
},
|
|
824
919
|
// ---- Org ----
|
|
825
920
|
async "org.found"(content, id, alias) {
|
|
826
921
|
validateGherkin(content);
|
|
@@ -1549,6 +1644,114 @@ var projectArchive = def(
|
|
|
1549
1644
|
},
|
|
1550
1645
|
["project"]
|
|
1551
1646
|
);
|
|
1647
|
+
var productCreate = def(
|
|
1648
|
+
"product",
|
|
1649
|
+
"create",
|
|
1650
|
+
{
|
|
1651
|
+
content: {
|
|
1652
|
+
type: "gherkin",
|
|
1653
|
+
required: false,
|
|
1654
|
+
description: "Gherkin Feature source for the product (vision)"
|
|
1655
|
+
},
|
|
1656
|
+
id: { type: "string", required: true, description: "User-facing identifier (kebab-case)" },
|
|
1657
|
+
alias: { type: "string[]", required: false, description: "Alternative names" }
|
|
1658
|
+
},
|
|
1659
|
+
["content", "id", "alias"]
|
|
1660
|
+
);
|
|
1661
|
+
var productStrategy = def(
|
|
1662
|
+
"product",
|
|
1663
|
+
"strategy",
|
|
1664
|
+
{
|
|
1665
|
+
product: { type: "string", required: true, description: "Product id" },
|
|
1666
|
+
content: {
|
|
1667
|
+
type: "gherkin",
|
|
1668
|
+
required: true,
|
|
1669
|
+
description: "Gherkin Feature source for the strategy"
|
|
1670
|
+
},
|
|
1671
|
+
id: { type: "string", required: true, description: "Strategy id" }
|
|
1672
|
+
},
|
|
1673
|
+
["product", "content", "id"]
|
|
1674
|
+
);
|
|
1675
|
+
var productSpec = def(
|
|
1676
|
+
"product",
|
|
1677
|
+
"spec",
|
|
1678
|
+
{
|
|
1679
|
+
product: { type: "string", required: true, description: "Product id" },
|
|
1680
|
+
content: {
|
|
1681
|
+
type: "gherkin",
|
|
1682
|
+
required: true,
|
|
1683
|
+
description: "Gherkin Feature source for the behavior contract (BDD specification)"
|
|
1684
|
+
},
|
|
1685
|
+
id: {
|
|
1686
|
+
type: "string",
|
|
1687
|
+
required: true,
|
|
1688
|
+
description: "Spec id (keywords joined by hyphens)"
|
|
1689
|
+
}
|
|
1690
|
+
},
|
|
1691
|
+
["product", "content", "id"]
|
|
1692
|
+
);
|
|
1693
|
+
var productRelease = def(
|
|
1694
|
+
"product",
|
|
1695
|
+
"release",
|
|
1696
|
+
{
|
|
1697
|
+
product: { type: "string", required: true, description: "Product id" },
|
|
1698
|
+
content: {
|
|
1699
|
+
type: "gherkin",
|
|
1700
|
+
required: true,
|
|
1701
|
+
description: "Gherkin Feature source for the release"
|
|
1702
|
+
},
|
|
1703
|
+
id: {
|
|
1704
|
+
type: "string",
|
|
1705
|
+
required: true,
|
|
1706
|
+
description: "Release id (e.g. v1.0.0)"
|
|
1707
|
+
}
|
|
1708
|
+
},
|
|
1709
|
+
["product", "content", "id"]
|
|
1710
|
+
);
|
|
1711
|
+
var productChannel = def(
|
|
1712
|
+
"product",
|
|
1713
|
+
"channel",
|
|
1714
|
+
{
|
|
1715
|
+
product: { type: "string", required: true, description: "Product id" },
|
|
1716
|
+
content: {
|
|
1717
|
+
type: "gherkin",
|
|
1718
|
+
required: true,
|
|
1719
|
+
description: "Gherkin Feature source for the distribution channel"
|
|
1720
|
+
},
|
|
1721
|
+
id: {
|
|
1722
|
+
type: "string",
|
|
1723
|
+
required: true,
|
|
1724
|
+
description: "Channel id (e.g. npm, cloud-platform)"
|
|
1725
|
+
}
|
|
1726
|
+
},
|
|
1727
|
+
["product", "content", "id"]
|
|
1728
|
+
);
|
|
1729
|
+
var productOwn = def(
|
|
1730
|
+
"product",
|
|
1731
|
+
"own",
|
|
1732
|
+
{
|
|
1733
|
+
product: { type: "string", required: true, description: "Product id" },
|
|
1734
|
+
individual: { type: "string", required: true, description: "Individual id (owner)" }
|
|
1735
|
+
},
|
|
1736
|
+
["product", "individual"]
|
|
1737
|
+
);
|
|
1738
|
+
var productDisown = def(
|
|
1739
|
+
"product",
|
|
1740
|
+
"disown",
|
|
1741
|
+
{
|
|
1742
|
+
product: { type: "string", required: true, description: "Product id" },
|
|
1743
|
+
individual: { type: "string", required: true, description: "Individual id (owner to remove)" }
|
|
1744
|
+
},
|
|
1745
|
+
["product", "individual"]
|
|
1746
|
+
);
|
|
1747
|
+
var productDeprecate = def(
|
|
1748
|
+
"product",
|
|
1749
|
+
"deprecate",
|
|
1750
|
+
{
|
|
1751
|
+
product: { type: "string", required: true, description: "Product id" }
|
|
1752
|
+
},
|
|
1753
|
+
["product"]
|
|
1754
|
+
);
|
|
1552
1755
|
var censusList = def(
|
|
1553
1756
|
"census",
|
|
1554
1757
|
"list",
|
|
@@ -1556,7 +1759,7 @@ var censusList = def(
|
|
|
1556
1759
|
type: {
|
|
1557
1760
|
type: "string",
|
|
1558
1761
|
required: false,
|
|
1559
|
-
description: "Filter by type (individual, organization, position, project, past)"
|
|
1762
|
+
description: "Filter by type (individual, organization, position, project, product, past)"
|
|
1560
1763
|
}
|
|
1561
1764
|
},
|
|
1562
1765
|
["type"]
|
|
@@ -1782,6 +1985,15 @@ var instructions = {
|
|
|
1782
1985
|
"project.deliver": projectDeliver,
|
|
1783
1986
|
"project.wiki": projectWiki,
|
|
1784
1987
|
"project.archive": projectArchive,
|
|
1988
|
+
// product
|
|
1989
|
+
"product.create": productCreate,
|
|
1990
|
+
"product.strategy": productStrategy,
|
|
1991
|
+
"product.spec": productSpec,
|
|
1992
|
+
"product.release": productRelease,
|
|
1993
|
+
"product.channel": productChannel,
|
|
1994
|
+
"product.own": productOwn,
|
|
1995
|
+
"product.disown": productDisown,
|
|
1996
|
+
"product.deprecate": productDeprecate,
|
|
1785
1997
|
// census
|
|
1786
1998
|
"census.list": censusList,
|
|
1787
1999
|
// prototype
|
|
@@ -2280,6 +2492,95 @@ var world = {
|
|
|
2280
2492
|
Then tool names and concept names are appropriate \u2014 they are the domain language
|
|
2281
2493
|
And this rule applies to end-user communication, not developer communication`,
|
|
2282
2494
|
execution: "Feature: Execution \u2014 the doing cycle\n The role pursues goals through a structured lifecycle.\n activate \u2192 want \u2192 plan \u2192 todo \u2192 finish \u2192 complete or abandon.\n\n Scenario: Declare a goal\n Given I know who I am via activate\n When I want something \u2014 a desired outcome\n Then I declare it with want(id, goal)\n And focus automatically switches to this new goal\n\n Scenario: Plan and create tasks\n Given I have a focused goal\n Then I call plan(id, plan) to break it into logical phases\n And I call todo(id, task) to create concrete, actionable tasks\n\n Scenario: Execute and finish\n Given I have tasks to work on\n When I complete a task\n Then I call finish(id) to mark it done\n And an encounter is created \u2014 a raw record of what happened\n And I optionally capture what happened via the encounter parameter\n\n Scenario: Complete or abandon a plan\n Given tasks are done or the plan's strategy is no longer viable\n When the plan is fulfilled I call complete()\n Or when the plan should be dropped I call abandon()\n Then an encounter is created for the cognition cycle\n\n Scenario: Goals are long-term directions\n Given goals are managed with want and forget\n When a goal is no longer needed\n Then I call forget to remove it\n And learning is captured at the plan and task level through encounters\n\n Scenario: Multiple goals\n Given I may have several active goals\n When I need to switch between them\n Then I call focus(id) to change the currently focused goal\n And subsequent plan and todo operations target the focused goal",
|
|
2495
|
+
issue: `Feature: Issue \u2014 persistent structured collaboration beyond a single context
|
|
2496
|
+
AI individuals face a fundamental challenge: context breaks.
|
|
2497
|
+
Each new session starts fresh \u2014 identity and knowledge survive, but the working state is lost.
|
|
2498
|
+
Like humans writing journals and memos, individuals need externalized records
|
|
2499
|
+
that persist across sessions and across individuals.
|
|
2500
|
+
|
|
2501
|
+
Issue is the externalized, structured collaboration primitive of the RoleX world.
|
|
2502
|
+
It enables both self-collaboration (same individual, different sessions)
|
|
2503
|
+
and inter-individual collaboration (different individuals, asynchronous).
|
|
2504
|
+
|
|
2505
|
+
Scenario: Why issues exist
|
|
2506
|
+
Given AI individuals have a context window limit
|
|
2507
|
+
And each new session loses the previous working state
|
|
2508
|
+
And multiple individuals may need to coordinate without being active simultaneously
|
|
2509
|
+
When structured, persistent, discoverable records are needed
|
|
2510
|
+
Then issues serve as externalized working memory for the society
|
|
2511
|
+
And they survive context breaks, session restarts, and individual switches
|
|
2512
|
+
|
|
2513
|
+
Scenario: Self-collaboration \u2014 continuity across sessions
|
|
2514
|
+
Given an individual is working on something that spans multiple sessions
|
|
2515
|
+
When the context window resets or a new session begins
|
|
2516
|
+
Then the individual can publish or check issues to restore working context
|
|
2517
|
+
And comments serve as a journal \u2014 recording progress, decisions, and next steps
|
|
2518
|
+
And the issue persists until explicitly closed, regardless of how many sessions pass
|
|
2519
|
+
|
|
2520
|
+
Scenario: Inter-individual collaboration \u2014 asynchronous coordination
|
|
2521
|
+
Given multiple individuals need to work together
|
|
2522
|
+
And they are never active simultaneously
|
|
2523
|
+
When one individual publishes an issue or leaves a comment
|
|
2524
|
+
Then other individuals can discover it, respond, and contribute
|
|
2525
|
+
And assignee indicates who should act next
|
|
2526
|
+
And labels categorize across concerns
|
|
2527
|
+
|
|
2528
|
+
Scenario: Relationship to goals and tasks
|
|
2529
|
+
Given goals express intent \u2014 what I want to achieve
|
|
2530
|
+
And tasks express action \u2014 what I am doing right now
|
|
2531
|
+
When an issue is something that needs ongoing attention and discussion
|
|
2532
|
+
Then issues may inspire goals, or goals may spawn issues
|
|
2533
|
+
And issues may be resolved by tasks, or tasks may surface new issues
|
|
2534
|
+
But issues are independent \u2014 they belong to the society, not to any single individual's goal tree
|
|
2535
|
+
|
|
2536
|
+
Scenario: Publish a new issue
|
|
2537
|
+
Given I need to raise a topic for attention
|
|
2538
|
+
When I call use("!issue.publish", { title, body, author, assignee? })
|
|
2539
|
+
Then a new issue is created with an auto-incremented number
|
|
2540
|
+
And author should be the active individual's id
|
|
2541
|
+
|
|
2542
|
+
Scenario: Browse and view issues
|
|
2543
|
+
Given I need to see what issues exist
|
|
2544
|
+
When I call use("!issue.list", { status?, author?, assignee?, label? })
|
|
2545
|
+
Then matching issues are returned ordered by number descending
|
|
2546
|
+
When I need details of a specific issue
|
|
2547
|
+
Then I call use("!issue.get", { number })
|
|
2548
|
+
|
|
2549
|
+
Scenario: Update, close, and reopen
|
|
2550
|
+
Given I need to manage an issue's lifecycle
|
|
2551
|
+
When I call use("!issue.update", { number, title?, body?, assignee? })
|
|
2552
|
+
Then the specified fields are updated
|
|
2553
|
+
When resolved I call use("!issue.close", { number })
|
|
2554
|
+
And if it needs more work I call use("!issue.reopen", { number })
|
|
2555
|
+
|
|
2556
|
+
Scenario: Assign and discuss
|
|
2557
|
+
Given I need to delegate or discuss
|
|
2558
|
+
When I call use("!issue.assign", { number, assignee })
|
|
2559
|
+
Then the issue is assigned to another individual
|
|
2560
|
+
When I call use("!issue.comment", { number, body, author })
|
|
2561
|
+
Then a comment is added to the threaded discussion
|
|
2562
|
+
And I can view all comments with use("!issue.comments", { number })
|
|
2563
|
+
|
|
2564
|
+
Scenario: Label for categorization
|
|
2565
|
+
Given I want to categorize issues
|
|
2566
|
+
When I call use("!issue.label", { number, label })
|
|
2567
|
+
Then the label is attached \u2014 auto-created if new
|
|
2568
|
+
And I can remove it with use("!issue.unlabel", { number, label })
|
|
2569
|
+
|
|
2570
|
+
Scenario: Command reference
|
|
2571
|
+
Given the following commands are available:
|
|
2572
|
+
| command | required args | optional args |
|
|
2573
|
+
| !issue.publish | title, body, author | assignee |
|
|
2574
|
+
| !issue.get | number | |
|
|
2575
|
+
| !issue.list | | status, author, assignee, label |
|
|
2576
|
+
| !issue.update | number | title, body, assignee |
|
|
2577
|
+
| !issue.close | number | |
|
|
2578
|
+
| !issue.reopen | number | |
|
|
2579
|
+
| !issue.assign | number, assignee | |
|
|
2580
|
+
| !issue.comment | number, body, author | |
|
|
2581
|
+
| !issue.comments | number | |
|
|
2582
|
+
| !issue.label | number, label | |
|
|
2583
|
+
| !issue.unlabel | number, label | |`,
|
|
2283
2584
|
gherkin: 'Feature: Gherkin \u2014 the universal language\n Everything in RoleX is expressed as Gherkin Feature files.\n Gherkin is not just for testing \u2014 it is the language of identity, goals, and knowledge.\n\n Scenario: Feature and Scenario convention\n Given RoleX uses Gherkin to represent goals, plans, tasks, experience, and knowledge\n Then a Feature represents one independent concern \u2014 one topic, explained fully\n And Scenarios represent different situations or conditions within that concern\n And Given/When/Then provides narrative structure within each scenario\n\n Scenario: Writing Gherkin for RoleX\n Given the AI creates goals, plans, tasks, and experiences as Gherkin\n Then keep it descriptive and meaningful \u2014 living documentation, not test boilerplate\n And use Feature as the title \u2014 what this concern is about\n And use Scenario for specific situations within that concern\n And each Feature focuses on one concern \u2014 separate unrelated topics into their own Features\n\n Scenario: Valid step keywords\n Given the only valid step keywords are Given, When, Then, And, But\n When writing steps that express causality or explanation\n Then use And to chain the reason as a follow-up fact\n And example: "Then use RoleX tools" followed by "And RoleX tools feed the growth loop"\n\n Scenario: Expressing causality\n Given you want to write "Then X because Y"\n Then rewrite as two steps \u2014 "Then X" followed by "And Y" stating the reason as a fact',
|
|
2284
2585
|
memory: `Feature: Memory \u2014 when to reflect
|
|
2285
2586
|
Reflection is how encounters become experience.
|
|
@@ -2610,18 +2911,22 @@ export {
|
|
|
2610
2911
|
archive,
|
|
2611
2912
|
background,
|
|
2612
2913
|
born,
|
|
2914
|
+
channel,
|
|
2915
|
+
channelProduct,
|
|
2613
2916
|
charge,
|
|
2614
2917
|
charter,
|
|
2615
2918
|
charterOrg,
|
|
2616
2919
|
complete,
|
|
2617
|
-
|
|
2920
|
+
create6 as create,
|
|
2618
2921
|
createCommands,
|
|
2619
2922
|
createRuntime,
|
|
2620
2923
|
deliverProject,
|
|
2621
2924
|
deliverable,
|
|
2925
|
+
deprecate,
|
|
2622
2926
|
die,
|
|
2623
2927
|
directives,
|
|
2624
2928
|
dismiss,
|
|
2929
|
+
disownProduct,
|
|
2625
2930
|
dissolve,
|
|
2626
2931
|
duty,
|
|
2627
2932
|
encounter,
|
|
@@ -2638,26 +2943,31 @@ export {
|
|
|
2638
2943
|
individual,
|
|
2639
2944
|
instructions,
|
|
2640
2945
|
launch,
|
|
2641
|
-
|
|
2946
|
+
link4 as link,
|
|
2642
2947
|
master,
|
|
2643
2948
|
milestone,
|
|
2644
2949
|
milestoneProject,
|
|
2645
2950
|
mindset,
|
|
2646
2951
|
organization,
|
|
2952
|
+
ownProduct,
|
|
2647
2953
|
past,
|
|
2648
2954
|
plan,
|
|
2649
2955
|
planGoal,
|
|
2650
2956
|
position,
|
|
2651
2957
|
principle,
|
|
2652
2958
|
procedure,
|
|
2653
|
-
|
|
2959
|
+
process7 as process,
|
|
2654
2960
|
processes,
|
|
2961
|
+
product,
|
|
2655
2962
|
project,
|
|
2656
2963
|
protocol,
|
|
2964
|
+
publish,
|
|
2657
2965
|
realize,
|
|
2658
2966
|
reflect,
|
|
2659
2967
|
rehire,
|
|
2660
2968
|
relation2 as relation,
|
|
2969
|
+
release,
|
|
2970
|
+
releaseProduct,
|
|
2661
2971
|
remove,
|
|
2662
2972
|
removeParticipant,
|
|
2663
2973
|
requirement,
|
|
@@ -2665,13 +2975,17 @@ export {
|
|
|
2665
2975
|
scope,
|
|
2666
2976
|
scopeProject,
|
|
2667
2977
|
society,
|
|
2978
|
+
spec,
|
|
2979
|
+
specProduct,
|
|
2980
|
+
strategy,
|
|
2981
|
+
strategyProduct,
|
|
2668
2982
|
structure3 as structure,
|
|
2669
2983
|
task,
|
|
2670
2984
|
toArgs,
|
|
2671
2985
|
todo,
|
|
2672
2986
|
tone,
|
|
2673
2987
|
transform4 as transform,
|
|
2674
|
-
|
|
2988
|
+
unlink4 as unlink,
|
|
2675
2989
|
want,
|
|
2676
2990
|
wiki,
|
|
2677
2991
|
wikiProject,
|