@nebutra/idea-plaza 0.1.3 → 0.1.5
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/CHANGELOG.md +12 -0
- package/package.json +21 -10
- package/.nebutra/debug/content-store.jsonl +0 -55
- package/.nebutra/debug/event-log.jsonl +0 -22
- package/.nebutra/debug/idea-plaza.jsonl +0 -33
- package/.turbo/turbo-build.log +0 -22
- package/.turbo/turbo-test.log +0 -17
- package/.turbo/turbo-typecheck.log +0 -4
- package/examples/doctor.ts +0 -9
- package/examples/fork.ts +0 -19
- package/examples/quickstart.ts +0 -16
- package/plays/publish_idea/SKILL.md +0 -23
- package/src/cli.ts +0 -36
- package/src/index.test.ts +0 -73
- package/src/index.ts +0 -233
- package/tsconfig.json +0 -9
- package/tsup.config.ts +0 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @nebutra/idea-plaza
|
|
2
2
|
|
|
3
|
+
## 0.1.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies []:
|
|
8
|
+
- @nebutra/capability-kit@2.0.0
|
|
9
|
+
- @nebutra/errors@2.0.0
|
|
10
|
+
- @nebutra/event-log@2.0.0
|
|
11
|
+
- @nebutra/content-store@0.1.5
|
|
12
|
+
- @nebutra/ecosystem-safety@0.1.4
|
|
13
|
+
- @nebutra/generation-context@0.1.4
|
|
14
|
+
|
|
3
15
|
## 0.1.3
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nebutra/idea-plaza",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Explicit opt-in idea publishing, lineage, and fork surface over Nebutra company artifacts",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"nebutra": {
|
|
9
|
+
"graph": "labs",
|
|
9
10
|
"status": "wip",
|
|
10
11
|
"productionReady": false,
|
|
11
12
|
"surface": "ecosystem-product",
|
|
@@ -24,18 +25,22 @@
|
|
|
24
25
|
"category": "ai",
|
|
25
26
|
"summary": "Opt-in public idea snapshot and fork lineage product surface"
|
|
26
27
|
},
|
|
27
|
-
"main": "./
|
|
28
|
-
"types": "./
|
|
28
|
+
"main": "./dist/index.js",
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
29
30
|
"exports": {
|
|
30
|
-
".":
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"import": "./dist/index.js",
|
|
34
|
+
"default": "./dist/index.js"
|
|
35
|
+
}
|
|
31
36
|
},
|
|
32
37
|
"dependencies": {
|
|
33
|
-
"@nebutra/capability-kit": "0.
|
|
34
|
-
"@nebutra/ecosystem-safety": "0.1.
|
|
35
|
-
"@nebutra/content-store": "0.1.
|
|
36
|
-
"@nebutra/errors": "0.
|
|
37
|
-
"@nebutra/event-log": "0.
|
|
38
|
-
"@nebutra/generation-context": "0.1.
|
|
38
|
+
"@nebutra/capability-kit": "2.0.0",
|
|
39
|
+
"@nebutra/ecosystem-safety": "0.1.4",
|
|
40
|
+
"@nebutra/content-store": "0.1.5",
|
|
41
|
+
"@nebutra/errors": "2.0.0",
|
|
42
|
+
"@nebutra/event-log": "2.0.0",
|
|
43
|
+
"@nebutra/generation-context": "0.1.4"
|
|
39
44
|
},
|
|
40
45
|
"devDependencies": {
|
|
41
46
|
"@types/node": "^25.9.1",
|
|
@@ -56,6 +61,12 @@
|
|
|
56
61
|
"publishConfig": {
|
|
57
62
|
"access": "public"
|
|
58
63
|
},
|
|
64
|
+
"files": [
|
|
65
|
+
"dist",
|
|
66
|
+
"README.md",
|
|
67
|
+
"LICENSE",
|
|
68
|
+
"CHANGELOG.md"
|
|
69
|
+
],
|
|
59
70
|
"scripts": {
|
|
60
71
|
"build": "tsup",
|
|
61
72
|
"test": "vitest run",
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
{"at":"2026-05-18T15:31:08.496Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
2
|
-
{"at":"2026-05-18T15:31:08.513Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
3
|
-
{"at":"2026-05-18T15:31:08.517Z","type":"write","tenantId":"tenant_a","path":"plaza/ideas/idea_loop_ai_debugging_mpbd2xr6.json"}
|
|
4
|
-
{"at":"2026-05-18T15:31:08.522Z","type":"write","tenantId":"tenant_a","path":"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbd2xr6_bob_mpbd2xrc.json"}
|
|
5
|
-
{"at":"2026-05-18T15:31:08.531Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
6
|
-
{"at":"2026-05-18T15:35:24.763Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
7
|
-
{"at":"2026-05-18T15:35:24.788Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
8
|
-
{"at":"2026-05-18T15:35:24.791Z","type":"write","tenantId":"tenant_a","path":"plaza/ideas/idea_loop_ai_debugging_mpbd8fhw.json"}
|
|
9
|
-
{"at":"2026-05-18T15:35:24.797Z","type":"write","tenantId":"tenant_a","path":"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbd8fhw_bob_mpbd8fi3.json"}
|
|
10
|
-
{"at":"2026-05-18T15:35:24.807Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
11
|
-
{"at":"2026-05-18T15:37:13.013Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
12
|
-
{"at":"2026-05-18T15:37:13.030Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
13
|
-
{"at":"2026-05-18T15:37:13.034Z","type":"write","tenantId":"tenant_a","path":"plaza/ideas/idea_loop_ai_debugging_mpbdar0n.json"}
|
|
14
|
-
{"at":"2026-05-18T15:37:13.039Z","type":"write","tenantId":"tenant_a","path":"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbdar0n_bob_mpbdar0t.json"}
|
|
15
|
-
{"at":"2026-05-18T15:37:13.053Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
16
|
-
{"at":"2026-05-18T16:03:14.083Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
17
|
-
{"at":"2026-05-18T16:03:14.166Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
18
|
-
{"at":"2026-05-18T16:03:14.224Z","type":"write","tenantId":"tenant_a","path":"plaza/ideas/idea_loop_ai_debugging_mpbe87lt.json"}
|
|
19
|
-
{"at":"2026-05-18T16:03:14.249Z","type":"write","tenantId":"tenant_a","path":"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbe87lt_bob_mpbe87ni.json"}
|
|
20
|
-
{"at":"2026-05-18T16:03:14.325Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
21
|
-
{"at":"2026-05-18T16:05:02.086Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
22
|
-
{"at":"2026-05-18T16:05:02.114Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
23
|
-
{"at":"2026-05-18T16:05:02.120Z","type":"write","tenantId":"tenant_a","path":"plaza/ideas/idea_loop_ai_debugging_mpbeaiw3.json"}
|
|
24
|
-
{"at":"2026-05-18T16:05:02.136Z","type":"write","tenantId":"tenant_a","path":"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbeaiw3_bob_mpbeaiwj.json"}
|
|
25
|
-
{"at":"2026-05-18T16:05:02.153Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
26
|
-
{"at":"2026-05-18T16:10:28.152Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
27
|
-
{"at":"2026-05-18T16:10:28.167Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
28
|
-
{"at":"2026-05-18T16:10:28.169Z","type":"write","tenantId":"tenant_a","path":"plaza/ideas/idea_loop_ai_debugging_mpbehih3.json"}
|
|
29
|
-
{"at":"2026-05-18T16:10:28.179Z","type":"write","tenantId":"tenant_a","path":"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbehih3_bob_mpbehihc.json"}
|
|
30
|
-
{"at":"2026-05-18T16:10:28.195Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
31
|
-
{"at":"2026-05-18T16:13:16.374Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
32
|
-
{"at":"2026-05-18T16:13:16.388Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
33
|
-
{"at":"2026-05-18T16:13:16.392Z","type":"write","tenantId":"tenant_a","path":"plaza/ideas/idea_loop_ai_debugging_mpbel49x.json"}
|
|
34
|
-
{"at":"2026-05-18T16:13:16.400Z","type":"write","tenantId":"tenant_a","path":"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbel49x_bob_mpbel4a6.json"}
|
|
35
|
-
{"at":"2026-05-18T16:13:16.413Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
36
|
-
{"at":"2026-05-19T05:21:57.658Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
37
|
-
{"at":"2026-05-19T05:21:57.667Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
38
|
-
{"at":"2026-05-19T05:21:57.669Z","type":"write","tenantId":"tenant_a","path":"plaza/ideas/idea_loop_ai_debugging_mpc6rdlv.json"}
|
|
39
|
-
{"at":"2026-05-19T05:21:57.673Z","type":"write","tenantId":"tenant_a","path":"plaza/forks/idea_fork_idea_loop_ai_debugging_mpc6rdlv_bob_mpc6rdm0.json"}
|
|
40
|
-
{"at":"2026-05-19T05:21:57.680Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
41
|
-
{"at":"2026-05-19T05:25:36.356Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
42
|
-
{"at":"2026-05-19T05:25:36.378Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
43
|
-
{"at":"2026-05-19T05:25:36.385Z","type":"write","tenantId":"tenant_a","path":"plaza/ideas/idea_loop_ai_debugging_mpc6w2d8.json"}
|
|
44
|
-
{"at":"2026-05-19T05:25:36.392Z","type":"write","tenantId":"tenant_a","path":"plaza/forks/idea_fork_idea_loop_ai_debugging_mpc6w2d8_bob_mpc6w2dh.json"}
|
|
45
|
-
{"at":"2026-05-19T05:25:36.404Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
46
|
-
{"at":"2026-05-30T21:07:13.944Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
47
|
-
{"at":"2026-05-30T21:07:13.993Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
48
|
-
{"at":"2026-05-30T21:07:14.007Z","type":"write","tenantId":"tenant_a","path":"plaza/ideas/idea_loop_ai_debugging_mpsuddjf.json"}
|
|
49
|
-
{"at":"2026-05-30T21:07:14.016Z","type":"write","tenantId":"tenant_a","path":"plaza/forks/idea_fork_idea_loop_ai_debugging_mpsuddjf_bob_mpsuddjy.json"}
|
|
50
|
-
{"at":"2026-05-30T21:07:14.045Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
51
|
-
{"at":"2026-07-01T01:40:41.222Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
52
|
-
{"at":"2026-07-01T01:40:41.534Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
53
|
-
{"at":"2026-07-01T01:40:41.605Z","type":"write","tenantId":"tenant_a","path":"plaza/ideas/idea_loop_ai_debugging_mr1esgcu.json"}
|
|
54
|
-
{"at":"2026-07-01T01:40:41.760Z","type":"write","tenantId":"tenant_a","path":"plaza/forks/idea_fork_idea_loop_ai_debugging_mr1esgcu_bob_mr1esgh9.json"}
|
|
55
|
-
{"at":"2026-07-01T01:40:41.831Z","type":"reindex","tenantId":"tenant_a","files":0}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{"traceId":"idea_plaza_publish_idea_loop_ai_debugging_mpbd2xr6_mpbd2xr9","kind":"content_write","affected":["plaza/ideas/idea_loop_ai_debugging_mpbd2xr6.json"],"parent":null,"snapshot":{"plaza/ideas/idea_loop_ai_debugging_mpbd2xr6.json":"{\n \"ideaId\": \"idea_loop_ai_debugging_mpbd2xr6\",\n \"title\": \"Loop\",\n \"oneLine\": \"AI debugging\",\n \"level\": \"cloneable\",\n \"tags\": [\n \"debugging\",\n \"developer-tools\"\n ],\n \"redactions\": [\n \"customers\",\n \"finances\"\n ],\n \"cemeteryWarnings\": [\n {\n \"title\": \"DebugMate\",\n \"cause\": \"no PMF\"\n }\n ],\n \"publicationPath\": \"plaza/ideas/idea_loop_ai_debugging_mpbd2xr6.json\",\n \"publishedAt\": \"2026-05-18T15:31:08.514Z\",\n \"body\": \"Developer tool for stack trace conversations.\"\n}\n"},"id":"d582b514a244545610108ce3ffe7208f438de419e2397f55323ff725553ddb13","tenantId":"tenant_a","at":"2026-05-18T15:31:08.519Z","summary":"content_write touched 1 path(s)","objectHashes":["fb7779bab381810e016862a790b73fd2a9b12462765437bc2bd91ea7886a6caa"]}
|
|
2
|
-
{"traceId":"idea_plaza_fork_idea_fork_idea_loop_ai_debugging_mpbd2xr_mpbd2xre","kind":"content_write","affected":["plaza/forks/idea_fork_idea_loop_ai_debugging_mpbd2xr6_bob_mpbd2xrc.json"],"parent":null,"snapshot":{"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbd2xr6_bob_mpbd2xrc.json":"{\n \"forkId\": \"idea_fork_idea_loop_ai_debugging_mpbd2xr6_bob_mpbd2xrc\",\n \"sourceIdeaId\": \"idea_loop_ai_debugging_mpbd2xr6\",\n \"newFounderId\": \"bob\",\n \"inheritPlayPreferences\": true,\n \"attribution\": {\n \"displayInNewCompany\": true,\n \"publicLineage\": true\n },\n \"createdAt\": \"2026-05-18T15:31:08.520Z\"\n}\n"},"id":"aea3edc01a78cd075101db186a4fb346e767ae93d028d2522c7e74d9c1b2c8ee","tenantId":"tenant_a","at":"2026-05-18T15:31:08.522Z","summary":"content_write touched 1 path(s)","objectHashes":["6e7ad58c612456466cc17c95b05c0c25d9581e6095fb35f1934cb2fd10cdfd1a"]}
|
|
3
|
-
{"traceId":"idea_plaza_publish_idea_loop_ai_debugging_mpbd8fhw_mpbd8fhz","kind":"content_write","affected":["plaza/ideas/idea_loop_ai_debugging_mpbd8fhw.json"],"parent":null,"snapshot":{"plaza/ideas/idea_loop_ai_debugging_mpbd8fhw.json":"{\n \"ideaId\": \"idea_loop_ai_debugging_mpbd8fhw\",\n \"title\": \"Loop\",\n \"oneLine\": \"AI debugging\",\n \"level\": \"cloneable\",\n \"tags\": [\n \"debugging\",\n \"developer-tools\"\n ],\n \"redactions\": [\n \"customers\",\n \"finances\"\n ],\n \"cemeteryWarnings\": [\n {\n \"title\": \"DebugMate\",\n \"cause\": \"no PMF\"\n }\n ],\n \"publicationPath\": \"plaza/ideas/idea_loop_ai_debugging_mpbd8fhw.json\",\n \"publishedAt\": \"2026-05-18T15:35:24.788Z\",\n \"body\": \"Developer tool for stack trace conversations.\"\n}\n"},"id":"4c87eb5dd615a4155df7d605293f91715cb08973bbb0f33447f6a62dc50dca44","tenantId":"tenant_a","at":"2026-05-18T15:35:24.793Z","summary":"content_write touched 1 path(s)","objectHashes":["f8b567405474f322f4ea2a4e026de3100bfda800f4e72e18a29d9ccea0f5230b"]}
|
|
4
|
-
{"traceId":"idea_plaza_fork_idea_fork_idea_loop_ai_debugging_mpbd8fh_mpbd8fi5","kind":"content_write","affected":["plaza/forks/idea_fork_idea_loop_ai_debugging_mpbd8fhw_bob_mpbd8fi3.json"],"parent":null,"snapshot":{"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbd8fhw_bob_mpbd8fi3.json":"{\n \"forkId\": \"idea_fork_idea_loop_ai_debugging_mpbd8fhw_bob_mpbd8fi3\",\n \"sourceIdeaId\": \"idea_loop_ai_debugging_mpbd8fhw\",\n \"newFounderId\": \"bob\",\n \"inheritPlayPreferences\": true,\n \"attribution\": {\n \"displayInNewCompany\": true,\n \"publicLineage\": true\n },\n \"createdAt\": \"2026-05-18T15:35:24.795Z\"\n}\n"},"id":"d6a9ab710347f76bd69cf3aa33aee69ad0260d5ce83e3733aeb982334a50abc7","tenantId":"tenant_a","at":"2026-05-18T15:35:24.798Z","summary":"content_write touched 1 path(s)","objectHashes":["c9074412d72691d0317ef7650a9078f24b23b414d823bcd2a1f8146b297d8d78"]}
|
|
5
|
-
{"traceId":"idea_plaza_publish_idea_loop_ai_debugging_mpbdar0n_mpbdar0q","kind":"content_write","affected":["plaza/ideas/idea_loop_ai_debugging_mpbdar0n.json"],"parent":null,"snapshot":{"plaza/ideas/idea_loop_ai_debugging_mpbdar0n.json":"{\n \"ideaId\": \"idea_loop_ai_debugging_mpbdar0n\",\n \"title\": \"Loop\",\n \"oneLine\": \"AI debugging\",\n \"level\": \"cloneable\",\n \"tags\": [\n \"debugging\",\n \"developer-tools\"\n ],\n \"redactions\": [\n \"customers\",\n \"finances\"\n ],\n \"cemeteryWarnings\": [\n {\n \"title\": \"DebugMate\",\n \"cause\": \"no PMF\"\n }\n ],\n \"publicationPath\": \"plaza/ideas/idea_loop_ai_debugging_mpbdar0n.json\",\n \"publishedAt\": \"2026-05-18T15:37:13.031Z\",\n \"body\": \"Developer tool for stack trace conversations.\"\n}\n"},"id":"be56aaf1b5db84ac229237222dc9a7445723c1ed285cb88725fd3b0ebc8bd60c","tenantId":"tenant_a","at":"2026-05-18T15:37:13.036Z","summary":"content_write touched 1 path(s)","objectHashes":["04aad980bccb016cf05d2793f95636ec6961e21e23ec56a5697835a2ee8fcf64"]}
|
|
6
|
-
{"traceId":"idea_plaza_fork_idea_fork_idea_loop_ai_debugging_mpbdar0_mpbdar0v","kind":"content_write","affected":["plaza/forks/idea_fork_idea_loop_ai_debugging_mpbdar0n_bob_mpbdar0t.json"],"parent":null,"snapshot":{"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbdar0n_bob_mpbdar0t.json":"{\n \"forkId\": \"idea_fork_idea_loop_ai_debugging_mpbdar0n_bob_mpbdar0t\",\n \"sourceIdeaId\": \"idea_loop_ai_debugging_mpbdar0n\",\n \"newFounderId\": \"bob\",\n \"inheritPlayPreferences\": true,\n \"attribution\": {\n \"displayInNewCompany\": true,\n \"publicLineage\": true\n },\n \"createdAt\": \"2026-05-18T15:37:13.037Z\"\n}\n"},"id":"9db63d8a712813c762b81d0f151ced19c802346ef8e11d63cae3112f4de6a840","tenantId":"tenant_a","at":"2026-05-18T15:37:13.041Z","summary":"content_write touched 1 path(s)","objectHashes":["38f7174da63fc685bd2b1032b380568c92bc5435e5efa5dfe1e5cc13ed11d6b0"]}
|
|
7
|
-
{"traceId":"idea_plaza_publish_idea_loop_ai_debugging_mpbe87lt_mpbe87n5","kind":"content_write","affected":["plaza/ideas/idea_loop_ai_debugging_mpbe87lt.json"],"parent":null,"snapshot":{"plaza/ideas/idea_loop_ai_debugging_mpbe87lt.json":"{\n \"ideaId\": \"idea_loop_ai_debugging_mpbe87lt\",\n \"title\": \"Loop\",\n \"oneLine\": \"AI debugging\",\n \"level\": \"cloneable\",\n \"tags\": [\n \"debugging\",\n \"developer-tools\"\n ],\n \"redactions\": [\n \"customers\",\n \"finances\"\n ],\n \"cemeteryWarnings\": [\n {\n \"title\": \"DebugMate\",\n \"cause\": \"no PMF\"\n }\n ],\n \"publicationPath\": \"plaza/ideas/idea_loop_ai_debugging_mpbe87lt.json\",\n \"publishedAt\": \"2026-05-18T16:03:14.177Z\",\n \"body\": \"Developer tool for stack trace conversations.\"\n}\n"},"id":"22b08401f9c3cbe8cc3809a9ddf30f03d9b5f285b46867daf7b8697ab9b2e3ec","tenantId":"tenant_a","at":"2026-05-18T16:03:14.229Z","summary":"content_write touched 1 path(s)","objectHashes":["601e8e21469aa02d3701bb914aa43c763f3dbe8cb3d0a3825bc378d89056f815"]}
|
|
8
|
-
{"traceId":"idea_plaza_fork_idea_fork_idea_loop_ai_debugging_mpbe87l_mpbe87nu","kind":"content_write","affected":["plaza/forks/idea_fork_idea_loop_ai_debugging_mpbe87lt_bob_mpbe87ni.json"],"parent":null,"snapshot":{"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbe87lt_bob_mpbe87ni.json":"{\n \"forkId\": \"idea_fork_idea_loop_ai_debugging_mpbe87lt_bob_mpbe87ni\",\n \"sourceIdeaId\": \"idea_loop_ai_debugging_mpbe87lt\",\n \"newFounderId\": \"bob\",\n \"inheritPlayPreferences\": true,\n \"attribution\": {\n \"displayInNewCompany\": true,\n \"publicLineage\": true\n },\n \"createdAt\": \"2026-05-18T16:03:14.238Z\"\n}\n"},"id":"cb5363f9cd15eaf1612bbdbe9db7dfe1e07082d39310f9fb1fd43d9909e77fd0","tenantId":"tenant_a","at":"2026-05-18T16:03:14.261Z","summary":"content_write touched 1 path(s)","objectHashes":["1cdbe93894e326637a8993d7dcd9e48f5a75ea07b6de675a2e5e32f92d27c779"]}
|
|
9
|
-
{"traceId":"idea_plaza_publish_idea_loop_ai_debugging_mpbeaiw3_mpbeaiw9","kind":"content_write","affected":["plaza/ideas/idea_loop_ai_debugging_mpbeaiw3.json"],"parent":null,"snapshot":{"plaza/ideas/idea_loop_ai_debugging_mpbeaiw3.json":"{\n \"ideaId\": \"idea_loop_ai_debugging_mpbeaiw3\",\n \"title\": \"Loop\",\n \"oneLine\": \"AI debugging\",\n \"level\": \"cloneable\",\n \"tags\": [\n \"debugging\",\n \"developer-tools\"\n ],\n \"redactions\": [\n \"customers\",\n \"finances\"\n ],\n \"cemeteryWarnings\": [\n {\n \"title\": \"DebugMate\",\n \"cause\": \"no PMF\"\n }\n ],\n \"publicationPath\": \"plaza/ideas/idea_loop_ai_debugging_mpbeaiw3.json\",\n \"publishedAt\": \"2026-05-18T16:05:02.115Z\",\n \"body\": \"Developer tool for stack trace conversations.\"\n}\n"},"id":"fdae51a0344a991e9aa632b006a463d0c7e1f13e13dd50be65b7c89e662d5ab3","tenantId":"tenant_a","at":"2026-05-18T16:05:02.126Z","summary":"content_write touched 1 path(s)","objectHashes":["65329de62d47abf7a1ea21d33a288331fb0822de9112b89d8b54f38c071cb28d"]}
|
|
10
|
-
{"traceId":"idea_plaza_fork_idea_fork_idea_loop_ai_debugging_mpbeaiw_mpbeaiwo","kind":"content_write","affected":["plaza/forks/idea_fork_idea_loop_ai_debugging_mpbeaiw3_bob_mpbeaiwj.json"],"parent":null,"snapshot":{"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbeaiw3_bob_mpbeaiwj.json":"{\n \"forkId\": \"idea_fork_idea_loop_ai_debugging_mpbeaiw3_bob_mpbeaiwj\",\n \"sourceIdeaId\": \"idea_loop_ai_debugging_mpbeaiw3\",\n \"newFounderId\": \"bob\",\n \"inheritPlayPreferences\": true,\n \"attribution\": {\n \"displayInNewCompany\": true,\n \"publicLineage\": true\n },\n \"createdAt\": \"2026-05-18T16:05:02.131Z\"\n}\n"},"id":"48ed9f59c019b59605ffe5c2ab8dd0bf817d26fd355c5f9f1c1f6bab141dbea2","tenantId":"tenant_a","at":"2026-05-18T16:05:02.138Z","summary":"content_write touched 1 path(s)","objectHashes":["57a97fe2072b358dbcb8e37ec95aa01f381a2fa5c1d02a5399e71684e480c098"]}
|
|
11
|
-
{"traceId":"idea_plaza_publish_idea_loop_ai_debugging_mpbehih3_mpbehih6","kind":"content_write","affected":["plaza/ideas/idea_loop_ai_debugging_mpbehih3.json"],"parent":null,"snapshot":{"plaza/ideas/idea_loop_ai_debugging_mpbehih3.json":"{\n \"ideaId\": \"idea_loop_ai_debugging_mpbehih3\",\n \"title\": \"Loop\",\n \"oneLine\": \"AI debugging\",\n \"level\": \"cloneable\",\n \"tags\": [\n \"debugging\",\n \"developer-tools\"\n ],\n \"redactions\": [\n \"customers\",\n \"finances\"\n ],\n \"cemeteryWarnings\": [\n {\n \"title\": \"DebugMate\",\n \"cause\": \"no PMF\"\n }\n ],\n \"publicationPath\": \"plaza/ideas/idea_loop_ai_debugging_mpbehih3.json\",\n \"publishedAt\": \"2026-05-18T16:10:28.167Z\",\n \"body\": \"Developer tool for stack trace conversations.\"\n}\n"},"id":"dd3541d650237a200ae497044b3f24d29be14f90f9cf239632820150aaefc65e","tenantId":"tenant_a","at":"2026-05-18T16:10:28.174Z","summary":"content_write touched 1 path(s)","objectHashes":["17f0b7243f524364958b7f2c7831ca63d1d2259459446c0d6ef1cce5967921be"]}
|
|
12
|
-
{"traceId":"idea_plaza_fork_idea_fork_idea_loop_ai_debugging_mpbehih_mpbehihf","kind":"content_write","affected":["plaza/forks/idea_fork_idea_loop_ai_debugging_mpbehih3_bob_mpbehihc.json"],"parent":null,"snapshot":{"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbehih3_bob_mpbehihc.json":"{\n \"forkId\": \"idea_fork_idea_loop_ai_debugging_mpbehih3_bob_mpbehihc\",\n \"sourceIdeaId\": \"idea_loop_ai_debugging_mpbehih3\",\n \"newFounderId\": \"bob\",\n \"inheritPlayPreferences\": true,\n \"attribution\": {\n \"displayInNewCompany\": true,\n \"publicLineage\": true\n },\n \"createdAt\": \"2026-05-18T16:10:28.176Z\"\n}\n"},"id":"1d8de20d19d5e7f2b07a264513984c00f6fde1f7ca20458c0cc6b3503c7c8e49","tenantId":"tenant_a","at":"2026-05-18T16:10:28.180Z","summary":"content_write touched 1 path(s)","objectHashes":["b8634c7ab6d9b3d31a31471a55b2f97fd7995dc9e8036097306f71e241baf166"]}
|
|
13
|
-
{"traceId":"idea_plaza_publish_idea_loop_ai_debugging_mpbel49x_mpbel4a1","kind":"content_write","affected":["plaza/ideas/idea_loop_ai_debugging_mpbel49x.json"],"parent":null,"snapshot":{"plaza/ideas/idea_loop_ai_debugging_mpbel49x.json":"{\n \"ideaId\": \"idea_loop_ai_debugging_mpbel49x\",\n \"title\": \"Loop\",\n \"oneLine\": \"AI debugging\",\n \"level\": \"cloneable\",\n \"tags\": [\n \"debugging\",\n \"developer-tools\"\n ],\n \"redactions\": [\n \"customers\",\n \"finances\"\n ],\n \"cemeteryWarnings\": [\n {\n \"title\": \"DebugMate\",\n \"cause\": \"no PMF\"\n }\n ],\n \"publicationPath\": \"plaza/ideas/idea_loop_ai_debugging_mpbel49x.json\",\n \"publishedAt\": \"2026-05-18T16:13:16.389Z\",\n \"body\": \"Developer tool for stack trace conversations.\"\n}\n"},"id":"842a5fd367ef5f697cde6ca20a6f3387c9e39684840df691e647995dabdbbf86","tenantId":"tenant_a","at":"2026-05-18T16:13:16.395Z","summary":"content_write touched 1 path(s)","objectHashes":["1673d4fc4dbaf26fe15f5272ed188194a33ebd84bb3e5e0e196bba065a76f9ca"]}
|
|
14
|
-
{"traceId":"idea_plaza_fork_idea_fork_idea_loop_ai_debugging_mpbel49_mpbel4a8","kind":"content_write","affected":["plaza/forks/idea_fork_idea_loop_ai_debugging_mpbel49x_bob_mpbel4a6.json"],"parent":null,"snapshot":{"plaza/forks/idea_fork_idea_loop_ai_debugging_mpbel49x_bob_mpbel4a6.json":"{\n \"forkId\": \"idea_fork_idea_loop_ai_debugging_mpbel49x_bob_mpbel4a6\",\n \"sourceIdeaId\": \"idea_loop_ai_debugging_mpbel49x\",\n \"newFounderId\": \"bob\",\n \"inheritPlayPreferences\": true,\n \"attribution\": {\n \"displayInNewCompany\": true,\n \"publicLineage\": true\n },\n \"createdAt\": \"2026-05-18T16:13:16.398Z\"\n}\n"},"id":"06e5543727d9cc09708876b0736d7acf2d5bc9d638463698faab188345c0f089","tenantId":"tenant_a","at":"2026-05-18T16:13:16.401Z","summary":"content_write touched 1 path(s)","objectHashes":["6ddfcdc6dbc46ac5774a32ce309f89b31de1c8a3d09c6910ceba3ecc6012f295"]}
|
|
15
|
-
{"traceId":"idea_plaza_publish_idea_loop_ai_debugging_mpc6rdlv_mpc6rdlx","kind":"content_write","affected":["plaza/ideas/idea_loop_ai_debugging_mpc6rdlv.json"],"parent":null,"snapshot":{"plaza/ideas/idea_loop_ai_debugging_mpc6rdlv.json":"{\n \"ideaId\": \"idea_loop_ai_debugging_mpc6rdlv\",\n \"title\": \"Loop\",\n \"oneLine\": \"AI debugging\",\n \"level\": \"cloneable\",\n \"tags\": [\n \"debugging\",\n \"developer-tools\"\n ],\n \"redactions\": [\n \"customers\",\n \"finances\"\n ],\n \"cemeteryWarnings\": [\n {\n \"title\": \"DebugMate\",\n \"cause\": \"no PMF\"\n }\n ],\n \"publicationPath\": \"plaza/ideas/idea_loop_ai_debugging_mpc6rdlv.json\",\n \"publishedAt\": \"2026-05-19T05:21:57.667Z\",\n \"body\": \"Developer tool for stack trace conversations.\"\n}\n"},"id":"85b6ae630aabde8b5cd83e15e933fa2658d71d05f4b40a1d428de8916f5ca430","tenantId":"tenant_a","at":"2026-05-19T05:21:57.670Z","summary":"content_write touched 1 path(s)","objectHashes":["50a0ae64550d5e7f7c58d2497022aa19600348c6fa325e8755f72ef3debe2a7b"]}
|
|
16
|
-
{"traceId":"idea_plaza_fork_idea_fork_idea_loop_ai_debugging_mpc6rdl_mpc6rdm1","kind":"content_write","affected":["plaza/forks/idea_fork_idea_loop_ai_debugging_mpc6rdlv_bob_mpc6rdm0.json"],"parent":null,"snapshot":{"plaza/forks/idea_fork_idea_loop_ai_debugging_mpc6rdlv_bob_mpc6rdm0.json":"{\n \"forkId\": \"idea_fork_idea_loop_ai_debugging_mpc6rdlv_bob_mpc6rdm0\",\n \"sourceIdeaId\": \"idea_loop_ai_debugging_mpc6rdlv\",\n \"newFounderId\": \"bob\",\n \"inheritPlayPreferences\": true,\n \"attribution\": {\n \"displayInNewCompany\": true,\n \"publicLineage\": true\n },\n \"createdAt\": \"2026-05-19T05:21:57.672Z\"\n}\n"},"id":"1c7d9b6cc75604ef47dad5d96bd7ed89a4bd8a9cb00bc61b15b1b285138f8d28","tenantId":"tenant_a","at":"2026-05-19T05:21:57.673Z","summary":"content_write touched 1 path(s)","objectHashes":["9ec87be880dbeaa90b4b28dcc95854a9c8de09587844ede0024c415898cf311d"]}
|
|
17
|
-
{"traceId":"idea_plaza_publish_idea_loop_ai_debugging_mpc6w2d8_mpc6w2dd","kind":"content_write","affected":["plaza/ideas/idea_loop_ai_debugging_mpc6w2d8.json"],"parent":null,"snapshot":{"plaza/ideas/idea_loop_ai_debugging_mpc6w2d8.json":"{\n \"ideaId\": \"idea_loop_ai_debugging_mpc6w2d8\",\n \"title\": \"Loop\",\n \"oneLine\": \"AI debugging\",\n \"level\": \"cloneable\",\n \"tags\": [\n \"debugging\",\n \"developer-tools\"\n ],\n \"redactions\": [\n \"customers\",\n \"finances\"\n ],\n \"cemeteryWarnings\": [\n {\n \"title\": \"DebugMate\",\n \"cause\": \"no PMF\"\n }\n ],\n \"publicationPath\": \"plaza/ideas/idea_loop_ai_debugging_mpc6w2d8.json\",\n \"publishedAt\": \"2026-05-19T05:25:36.380Z\",\n \"body\": \"Developer tool for stack trace conversations.\"\n}\n"},"id":"3608c6b34015819d7faf70b2318b25915e7173d36df7a3323740786478b91cf3","tenantId":"tenant_a","at":"2026-05-19T05:25:36.387Z","summary":"content_write touched 1 path(s)","objectHashes":["469a3f160883d5502523a36dd3a4035699b87ca5dbdbae65804a0b2bb24dcd1f"]}
|
|
18
|
-
{"traceId":"idea_plaza_fork_idea_fork_idea_loop_ai_debugging_mpc6w2d_mpc6w2dk","kind":"content_write","affected":["plaza/forks/idea_fork_idea_loop_ai_debugging_mpc6w2d8_bob_mpc6w2dh.json"],"parent":null,"snapshot":{"plaza/forks/idea_fork_idea_loop_ai_debugging_mpc6w2d8_bob_mpc6w2dh.json":"{\n \"forkId\": \"idea_fork_idea_loop_ai_debugging_mpc6w2d8_bob_mpc6w2dh\",\n \"sourceIdeaId\": \"idea_loop_ai_debugging_mpc6w2d8\",\n \"newFounderId\": \"bob\",\n \"inheritPlayPreferences\": true,\n \"attribution\": {\n \"displayInNewCompany\": true,\n \"publicLineage\": true\n },\n \"createdAt\": \"2026-05-19T05:25:36.389Z\"\n}\n"},"id":"5639a8bd7ef872ba5618825ccc1dc2e3056dfef6551a4ac7f5a179ba7c971f09","tenantId":"tenant_a","at":"2026-05-19T05:25:36.394Z","summary":"content_write touched 1 path(s)","objectHashes":["ef2862e0762e06267c6f8c7e09c3fa22cb3f81d6169f5f844f9766e9a99b08f0"]}
|
|
19
|
-
{"at":"2026-05-30T21:07:14.011Z","traceId":"idea_plaza_publish_idea_loop_ai_debugging_mpsuddjf_mpsuddjs","kind":"content_write","affected":["plaza/ideas/idea_loop_ai_debugging_mpsuddjf.json"],"parent":null,"snapshot":{"plaza/ideas/idea_loop_ai_debugging_mpsuddjf.json":"{\n \"ideaId\": \"idea_loop_ai_debugging_mpsuddjf\",\n \"title\": \"Loop\",\n \"oneLine\": \"AI debugging\",\n \"level\": \"cloneable\",\n \"tags\": [\n \"debugging\",\n \"developer-tools\"\n ],\n \"redactions\": [\n \"customers\",\n \"finances\"\n ],\n \"cemeteryWarnings\": [\n {\n \"title\": \"DebugMate\",\n \"cause\": \"no PMF\"\n }\n ],\n \"publicationPath\": \"plaza/ideas/idea_loop_ai_debugging_mpsuddjf.json\",\n \"publishedAt\": \"2026-05-30T21:07:13.995Z\",\n \"body\": \"Developer tool for stack trace conversations.\"\n}\n"},"id":"bfb5257f683526e316f42e09732d5a3c746cd20296f8147d19e40c415fc92cbf","tenantId":"tenant_a","summary":"content_write touched 1 path(s)","objectHashes":["9547e0201de12eed6e207a7063efea2b82de4af48a3f11238631f9b87240ef8f"]}
|
|
20
|
-
{"at":"2026-05-30T21:07:14.017Z","traceId":"idea_plaza_fork_idea_fork_idea_loop_ai_debugging_mpsuddj_mpsuddk0","kind":"content_write","affected":["plaza/forks/idea_fork_idea_loop_ai_debugging_mpsuddjf_bob_mpsuddjy.json"],"parent":null,"snapshot":{"plaza/forks/idea_fork_idea_loop_ai_debugging_mpsuddjf_bob_mpsuddjy.json":"{\n \"forkId\": \"idea_fork_idea_loop_ai_debugging_mpsuddjf_bob_mpsuddjy\",\n \"sourceIdeaId\": \"idea_loop_ai_debugging_mpsuddjf\",\n \"newFounderId\": \"bob\",\n \"inheritPlayPreferences\": true,\n \"attribution\": {\n \"displayInNewCompany\": true,\n \"publicLineage\": true\n },\n \"createdAt\": \"2026-05-30T21:07:14.014Z\"\n}\n"},"id":"6576c4e95550031db69c12d6e3d3b7d866f4f28fdbf5cffc2b1349fe2291a26e","tenantId":"tenant_a","summary":"content_write touched 1 path(s)","objectHashes":["f8a7635b5d4dae628334df44f70f150ba5ce5dfd3d6d002d7006c6b3978b63ed"]}
|
|
21
|
-
{"at":"2026-07-01T01:40:41.688Z","traceId":"idea_plaza_publish_idea_loop_ai_debugging_mr1esgcu_mr1esgek","kind":"content_write","affected":["plaza/ideas/idea_loop_ai_debugging_mr1esgcu.json"],"parent":null,"snapshot":{"plaza/ideas/idea_loop_ai_debugging_mr1esgcu.json":"{\n \"ideaId\": \"idea_loop_ai_debugging_mr1esgcu\",\n \"title\": \"Loop\",\n \"oneLine\": \"AI debugging\",\n \"level\": \"cloneable\",\n \"tags\": [\n \"debugging\",\n \"developer-tools\"\n ],\n \"redactions\": [\n \"customers\",\n \"finances\"\n ],\n \"cemeteryWarnings\": [\n {\n \"title\": \"DebugMate\",\n \"cause\": \"no PMF\"\n }\n ],\n \"publicationPath\": \"plaza/ideas/idea_loop_ai_debugging_mr1esgcu.json\",\n \"publishedAt\": \"2026-07-01T01:40:41.550Z\",\n \"body\": \"Developer tool for stack trace conversations.\"\n}\n"},"id":"82e61bc484923ef4f916503b0d56a568514bc5be0ac080d37d3114a8cb25dfa1","tenantId":"tenant_a","summary":"content_write touched 1 path(s)","objectHashes":["1c611c378648fd9c5a196b5adfe581f3a836f2d71b373740de767eeefa1e467b"]}
|
|
22
|
-
{"at":"2026-07-01T01:40:41.779Z","traceId":"idea_plaza_fork_idea_fork_idea_loop_ai_debugging_mr1esgc_mr1esgiv","kind":"content_write","affected":["plaza/forks/idea_fork_idea_loop_ai_debugging_mr1esgcu_bob_mr1esgh9.json"],"parent":null,"snapshot":{"plaza/forks/idea_fork_idea_loop_ai_debugging_mr1esgcu_bob_mr1esgh9.json":"{\n \"forkId\": \"idea_fork_idea_loop_ai_debugging_mr1esgcu_bob_mr1esgh9\",\n \"sourceIdeaId\": \"idea_loop_ai_debugging_mr1esgcu\",\n \"newFounderId\": \"bob\",\n \"inheritPlayPreferences\": true,\n \"attribution\": {\n \"displayInNewCompany\": true,\n \"publicLineage\": true\n },\n \"createdAt\": \"2026-07-01T01:40:41.709Z\"\n}\n"},"id":"16029ce43a322da395f16926cedfcf48b223ad9c5af289293ec4e9e55e0039bc","tenantId":"tenant_a","summary":"content_write touched 1 path(s)","objectHashes":["3d4a738ca2f359b388f4865b293f33a5738939f15e2a4771a6d0098bd7e924d9"]}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
{"at":"2026-05-18T15:31:08.520Z","type":"publish","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbd2xr6","level":"cloneable"}
|
|
2
|
-
{"at":"2026-05-18T15:31:08.523Z","type":"fork","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbd2xr6","forkId":"idea_fork_idea_loop_ai_debugging_mpbd2xr6_bob_mpbd2xrc"}
|
|
3
|
-
{"at":"2026-05-18T15:31:08.523Z","type":"feed","tenantId":"tenant_a","sort":"hot"}
|
|
4
|
-
{"at":"2026-05-18T15:35:24.794Z","type":"publish","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbd8fhw","level":"cloneable"}
|
|
5
|
-
{"at":"2026-05-18T15:35:24.799Z","type":"fork","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbd8fhw","forkId":"idea_fork_idea_loop_ai_debugging_mpbd8fhw_bob_mpbd8fi3"}
|
|
6
|
-
{"at":"2026-05-18T15:35:24.799Z","type":"feed","tenantId":"tenant_a","sort":"hot"}
|
|
7
|
-
{"at":"2026-05-18T15:37:13.037Z","type":"publish","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbdar0n","level":"cloneable"}
|
|
8
|
-
{"at":"2026-05-18T15:37:13.042Z","type":"fork","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbdar0n","forkId":"idea_fork_idea_loop_ai_debugging_mpbdar0n_bob_mpbdar0t"}
|
|
9
|
-
{"at":"2026-05-18T15:37:13.042Z","type":"feed","tenantId":"tenant_a","sort":"hot"}
|
|
10
|
-
{"at":"2026-05-18T16:03:14.234Z","type":"publish","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbe87lt","level":"cloneable"}
|
|
11
|
-
{"at":"2026-05-18T16:03:14.275Z","type":"fork","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbe87lt","forkId":"idea_fork_idea_loop_ai_debugging_mpbe87lt_bob_mpbe87ni"}
|
|
12
|
-
{"at":"2026-05-18T16:03:14.278Z","type":"feed","tenantId":"tenant_a","sort":"hot"}
|
|
13
|
-
{"at":"2026-05-18T16:05:02.129Z","type":"publish","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbeaiw3","level":"cloneable"}
|
|
14
|
-
{"at":"2026-05-18T16:05:02.139Z","type":"fork","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbeaiw3","forkId":"idea_fork_idea_loop_ai_debugging_mpbeaiw3_bob_mpbeaiwj"}
|
|
15
|
-
{"at":"2026-05-18T16:05:02.140Z","type":"feed","tenantId":"tenant_a","sort":"hot"}
|
|
16
|
-
{"at":"2026-05-18T16:10:28.176Z","type":"publish","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbehih3","level":"cloneable"}
|
|
17
|
-
{"at":"2026-05-18T16:10:28.181Z","type":"fork","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbehih3","forkId":"idea_fork_idea_loop_ai_debugging_mpbehih3_bob_mpbehihc"}
|
|
18
|
-
{"at":"2026-05-18T16:10:28.181Z","type":"feed","tenantId":"tenant_a","sort":"hot"}
|
|
19
|
-
{"at":"2026-05-18T16:13:16.397Z","type":"publish","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbel49x","level":"cloneable"}
|
|
20
|
-
{"at":"2026-05-18T16:13:16.402Z","type":"fork","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpbel49x","forkId":"idea_fork_idea_loop_ai_debugging_mpbel49x_bob_mpbel4a6"}
|
|
21
|
-
{"at":"2026-05-18T16:13:16.402Z","type":"feed","tenantId":"tenant_a","sort":"hot"}
|
|
22
|
-
{"at":"2026-05-19T05:21:57.671Z","type":"publish","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpc6rdlv","level":"cloneable"}
|
|
23
|
-
{"at":"2026-05-19T05:21:57.674Z","type":"fork","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpc6rdlv","forkId":"idea_fork_idea_loop_ai_debugging_mpc6rdlv_bob_mpc6rdm0"}
|
|
24
|
-
{"at":"2026-05-19T05:21:57.674Z","type":"feed","tenantId":"tenant_a","sort":"hot"}
|
|
25
|
-
{"at":"2026-05-19T05:25:36.389Z","type":"publish","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpc6w2d8","level":"cloneable"}
|
|
26
|
-
{"at":"2026-05-19T05:25:36.394Z","type":"fork","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpc6w2d8","forkId":"idea_fork_idea_loop_ai_debugging_mpc6w2d8_bob_mpc6w2dh"}
|
|
27
|
-
{"at":"2026-05-19T05:25:36.395Z","type":"feed","tenantId":"tenant_a","sort":"hot"}
|
|
28
|
-
{"at":"2026-05-30T21:07:14.013Z","type":"publish","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpsuddjf","level":"cloneable"}
|
|
29
|
-
{"at":"2026-05-30T21:07:14.027Z","type":"fork","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mpsuddjf","forkId":"idea_fork_idea_loop_ai_debugging_mpsuddjf_bob_mpsuddjy"}
|
|
30
|
-
{"at":"2026-05-30T21:07:14.029Z","type":"feed","tenantId":"tenant_a","sort":"hot"}
|
|
31
|
-
{"at":"2026-07-01T01:40:41.703Z","type":"publish","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mr1esgcu","level":"cloneable"}
|
|
32
|
-
{"at":"2026-07-01T01:40:41.783Z","type":"fork","tenantId":"tenant_a","ideaId":"idea_loop_ai_debugging_mr1esgcu","forkId":"idea_fork_idea_loop_ai_debugging_mr1esgcu_bob_mr1esgh9"}
|
|
33
|
-
{"at":"2026-07-01T01:40:41.784Z","type":"feed","tenantId":"tenant_a","sort":"hot"}
|
package/.turbo/turbo-build.log
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
> @nebutra/idea-plaza@0.1.3 build /Users/tseka_luk/Documents/Nebutra-SaaS-Lab/Nebutra-Sailor/packages/ai/idea-plaza
|
|
3
|
-
> tsup
|
|
4
|
-
|
|
5
|
-
CLI Building entry: src/cli.ts, src/index.ts
|
|
6
|
-
CLI Using tsconfig: tsconfig.json
|
|
7
|
-
CLI tsup v8.5.1
|
|
8
|
-
CLI Using tsup config: /Users/tseka_luk/Documents/Nebutra-SaaS-Lab/Nebutra-Sailor/packages/ai/idea-plaza/tsup.config.ts
|
|
9
|
-
CLI Target: es2022
|
|
10
|
-
CLI Cleaning output folder
|
|
11
|
-
ESM Build start
|
|
12
|
-
ESM dist/index.js 204.00 B
|
|
13
|
-
ESM dist/chunk-ODTUJYW5.js 5.61 KB
|
|
14
|
-
ESM dist/cli.js 1.20 KB
|
|
15
|
-
ESM dist/index.js.map 71.00 B
|
|
16
|
-
ESM dist/cli.js.map 2.20 KB
|
|
17
|
-
ESM dist/chunk-ODTUJYW5.js.map 12.09 KB
|
|
18
|
-
ESM ⚡️ Build success in 13ms
|
|
19
|
-
DTS Build start
|
|
20
|
-
DTS ⚡️ Build success in 2661ms
|
|
21
|
-
DTS dist/cli.d.ts 13.00 B
|
|
22
|
-
DTS dist/index.d.ts 2.76 KB
|
package/.turbo/turbo-test.log
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
> @nebutra/idea-plaza@0.1.2 test /Users/tseka_luk/Documents/Nebutra-SaaS-Lab/Nebutra-Sailor/packages/ai/idea-plaza
|
|
3
|
-
> vitest run
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
RUN v4.1.4 /Users/tseka_luk/Documents/Nebutra-SaaS-Lab/Nebutra-Sailor/packages/ai/idea-plaza
|
|
7
|
-
|
|
8
|
-
(node:57118) ExperimentalWarning: SQLite is an experimental feature and might change at any time
|
|
9
|
-
(Use `node --trace-warnings ...` to show where the warning was created)
|
|
10
|
-
✓ src/index.test.ts (3 tests) 637ms
|
|
11
|
-
✓ publishes explicit snapshots and preserves fork attribution 340ms
|
|
12
|
-
|
|
13
|
-
Test Files 1 passed (1)
|
|
14
|
-
Tests 3 passed (3)
|
|
15
|
-
Start at 09:40:38
|
|
16
|
-
Duration 3.20s (transform 1.03s, setup 0ms, import 1.39s, tests 637ms, environment 0ms)
|
|
17
|
-
|
package/examples/doctor.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { IdeaPlaza } from "../src/index";
|
|
2
|
-
|
|
3
|
-
const plaza = await IdeaPlaza.open(".nebutra/idea-plaza-example", { tenantId: "local" });
|
|
4
|
-
|
|
5
|
-
try {
|
|
6
|
-
process.stdout.write(`${JSON.stringify(await plaza.doctor(), null, 2)}\n`);
|
|
7
|
-
} finally {
|
|
8
|
-
await plaza.close();
|
|
9
|
-
}
|
package/examples/fork.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { IdeaPlaza } from "../src/index";
|
|
2
|
-
|
|
3
|
-
const plaza = await IdeaPlaza.open(".nebutra/idea-plaza-fork-example", { tenantId: "local" });
|
|
4
|
-
|
|
5
|
-
try {
|
|
6
|
-
const idea = await plaza.publish({
|
|
7
|
-
title: "Loop",
|
|
8
|
-
oneLine: "AI debugging for indie devs",
|
|
9
|
-
level: "cloneable",
|
|
10
|
-
tags: ["debugging"],
|
|
11
|
-
});
|
|
12
|
-
const fork = await plaza.fork(idea.ideaId, {
|
|
13
|
-
newFounderId: "bob",
|
|
14
|
-
inheritPlayPreferences: true,
|
|
15
|
-
});
|
|
16
|
-
process.stdout.write(`${JSON.stringify(fork, null, 2)}\n`);
|
|
17
|
-
} finally {
|
|
18
|
-
await plaza.close();
|
|
19
|
-
}
|
package/examples/quickstart.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { IdeaPlaza } from "../src/index";
|
|
2
|
-
|
|
3
|
-
const plaza = await IdeaPlaza.open(".nebutra/idea-plaza-example", { tenantId: "local" });
|
|
4
|
-
|
|
5
|
-
try {
|
|
6
|
-
const idea = await plaza.publish({
|
|
7
|
-
title: "Loop",
|
|
8
|
-
oneLine: "AI debugging for indie devs",
|
|
9
|
-
level: "surface",
|
|
10
|
-
body: "A developer tool that explains stack traces as a conversation.",
|
|
11
|
-
tags: ["debugging", "developer-tools"],
|
|
12
|
-
});
|
|
13
|
-
process.stdout.write(`${JSON.stringify(idea, null, 2)}\n`);
|
|
14
|
-
} finally {
|
|
15
|
-
await plaza.close();
|
|
16
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: publish_idea
|
|
3
|
-
kind: play
|
|
4
|
-
version: 1.0.0
|
|
5
|
-
description: Publish an explicit, redacted idea snapshot for discovery and fork lineage
|
|
6
|
-
required_skills:
|
|
7
|
-
- content_store.write
|
|
8
|
-
- event_log.commit
|
|
9
|
-
sub_agents:
|
|
10
|
-
- role: privacy_reviewer
|
|
11
|
-
allowed_skills: [content_store.write]
|
|
12
|
-
depends_on_plays: []
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## What this play does
|
|
16
|
-
|
|
17
|
-
Creates an opt-in public snapshot of an idea with lineage metadata.
|
|
18
|
-
|
|
19
|
-
## Boundaries
|
|
20
|
-
|
|
21
|
-
- Default state is private.
|
|
22
|
-
- Any detected sensitive field must be redacted before publishing.
|
|
23
|
-
- Fork attribution remains on so the lineage graph stays trustworthy.
|
package/src/cli.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { IdeaPlaza, readIdeaPlazaDebug } from "./index";
|
|
2
|
-
|
|
3
|
-
const command = process.argv[2] ?? "doctor";
|
|
4
|
-
const root = process.env.IDEA_PLAZA_ROOT ?? ".nebutra/idea-plaza";
|
|
5
|
-
const tenantId = process.env.NEBUTRA_TENANT_ID ?? "local";
|
|
6
|
-
|
|
7
|
-
if (command === "doctor") {
|
|
8
|
-
const plaza = await IdeaPlaza.open(root, { tenantId });
|
|
9
|
-
try {
|
|
10
|
-
process.stdout.write(`${JSON.stringify(await plaza.doctor(), null, 2)}\n`);
|
|
11
|
-
} finally {
|
|
12
|
-
await plaza.close();
|
|
13
|
-
}
|
|
14
|
-
} else if (command === "quickstart") {
|
|
15
|
-
const plaza = await IdeaPlaza.open(root, { tenantId });
|
|
16
|
-
try {
|
|
17
|
-
const idea = await plaza.publish({
|
|
18
|
-
title: "Loop",
|
|
19
|
-
oneLine: "AI debugging for indie devs",
|
|
20
|
-
level: "surface",
|
|
21
|
-
tags: ["debugging", "developer-tools"],
|
|
22
|
-
});
|
|
23
|
-
process.stdout.write(
|
|
24
|
-
`${JSON.stringify({ idea, feed: await plaza.feed({ sort: "hot", limit: 5 }) }, null, 2)}\n`,
|
|
25
|
-
);
|
|
26
|
-
} finally {
|
|
27
|
-
await plaza.close();
|
|
28
|
-
}
|
|
29
|
-
} else if (command === "debug") {
|
|
30
|
-
process.stdout.write(
|
|
31
|
-
`${JSON.stringify({ capability: "idea-plaza", entries: await readIdeaPlazaDebug() }, null, 2)}\n`,
|
|
32
|
-
);
|
|
33
|
-
} else {
|
|
34
|
-
process.stderr.write(`Unknown idea-plaza command: ${command}\n`);
|
|
35
|
-
process.exitCode = 1;
|
|
36
|
-
}
|
package/src/index.test.ts
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { mkdtemp, rm } from "node:fs/promises";
|
|
2
|
-
import { tmpdir } from "node:os";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
-
import { IdeaPlaza, readIdeaPlazaDebug, scanForSensitiveFields } from "./index";
|
|
6
|
-
|
|
7
|
-
let root: string | undefined;
|
|
8
|
-
let plaza: IdeaPlaza | undefined;
|
|
9
|
-
|
|
10
|
-
afterEach(async () => {
|
|
11
|
-
if (plaza) await plaza.close();
|
|
12
|
-
if (root) await rm(root, { recursive: true, force: true });
|
|
13
|
-
root = undefined;
|
|
14
|
-
plaza = undefined;
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
async function open(): Promise<IdeaPlaza> {
|
|
18
|
-
root = await mkdtemp(join(tmpdir(), "idea-plaza-"));
|
|
19
|
-
plaza = await IdeaPlaza.open(root, { tenantId: "tenant_a" });
|
|
20
|
-
return plaza;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
describe("idea-plaza", () => {
|
|
24
|
-
it("blocks opt-in publish when sensitive data is not explicitly redacted", async () => {
|
|
25
|
-
const runtime = await open();
|
|
26
|
-
|
|
27
|
-
await expect(
|
|
28
|
-
runtime.publish({
|
|
29
|
-
title: "Loop",
|
|
30
|
-
oneLine: "AI debugging",
|
|
31
|
-
level: "detail",
|
|
32
|
-
body: "Contact alice@example.com with api key sk-test-1234567890",
|
|
33
|
-
tags: ["debugging"],
|
|
34
|
-
}),
|
|
35
|
-
).rejects.toMatchObject({
|
|
36
|
-
capability: "idea-plaza",
|
|
37
|
-
suggestion: expect.stringContaining("redact"),
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it("publishes explicit snapshots and preserves fork attribution", async () => {
|
|
42
|
-
const runtime = await open();
|
|
43
|
-
const published = await runtime.publish({
|
|
44
|
-
title: "Loop",
|
|
45
|
-
oneLine: "AI debugging",
|
|
46
|
-
level: "cloneable",
|
|
47
|
-
body: "Developer tool for stack trace conversations.",
|
|
48
|
-
tags: ["debugging", "developer-tools"],
|
|
49
|
-
redactions: ["customers", "finances"],
|
|
50
|
-
cemeteryWarnings: [{ title: "DebugMate", cause: "no PMF" }],
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
const fork = await runtime.fork(published.ideaId, {
|
|
54
|
-
newFounderId: "bob",
|
|
55
|
-
inheritPlayPreferences: true,
|
|
56
|
-
});
|
|
57
|
-
const feed = await runtime.feed({ sort: "hot", limit: 10 });
|
|
58
|
-
|
|
59
|
-
expect(published.publicationPath).toBe(`plaza/ideas/${published.ideaId}.json`);
|
|
60
|
-
expect(published.cemeteryWarnings).toHaveLength(1);
|
|
61
|
-
expect(fork.attribution.publicLineage).toBe(true);
|
|
62
|
-
expect(fork.sourceIdeaId).toBe(published.ideaId);
|
|
63
|
-
expect(feed.items.map((item) => item.ideaId)).toContain(published.ideaId);
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
it("keeps PII detection deterministic and auditable", async () => {
|
|
67
|
-
expect(scanForSensitiveFields("email me at a@example.com")).toEqual([
|
|
68
|
-
{ kind: "email", value: "a@example.com" },
|
|
69
|
-
]);
|
|
70
|
-
await open();
|
|
71
|
-
await expect(readIdeaPlazaDebug(root)).resolves.toEqual(expect.any(Array));
|
|
72
|
-
});
|
|
73
|
-
});
|
package/src/index.ts
DELETED
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import { mkdir } from "node:fs/promises";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { requireCapabilityTenant } from "@nebutra/capability-kit";
|
|
4
|
-
import { appendCapabilityDebug, readCapabilityDebug } from "@nebutra/capability-kit/debug";
|
|
5
|
-
import { ContentStore } from "@nebutra/content-store";
|
|
6
|
-
import { assertPublicDisclosureSafe } from "@nebutra/ecosystem-safety";
|
|
7
|
-
import { CapabilityError } from "@nebutra/errors";
|
|
8
|
-
import { EventLog } from "@nebutra/event-log";
|
|
9
|
-
import { assetId } from "@nebutra/generation-context";
|
|
10
|
-
|
|
11
|
-
export type IdeaPublishLevel = "surface" | "detail" | "cloneable";
|
|
12
|
-
export type FeedSort = "hot" | "new" | "near_you";
|
|
13
|
-
export type { SensitiveField } from "@nebutra/ecosystem-safety";
|
|
14
|
-
export { scanForSensitiveFields } from "@nebutra/ecosystem-safety";
|
|
15
|
-
|
|
16
|
-
export interface CemeteryWarning {
|
|
17
|
-
readonly title: string;
|
|
18
|
-
readonly cause: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface PublishIdeaRequest {
|
|
22
|
-
readonly title: string;
|
|
23
|
-
readonly oneLine: string;
|
|
24
|
-
readonly level: IdeaPublishLevel;
|
|
25
|
-
readonly body?: string;
|
|
26
|
-
readonly tags: readonly string[];
|
|
27
|
-
readonly redactions?: readonly string[];
|
|
28
|
-
readonly cemeteryWarnings?: readonly CemeteryWarning[];
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export interface PublishedIdea {
|
|
32
|
-
readonly ideaId: string;
|
|
33
|
-
readonly title: string;
|
|
34
|
-
readonly oneLine: string;
|
|
35
|
-
readonly level: IdeaPublishLevel;
|
|
36
|
-
readonly tags: readonly string[];
|
|
37
|
-
readonly redactions: readonly string[];
|
|
38
|
-
readonly cemeteryWarnings: readonly CemeteryWarning[];
|
|
39
|
-
readonly publicationPath: string;
|
|
40
|
-
readonly eventId: string;
|
|
41
|
-
readonly publishedAt: string;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export interface ForkRequest {
|
|
45
|
-
readonly newFounderId: string;
|
|
46
|
-
readonly inheritPlayPreferences?: boolean;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export interface IdeaFork {
|
|
50
|
-
readonly forkId: string;
|
|
51
|
-
readonly sourceIdeaId: string;
|
|
52
|
-
readonly newFounderId: string;
|
|
53
|
-
readonly inheritPlayPreferences: boolean;
|
|
54
|
-
readonly attribution: {
|
|
55
|
-
readonly displayInNewCompany: true;
|
|
56
|
-
readonly publicLineage: true;
|
|
57
|
-
};
|
|
58
|
-
readonly createdAt: string;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export interface FeedRequest {
|
|
62
|
-
readonly sort: FeedSort;
|
|
63
|
-
readonly limit: number;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export interface IdeaFeed {
|
|
67
|
-
readonly items: readonly PublishedIdea[];
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export interface IdeaPlazaDoctorReport {
|
|
71
|
-
readonly capability: "idea-plaza";
|
|
72
|
-
readonly ok: boolean;
|
|
73
|
-
readonly checkedAt: string;
|
|
74
|
-
readonly features: readonly string[];
|
|
75
|
-
readonly suggestion?: string;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export interface IdeaPlazaOptions {
|
|
79
|
-
readonly tenantId?: string;
|
|
80
|
-
readonly debugRoot?: string;
|
|
81
|
-
readonly contentStore?: ContentStore;
|
|
82
|
-
readonly eventLog?: EventLog;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function bodyForScan(request: PublishIdeaRequest): string {
|
|
86
|
-
return [request.title, request.oneLine, request.body ?? "", request.tags.join(" ")].join("\n");
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export class IdeaPlaza {
|
|
90
|
-
readonly #tenantId: string;
|
|
91
|
-
readonly #debugRoot: string;
|
|
92
|
-
readonly #contentStore: ContentStore;
|
|
93
|
-
readonly #eventLog: EventLog;
|
|
94
|
-
readonly #ideas = new Map<string, PublishedIdea>();
|
|
95
|
-
readonly #forks = new Map<string, IdeaFork>();
|
|
96
|
-
|
|
97
|
-
private constructor(
|
|
98
|
-
options: Required<Pick<IdeaPlazaOptions, "tenantId" | "contentStore" | "eventLog">> &
|
|
99
|
-
Pick<IdeaPlazaOptions, "debugRoot">,
|
|
100
|
-
) {
|
|
101
|
-
this.#tenantId = requireCapabilityTenant({
|
|
102
|
-
explicit: options.tenantId,
|
|
103
|
-
onMissing: () =>
|
|
104
|
-
new CapabilityError("idea-plaza", "Idea Plaza requires tenant context", {
|
|
105
|
-
suggestion: "Pass tenantId so publish snapshots stay tenant-scoped.",
|
|
106
|
-
statusCode: 400,
|
|
107
|
-
}),
|
|
108
|
-
});
|
|
109
|
-
this.#debugRoot = options.debugRoot ?? process.cwd();
|
|
110
|
-
this.#contentStore = options.contentStore;
|
|
111
|
-
this.#eventLog = options.eventLog;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
static async open(
|
|
115
|
-
root = ".nebutra/idea-plaza",
|
|
116
|
-
options: Omit<IdeaPlazaOptions, "contentStore" | "eventLog"> = {},
|
|
117
|
-
): Promise<IdeaPlaza> {
|
|
118
|
-
const tenantId = options.tenantId ?? "local";
|
|
119
|
-
await mkdir(root, { recursive: true });
|
|
120
|
-
const contentStore = await ContentStore.open(join(root, "content"), { tenantId });
|
|
121
|
-
const eventLog = await EventLog.open(join(root, "event-log"), { tenantId });
|
|
122
|
-
return new IdeaPlaza({ ...options, tenantId, contentStore, eventLog });
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
async publish(request: PublishIdeaRequest): Promise<PublishedIdea> {
|
|
126
|
-
assertPublicDisclosureSafe({
|
|
127
|
-
capability: "idea-plaza",
|
|
128
|
-
content: bodyForScan(request),
|
|
129
|
-
...(request.redactions !== undefined ? { redactions: request.redactions } : {}),
|
|
130
|
-
suggestion: "Review detected private values and pass redactions before publishing.",
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
const ideaId = assetId("idea", `${request.title}_${request.oneLine}`);
|
|
134
|
-
const publicationPath = `plaza/ideas/${ideaId}.json`;
|
|
135
|
-
const publishedAt = new Date().toISOString();
|
|
136
|
-
const idea: Omit<PublishedIdea, "eventId"> = {
|
|
137
|
-
ideaId,
|
|
138
|
-
title: request.title,
|
|
139
|
-
oneLine: request.oneLine,
|
|
140
|
-
level: request.level,
|
|
141
|
-
tags: request.tags,
|
|
142
|
-
redactions: request.redactions ?? [],
|
|
143
|
-
cemeteryWarnings: request.cemeteryWarnings ?? [],
|
|
144
|
-
publicationPath,
|
|
145
|
-
publishedAt,
|
|
146
|
-
};
|
|
147
|
-
const snapshot = `${JSON.stringify({ ...idea, body: request.body ?? "" }, null, 2)}\n`;
|
|
148
|
-
await this.#contentStore.write(publicationPath, snapshot);
|
|
149
|
-
const eventId = await this.#eventLog.commit({
|
|
150
|
-
traceId: assetId("idea_plaza_publish", ideaId),
|
|
151
|
-
kind: "content_write",
|
|
152
|
-
affected: [publicationPath],
|
|
153
|
-
parent: null,
|
|
154
|
-
snapshot: { [publicationPath]: snapshot },
|
|
155
|
-
});
|
|
156
|
-
const published = { ...idea, eventId };
|
|
157
|
-
this.#ideas.set(ideaId, published);
|
|
158
|
-
await this.#debug({ type: "publish", tenantId: this.#tenantId, ideaId, level: request.level });
|
|
159
|
-
return published;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
async fork(ideaId: string, request: ForkRequest): Promise<IdeaFork> {
|
|
163
|
-
if (!this.#ideas.has(ideaId)) {
|
|
164
|
-
throw new CapabilityError("idea-plaza", "Idea fork source not found", {
|
|
165
|
-
suggestion: "Fork only from an explicit public or cloneable snapshot in the current feed.",
|
|
166
|
-
metadata: { ideaId },
|
|
167
|
-
statusCode: 404,
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
const fork: IdeaFork = {
|
|
171
|
-
forkId: assetId("idea_fork", `${ideaId}_${request.newFounderId}`),
|
|
172
|
-
sourceIdeaId: ideaId,
|
|
173
|
-
newFounderId: request.newFounderId,
|
|
174
|
-
inheritPlayPreferences: request.inheritPlayPreferences ?? false,
|
|
175
|
-
attribution: {
|
|
176
|
-
displayInNewCompany: true,
|
|
177
|
-
publicLineage: true,
|
|
178
|
-
},
|
|
179
|
-
createdAt: new Date().toISOString(),
|
|
180
|
-
};
|
|
181
|
-
const path = `plaza/forks/${fork.forkId}.json`;
|
|
182
|
-
const snapshot = `${JSON.stringify(fork, null, 2)}\n`;
|
|
183
|
-
await this.#contentStore.write(path, snapshot);
|
|
184
|
-
await this.#eventLog.commit({
|
|
185
|
-
traceId: assetId("idea_plaza_fork", fork.forkId),
|
|
186
|
-
kind: "content_write",
|
|
187
|
-
affected: [path],
|
|
188
|
-
parent: null,
|
|
189
|
-
snapshot: { [path]: snapshot },
|
|
190
|
-
});
|
|
191
|
-
this.#forks.set(fork.forkId, fork);
|
|
192
|
-
await this.#debug({ type: "fork", tenantId: this.#tenantId, ideaId, forkId: fork.forkId });
|
|
193
|
-
return fork;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
async feed(request: FeedRequest): Promise<IdeaFeed> {
|
|
197
|
-
const items = [...this.#ideas.values()]
|
|
198
|
-
.sort((left, right) =>
|
|
199
|
-
request.sort === "new"
|
|
200
|
-
? right.publishedAt.localeCompare(left.publishedAt)
|
|
201
|
-
: right.cemeteryWarnings.length - left.cemeteryWarnings.length ||
|
|
202
|
-
right.publishedAt.localeCompare(left.publishedAt),
|
|
203
|
-
)
|
|
204
|
-
.slice(0, request.limit);
|
|
205
|
-
await this.#debug({ type: "feed", tenantId: this.#tenantId, sort: request.sort });
|
|
206
|
-
return { items };
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
async doctor(): Promise<IdeaPlazaDoctorReport> {
|
|
210
|
-
const report: IdeaPlazaDoctorReport = {
|
|
211
|
-
capability: "idea-plaza",
|
|
212
|
-
ok: true,
|
|
213
|
-
checkedAt: new Date().toISOString(),
|
|
214
|
-
features: ["publish", "redact", "fork-lineage", "feed", "cemetery-warning"],
|
|
215
|
-
suggestion:
|
|
216
|
-
"Local snapshots are active; public registry transport and moderation queues remain adapter handoffs.",
|
|
217
|
-
};
|
|
218
|
-
await this.#debug({ type: "doctor", tenantId: this.#tenantId, ideas: this.#ideas.size });
|
|
219
|
-
return report;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
async close(): Promise<void> {
|
|
223
|
-
await this.#contentStore.close();
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
async #debug(entry: Record<string, unknown>): Promise<void> {
|
|
227
|
-
await appendCapabilityDebug("idea-plaza", entry, { root: this.#debugRoot });
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
export async function readIdeaPlazaDebug(root = process.cwd(), limit = 20): Promise<unknown[]> {
|
|
232
|
-
return readCapabilityDebug("idea-plaza", { root, limit });
|
|
233
|
-
}
|
package/tsconfig.json
DELETED