oh-my-llmwikimode 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/bin/llmwiki.js +110 -14
  2. package/docs/CODEX_INTEGRATION_BRIDGE.md +28 -6
  3. package/docs/KNOWLEDGE_FOLDER_TAXONOMY.md +106 -0
  4. package/docs/KNOWLEDGE_UX_DASHBOARD_CONTRACT.md +111 -0
  5. package/docs/KNOWLEDGE_UX_MIGRATION_NOTES.md +43 -0
  6. package/docs/SCOPE_LOCK.md +69 -45
  7. package/docs/design/EOS_AS_INDEPENDENT_SYSTEM.md +75 -0
  8. package/docs/design/EOS_CHAT_HOME_IA.md +11 -4
  9. package/docs/design/EOS_CHAT_OPERATING_LOOP.md +10 -3
  10. package/docs/design/EOS_LLMWIKI_ADAPTER_CONTRACT_MVP.md +96 -0
  11. package/docs/design/EOS_LLMWIKI_SEPARATION_ROADMAP.md +39 -0
  12. package/docs/design/EOS_SIDE_REVIEW_IA.md +2 -1
  13. package/docs/design/EOS_VISUAL_SCREENSHOT_HARNESS.md +4 -3
  14. package/docs/design/README.md +23 -10
  15. package/docs/eos-workspace-boundary-mvp.md +33 -2
  16. package/package.json +2 -1
  17. package/src/agent/librarian/memory.js +1 -1
  18. package/src/agent/librarian/scanner.js +1 -2
  19. package/src/agent/llm/opencode-go-provider.js +1 -1
  20. package/src/codex/bridge.js +18 -2
  21. package/src/codex/hud-install.js +261 -0
  22. package/src/codex/presence.js +97 -20
  23. package/src/daemon.js +14 -9
  24. package/src/eos/academy/inject.js +8 -4
  25. package/src/eos/academy/sharing.js +2 -2
  26. package/src/eos/discord/interaction-router.js +10 -6
  27. package/src/eos/external-workers/schema.js +2 -2
  28. package/src/eos/graph/service.js +12 -12
  29. package/src/eos/hermes/skill-generator.js +2 -2
  30. package/src/eos/home.js +55 -12
  31. package/src/eos/http/app.js +16 -3
  32. package/src/eos/http/routes/agent.js +3 -3
  33. package/src/eos/http/routes/librarian.js +2 -2
  34. package/src/eos/http/routes/qa.js +2 -2
  35. package/src/eos/http/routes/wiki-process.js +8 -6
  36. package/src/eos/librarian/service.js +11 -8
  37. package/src/eos/public/cli.js +9 -0
  38. package/src/eos/public/daemon-approval.js +3 -0
  39. package/src/eos/public/daemon-core.js +4 -0
  40. package/src/eos/public/daemon-discord.js +1 -0
  41. package/src/eos/public/daemon-librarian.js +1 -0
  42. package/src/eos/public/home.js +1 -0
  43. package/src/eos/public/librarian-runtime.js +3 -0
  44. package/src/eos/public/provider.js +1 -0
  45. package/src/eos/research/draft-generator.js +2 -2
  46. package/src/eos/search/service.js +15 -34
  47. package/src/eos/visual-qa/accessibility.js +7 -0
  48. package/src/eos/visual-qa/screenshot-harness.js +7 -0
  49. package/src/eos/workspace/static/app.js +148 -0
  50. package/src/eos/workspace/static/index.html +64 -0
  51. package/src/eos/workspace/static/styles.css +262 -0
  52. package/src/eos/workspace-boundary/side-review-workflow.js +3 -0
  53. package/src/eos/workspace-boundary/wiki-adapter.js +49 -130
  54. package/src/llmwiki/eos-adapter.js +342 -0
  55. package/src/wiki/browser-data.js +1 -1
  56. package/src/wiki/classification-suggestions.js +25 -12
  57. package/src/wiki/context.js +6 -3
  58. package/src/wiki/ingest.js +1 -0
  59. package/src/wiki/project-dashboard.js +193 -0
  60. package/src/wiki/project-identity.js +57 -0
  61. package/src/wiki/save-routing.js +133 -1
  62. package/src/wiki/store.js +44 -18
package/bin/llmwiki.js CHANGED
@@ -13,6 +13,7 @@ import {
13
13
  buildCodexPresenceStatus,
14
14
  launchCodexPresenceHudTmux,
15
15
  } from "../src/codex/presence.js";
16
+ import { installCodexHudAutostart } from "../src/codex/hud-install.js";
16
17
  import { buildCuratorBrowserData } from "../src/curator/browser-data.js";
17
18
  import { proposeConsolidation, readCuratorQueue, suggestLessonCandidate } from "../src/curator/queue.js";
18
19
  import { generateWeeklyDigest, getDigest, listDigests } from "../src/librarian/weekly-digest.js";
@@ -37,6 +38,8 @@ import { buildIndex, ensureWikiStructure, getWikiPaths, promoteEntry, rejectEntr
37
38
  import { queryWiki } from "../src/wiki/query.js";
38
39
  import { buildWikiContext } from "../src/wiki/context.js";
39
40
  import { recommendWikiContext } from "../src/wiki/context-trigger.js";
41
+ import { buildProjectDashboard, writeProjectDashboard } from "../src/wiki/project-dashboard.js";
42
+ import { CANONICAL_PROJECT_SLUG } from "../src/wiki/project-identity.js";
40
43
  import { routeWikiSave } from "../src/wiki/save-routing.js";
41
44
  import {
42
45
  appendSearchFailure,
@@ -66,7 +69,6 @@ import {
66
69
  updateSemanticIndex,
67
70
  } from "../src/wiki/semantic-index.js";
68
71
  import { semanticSearch } from "../src/wiki/semantic-search.js";
69
- import { SearchService } from "../src/eos/search/service.js";
70
72
  import {
71
73
  applyClassification,
72
74
  getClassificationSuggestion,
@@ -79,7 +81,9 @@ import {
79
81
  importExternalWorkerReceipt,
80
82
  listExternalWorkerDispatches,
81
83
  listExternalWorkerProfiles,
82
- } from "../src/eos/external-workers/index.js";
84
+ readExternalWorkerArtifacts,
85
+ SearchService,
86
+ } from "../src/eos/public/cli.js";
83
87
  import {
84
88
  listLibrarianReports,
85
89
  runLibrarianOrchestration,
@@ -102,11 +106,11 @@ const COMMANDS = {
102
106
  },
103
107
  status: {
104
108
  usage: "llmwiki status [--format hud|--json] [options]",
105
- description: "Show Wiki Mode presence status for Codex-friendly local integrations.",
109
+ description: "Show Oh My LLM Wiki Mode presence status for Codex-friendly local integrations.",
106
110
  },
107
111
  hud: {
108
112
  usage: "llmwiki hud [--watch|--tmux] [--interval 1] [options]",
109
- description: "Show a standalone Wiki Mode HUD line without modifying Codex or OMX.",
113
+ description: "Show a standalone Oh My LLM Wiki Mode HUD line without modifying Codex or OMX.",
110
114
  },
111
115
  query: {
112
116
  usage: "llmwiki query [options] <query>",
@@ -172,6 +176,10 @@ const COMMANDS = {
172
176
  usage: "llmwiki raw <list|status|validate> [options]",
173
177
  description: "List raw contents, show raw statistics, or validate raw directory structure.",
174
178
  },
179
+ dashboard: {
180
+ usage: "llmwiki dashboard <generate|preview> [--project oh-my-llmwikimode] [options]",
181
+ description: "Generate or preview a user-facing project dashboard.",
182
+ },
175
183
  "lesson-proposal": {
176
184
  usage: "llmwiki lesson-proposal <analyze|list|show|apply> [options]",
177
185
  description: "Analyze usage events, list proposals, show a proposal, or apply a proposal to create a lesson.",
@@ -181,11 +189,11 @@ const COMMANDS = {
181
189
  description: "Analyze drafts, list, show, apply, or reject review-required project classification suggestions.",
182
190
  },
183
191
  codex: {
184
- usage: "llmwiki codex <status|skill|write-skill|should-context|context|capture|save> [options]",
185
- description: "Expose a safe local Codex skill/CLI bridge without plugin, MCP, marketplace, or config mutation.",
192
+ usage: "llmwiki codex <status|skill|write-skill|install-hud|should-context|context|capture|save> [options]",
193
+ description: "Expose a safe local Codex skill/CLI bridge; passive commands are non-mutating, while install-hud is explicit repair.",
186
194
  },
187
195
  "eos-worker": {
188
- usage: "llmwiki eos-worker <profiles|dispatch|receipt> [options]",
196
+ usage: "llmwiki eos-worker <status|profiles|dispatch|receipt> [options]",
189
197
  description: "Manage artifact-only Eos external worker dispatches and receipts.",
190
198
  },
191
199
  librarian: {
@@ -209,15 +217,18 @@ function globalOptionsHelp() {
209
217
  return [
210
218
  "Options:",
211
219
  ` --wiki-root <path> Wiki root directory (default: ${DEFAULT_WIKI_ROOT})`,
212
- " --project <name> Target project for ingest/store (creates projects/<name>/inbox/)",
220
+ " --project <name> Target project for ingest/store; codex save defaults to knowledge/projects/<name>/",
213
221
  " --tags <tags> Comma-separated tags for ingest/todo add",
214
222
  " --output-dir <path> Explicit output directory (codex write-skill only)",
223
+ " --codex-home <path> Explicit Codex home for codex install-hud",
224
+ " --use-default-codex-home Allow codex install-hud to write the default CODEX_HOME/~/.codex",
225
+ " --dry-run Preview codex install-hud without writing files",
215
226
  " --browser-data Rebuild .system/browser-data.json (rebuild only)",
216
227
  " --limit <n> Number of audit entries to print (audit only)",
217
228
  " --json Output JSON",
218
229
  " --format <format> Output format for supported commands (context, hud)",
219
- " --watch Continuously refresh the Wiki Mode HUD (hud only)",
220
- " --tmux Open the Wiki Mode HUD in a tmux/psmux pane (hud only)",
230
+ " --watch Continuously refresh the Oh My LLM Wiki Mode HUD (hud only)",
231
+ " --tmux Open the Oh My LLM Wiki Mode HUD in a tmux/psmux pane (hud only)",
221
232
  " --interval <sec> HUD refresh interval in seconds (default: 1)",
222
233
  " --related <paths> Comma-separated related entries (curator suggest-lesson)",
223
234
  " --entries <paths> Comma-separated entries (curator propose-consolidation)",
@@ -422,6 +433,9 @@ function parseArgs(argv) {
422
433
  location: null,
423
434
  mode: null,
424
435
  outputDir: null,
436
+ codexHome: null,
437
+ useDefaultCodexHome: false,
438
+ dryRun: false,
425
439
  packId: null,
426
440
  agentProfileId: "main-opencode",
427
441
  approvedBy: null,
@@ -585,6 +599,35 @@ function parseArgs(argv) {
585
599
  continue;
586
600
  }
587
601
 
602
+ if (token === "--dry-run") {
603
+ parsed.dryRun = true;
604
+ continue;
605
+ }
606
+
607
+ if (token === "--codex-home") {
608
+ const codexHome = argv[index + 1];
609
+ if (!codexHome) {
610
+ return { ...parsed, error: "--codex-home requires a path" };
611
+ }
612
+ parsed.codexHome = codexHome;
613
+ index += 1;
614
+ continue;
615
+ }
616
+
617
+ if (token === "--use-default-codex-home") {
618
+ parsed.useDefaultCodexHome = true;
619
+ continue;
620
+ }
621
+
622
+ if (token.startsWith("--codex-home=")) {
623
+ const codexHome = token.slice("--codex-home=".length);
624
+ if (!codexHome) {
625
+ return { ...parsed, error: "--codex-home requires a path" };
626
+ }
627
+ parsed.codexHome = codexHome;
628
+ continue;
629
+ }
630
+
588
631
  if (token === "--limit") {
589
632
  const limit = argv[index + 1];
590
633
  if (!limit) {
@@ -749,6 +792,7 @@ function parseArgs(argv) {
749
792
  continue;
750
793
  }
751
794
 
795
+
752
796
  if (token === "--output-dir") {
753
797
  const outputDir = argv[index + 1];
754
798
  if (!outputDir) {
@@ -829,7 +873,7 @@ function parseArgs(argv) {
829
873
 
830
874
  if (token === "--project") {
831
875
  const project = argv[index + 1];
832
- if (!project) {
876
+ if (!project || project.startsWith("--")) {
833
877
  return { ...parsed, error: "--project requires a name" };
834
878
  }
835
879
  parsed.project = project;
@@ -1530,6 +1574,28 @@ function runRaw(parsed) {
1530
1574
  return { success: false, error: `Unknown raw subcommand: ${action}` };
1531
1575
  }
1532
1576
 
1577
+ function runDashboard(parsed) {
1578
+ const action = parsed.args[0] || "preview";
1579
+ const options = {
1580
+ project: parsed.project || CANONICAL_PROJECT_SLUG,
1581
+ };
1582
+
1583
+ if (action === "preview") {
1584
+ const result = buildProjectDashboard(parsed.wikiRoot, options);
1585
+ return {
1586
+ ...result,
1587
+ output: result.dashboard,
1588
+ message: `Dashboard preview generated for ${result.project}.`,
1589
+ };
1590
+ }
1591
+
1592
+ if (action === "generate") {
1593
+ return writeProjectDashboard(parsed.wikiRoot, options);
1594
+ }
1595
+
1596
+ return { success: false, error: `Unknown dashboard subcommand: ${action}` };
1597
+ }
1598
+
1533
1599
  function runSearchFeedback(parsed) {
1534
1600
  const action = parsed.args[0] || "list";
1535
1601
 
@@ -1745,7 +1811,7 @@ async function runCodex(parsed) {
1745
1811
  bridge,
1746
1812
  message: [
1747
1813
  "Codex local bridge is available.",
1748
- "No plugin install, MCP registration, marketplace mutation, config mutation, or auto-push is performed.",
1814
+ "Passive commands perform no plugin install, MCP registration, marketplace mutation, config mutation, or auto-push; codex install-hud is explicit repair only.",
1749
1815
  ].join(" "),
1750
1816
  };
1751
1817
  }
@@ -1764,7 +1830,22 @@ async function runCodex(parsed) {
1764
1830
  return writeCodexSkillBridge(parsed.wikiRoot, parsed.outputDir);
1765
1831
  }
1766
1832
 
1767
- if (action === "should-context") {
1833
+ if (action === "install-hud") {
1834
+ if (!parsed.dryRun && !parsed.codexHome && !parsed.useDefaultCodexHome) {
1835
+ return {
1836
+ success: false,
1837
+ error:
1838
+ "codex install-hud writes Codex hook/config files; pass --codex-home <path> or --use-default-codex-home for non-dry-run installs.",
1839
+ };
1840
+ }
1841
+ return installCodexHudAutostart({
1842
+ wikiRoot: parsed.wikiRoot,
1843
+ codexHome: parsed.codexHome,
1844
+ dryRun: parsed.dryRun,
1845
+ });
1846
+ }
1847
+
1848
+ if (action === "should-context") {
1768
1849
  const query = parsed.query || parsed.args.slice(1).join(" ").trim();
1769
1850
  if (!query) {
1770
1851
  return { success: false, error: "codex should-context requires --query or a positional query" };
@@ -1876,7 +1957,7 @@ async function runCodex(parsed) {
1876
1957
  return { success: false, error: "codex save requires --summary or a positional summary" };
1877
1958
  }
1878
1959
 
1879
- const location = parsed.location || "drafts";
1960
+ const location = parsed.location || (parsed.project ? "knowledge" : "drafts");
1880
1961
  if (!["drafts", "knowledge", "reviewing"].includes(location)) {
1881
1962
  return { success: false, error: "codex save --location must be drafts, knowledge, or reviewing" };
1882
1963
  }
@@ -1963,6 +2044,20 @@ async function runEosWorker(parsed) {
1963
2044
  };
1964
2045
  }
1965
2046
 
2047
+ if (area === "status") {
2048
+ const artifacts = await readExternalWorkerArtifacts(parsed.wikiRoot);
2049
+ return {
2050
+ success: true,
2051
+ runtime_status: "artifact_only",
2052
+ wikiRoot: parsed.wikiRoot,
2053
+ summary: artifacts.summary,
2054
+ paths: artifacts.paths,
2055
+ executed: false,
2056
+ live_execution: false,
2057
+ message: "External worker artifact status loaded; no worker execution performed.",
2058
+ };
2059
+ }
2060
+
1966
2061
  if (area === "dispatch") {
1967
2062
  if (action === "list") {
1968
2063
  return {
@@ -2067,6 +2162,7 @@ const HANDLERS = {
2067
2162
  "semantic-search": runSemanticSearch,
2068
2163
  "semantic-index": runSemanticIndex,
2069
2164
  raw: runRaw,
2165
+ dashboard: runDashboard,
2070
2166
  "lesson-proposal": runLessonProposal,
2071
2167
  classify: runClassify,
2072
2168
  codex: runCodex,
@@ -13,7 +13,10 @@ path for other users.
13
13
  - Local-first only.
14
14
  - Read-only by default.
15
15
  - Review-required wiki management outputs only.
16
- - No Codex config mutation.
16
+ - Passive status/context/capture commands do not mutate Codex config.
17
+ - Only the explicit `codex install-hud` repair command may mutate Codex
18
+ hook/config files, and non-dry-run installs require either `--codex-home
19
+ <path>` or `--use-default-codex-home`.
17
20
  - No plugin installation.
18
21
  - No MCP registration.
19
22
  - No marketplace metadata mutation.
@@ -34,17 +37,18 @@ llmwiki codex capture --wiki-root "<your-wiki-root>" --type solution_candidate -
34
37
  llmwiki codex save --wiki-root "<your-wiki-root>" --location drafts --summary "<summary>" --details "<details>" --json
35
38
  llmwiki codex skill --wiki-root "<your-wiki-root>"
36
39
  llmwiki codex write-skill --wiki-root "<your-wiki-root>" --output-dir "<explicit-local-dir>"
40
+ llmwiki codex install-hud --wiki-root "<your-wiki-root>" --codex-home "<your-codex-home>" --dry-run --json
37
41
  ```
38
42
 
39
- ## Wiki Mode HUD presence
43
+ ## Oh My LLM Wiki Mode HUD presence
40
44
 
41
45
  The Codex bridge also exposes a standalone, non-invasive presence line:
42
46
 
43
47
  ```text
44
- [Wiki Mode] Connected | v1.1.0 | Review Queue 0
48
+ [Oh My LLM Wiki Mode] Connected | v1.2.0 | Review Queue 0
45
49
  ```
46
50
 
47
- Use it when you want a human-readable confirmation that the local Wiki Mode
51
+ Use it when you want a human-readable confirmation that the local Oh My LLM Wiki Mode
48
52
  bridge can see the selected wiki root:
49
53
 
50
54
  ```bash
@@ -52,7 +56,7 @@ llmwiki status --wiki-root "<your-wiki-root>" --format hud
52
56
  llmwiki hud --wiki-root "<your-wiki-root>"
53
57
  ```
54
58
 
55
- For an attached tmux/psmux Codex session, the Wiki Mode HUD can run in its own
59
+ For an attached tmux/psmux Codex session, the Oh My LLM Wiki Mode HUD can run in its own
56
60
  small pane without modifying Codex, OMX, or their statusline renderers:
57
61
 
58
62
  ```bash
@@ -62,7 +66,14 @@ llmwiki hud --wiki-root "<your-wiki-root>" --tmux
62
66
  The Codex plugin scaffold includes a `SessionStart` hook that runs this HUD
63
67
  startup path automatically when the plugin is installed and the session is
64
68
  inside tmux/psmux. The hook exits silently outside tmux/psmux and skips
65
- duplicate startup when a `Wiki Mode HUD` pane already exists.
69
+ duplicate startup when an `Oh My LLM Wiki Mode HUD` pane already exists.
70
+ The scaffold follows Codex plugin hook discovery rules by declaring
71
+ `"hooks": "./hooks.json"` in `.codex-plugin/plugin.json`; installing/enabling
72
+ the plugin still requires the user to review and trust bundled hooks in Codex.
73
+ The hook command resolves its script from `PLUGIN_ROOT`/`CLAUDE_PLUGIN_ROOT`/
74
+ `CODEX_PLUGIN_ROOT`, not from the active repository working directory, and
75
+ treats HUD import/startup failures as best-effort debug output instead of
76
+ failing the Codex hook.
66
77
 
67
78
  `Review Queue` counts local review-required Wiki Mode artifacts, including
68
79
  Codex captures and local curator/graph review cards. This is intentionally
@@ -120,6 +131,7 @@ user explicitly asks to embed one machine's resolved absolute path.
120
131
 
121
132
  - `.codex-plugin/plugin.json`
122
133
  - `skills/llmwiki-local-bridge/SKILL.md`
134
+ - `hooks.json`
123
135
  - `scripts/llmwiki-codex.ps1`
124
136
  - `README.md`
125
137
 
@@ -132,3 +144,13 @@ Plugin or MCP integration can be considered later only as a separate, explicit
132
144
  scope with fresh safety tests. This bridge is the safe starting point and must
133
145
  not be expanded into marketplace, account, hosted sync, or hidden execution
134
146
  work without a new plan.
147
+
148
+ ### Explicit HUD repair command
149
+
150
+ The Codex plugin normally owns HUD autostart through its bundled `SessionStart` hook. If a local Codex hook installation needs repair, use the explicit command below. `--dry-run` previews the files and trust state without writing anything:
151
+
152
+ ```bash
153
+ llmwiki codex install-hud --wiki-root "<your-wiki-root>" --codex-home "<your-codex-home>" --dry-run --json
154
+ ```
155
+
156
+ Without `--dry-run`, the command may write a local Codex hook script, merge `hooks.json`, and add matching trust metadata to `config.toml`. Non-dry-run installs require an explicit target with `--codex-home <path>` or an explicit default-home acknowledgement with `--use-default-codex-home`. It reports `mutates_codex_config: true` so callers never confuse it with passive status/context commands.
@@ -0,0 +1,106 @@
1
+ # LLM Wiki Project Folder Taxonomy
2
+
3
+ Status: draft migration contract for the Knowledge UX Hygiene + Dashboard
4
+ Ultragoal.
5
+
6
+ ## Goal
7
+
8
+ Make project knowledge folders readable for a Korean user while keeping enough
9
+ English signal for automation and cross-tool integrations.
10
+
11
+ Canonical folder labels use this pattern:
12
+
13
+ ```text
14
+ <Korean label>_<English machine hint>
15
+ ```
16
+
17
+ Example:
18
+
19
+ ```text
20
+ 개발-진행-기록_dev-history/
21
+ ```
22
+
23
+ ## Canonical labels
24
+
25
+ | Current folder | Canonical label | Purpose |
26
+ | --- | --- | --- |
27
+ | `!대시보드` | `!대시보드_dashboard` | User-facing entry point and daily summary |
28
+ | `0_omx 핸드오프` | `0_omx-핸드오프_omx-handoff` | OMX / Codex handoff plans and run instructions |
29
+ | `개발-진행-기록` | `개발-진행-기록_dev-history` | Work logs, roadmap updates, implementation and release history |
30
+ | `개발-진행-기록/로드맵` | `개발-진행-기록_dev-history/로드맵_roadmap` | Roadmaps and planning timeline |
31
+ | `개발-진행-기록/구현-보고` | `개발-진행-기록_dev-history/구현-보고_implementation-reports` | Implementation reports |
32
+ | `개발-진행-기록/검증-로그` | `개발-진행-기록_dev-history/검증-로그_verification-logs` | Verification logs and QA evidence |
33
+ | `개발-진행-기록/릴리즈-로그` | `개발-진행-기록_dev-history/릴리즈-로그_release-logs` | Release logs and publishing notes |
34
+ | `이슈-및-문제` | `이슈-및-문제_issues` | Issues, bugs, active tasks, and improvement proposals |
35
+ | `이슈-및-문제/활성-과제` | `이슈-및-문제_issues/활성-과제_active` | Active work items |
36
+ | `이슈-및-문제/issues` | `이슈-및-문제_issues/버그-이슈_bugs` | Bug reports and defect investigations |
37
+ | `이슈-및-문제/improvements` | `이슈-및-문제_issues/개선-제안_improvements` | Improvement proposals |
38
+ | `아키텍처-및-설계` | `아키텍처-및-설계_architecture-design` | Architecture, design, and decisions |
39
+ | `가이드-및-정책` | `가이드-및-정책_guides-policies` | User guides, policies, and operating models |
40
+ | `완료-보고` | `완료-보고_completion-reports` | Completion reports and milestone summaries |
41
+ | `테스트-및-QA` | `테스트-및-QA_testing-qa` | Test plans and QA checklists |
42
+ | `아카이브` | `아카이브_archive` | Superseded or historical entries |
43
+ | `워크데스크-기능` | `워크데스크-기능_workdesk-features` | Existing Workdesk / Work Harbor feature notes |
44
+
45
+ ## Non-destructive migration plan
46
+
47
+ Do not mass-rename folders in the first implementation pass. Renaming first can
48
+ break:
49
+
50
+ - existing markdown links,
51
+ - current `.system/index.json` and `.system/graph.json` references,
52
+ - OpenCode plugin assumptions,
53
+ - Codex bridge search results,
54
+ - user muscle memory.
55
+
56
+ Instead:
57
+
58
+ 1. Add a canonical mapping table in code or configuration.
59
+ 2. Teach save routing to accept both current and canonical labels.
60
+ 3. Generate review-required migration proposals for existing folders.
61
+ 4. Provide a safe move command or script that:
62
+ - resolves old and new paths,
63
+ - updates markdown links when possible,
64
+ - records an audit event,
65
+ - runs `llmwiki rebuild --browser-data`,
66
+ - reports changed paths.
67
+ 5. Only then allow explicit migration.
68
+
69
+ ## Compatibility rules
70
+
71
+ - Current folders remain valid input paths.
72
+ - Canonical labels are preferred for new output once the router is ready.
73
+ - Search should find entries regardless of old or canonical folder names.
74
+ - Curator proposals may suggest moves, but must not move or delete files without
75
+ explicit review.
76
+ - Dashboard links should tolerate both old and canonical paths during transition.
77
+
78
+ ## Filename policy preview
79
+
80
+ This taxonomy pairs with a later save-routing story:
81
+
82
+ ```text
83
+ YYYY-MM-DD-short-readable-topic.md
84
+ ```
85
+
86
+ Examples:
87
+
88
+ - `2026-05-27-codex-eos-npm-v1.1.0-release.md`
89
+ - `2026-05-27-knowledge-dashboard-contract.md`
90
+ - `save-routing-devlog-classification-improvement.md`
91
+
92
+ Avoid:
93
+
94
+ - timestamp-only titles,
95
+ - whole conversation titles,
96
+ - random root-level files,
97
+ - mojibake filenames.
98
+
99
+ ## Acceptance criteria
100
+
101
+ This taxonomy story is complete when:
102
+
103
+ - The current-to-canonical mapping is documented.
104
+ - The migration path is explicitly non-destructive.
105
+ - Existing OpenCode and Codex usage are named as compatibility constraints.
106
+ - Later stories can implement routing and dashboard generation from this table.
@@ -0,0 +1,111 @@
1
+ # LLM Wiki Knowledge UX Dashboard Contract
2
+
3
+ Status: draft contract for the Knowledge UX Hygiene + Dashboard Ultragoal.
4
+
5
+ ## Purpose
6
+
7
+ This contract defines the first user-facing dashboard slice for the
8
+ `oh-my-llmwikimode` project knowledge area. `llm-wiki-mode` and
9
+ `llmwikimode` remain legacy aliases for runtime inputs. It is intentionally a
10
+ contract first:
11
+ implementation may follow in later Ultragoal stories, but the daily view should
12
+ stay stable enough that a user can check the project without reading the whole
13
+ wiki.
14
+
15
+ ## Baseline inventory
16
+
17
+ Snapshot source: local wiki root `C:\Users\USER\Documents\llm-wiki`.
18
+
19
+ - Canonical project area: `knowledge/projects/oh-my-llmwikimode`
20
+ - Legacy project area: `knowledge/projects/llm-wiki-mode` remains readable and
21
+ must not be bulk moved without a review-required migration plan.
22
+ - Markdown entries under the project area: about 177
23
+ - Current top-level project folders:
24
+ - `!대시보드`
25
+ - `0_omx 핸드오프`
26
+ - `가이드-및-정책`
27
+ - `개발-진행-기록`
28
+ - `아카이브`
29
+ - `아키텍처-및-설계`
30
+ - `완료-보고`
31
+ - `워크데스크-기능`
32
+ - `이슈-및-문제`
33
+ - `테스트-및-QA`
34
+ - Current dashboard files:
35
+ - `!대시보드/00-시작-여기.md`
36
+ - `!대시보드/오늘의-작업.md`
37
+ - `!대시보드/로드맵-및-개발-방향.md`
38
+ - `!대시보드/시행착오-및-해결-기록.md`
39
+ - `!대시보드/템플릿/*.md`
40
+ - Current CLI presence: `Wiki Mode Connected | v1.1.0 | Review Queue 128`
41
+ - Current lint baseline: 245 errors and 79 warnings across the broader wiki
42
+ snapshot, mainly missing `title` / `source` / `status` and invalid status enum
43
+ values.
44
+
45
+ ## Daily user dashboard fields
46
+
47
+ The dashboard should answer five questions in under one minute:
48
+
49
+ 1. What needs attention now?
50
+ 2. What changed recently?
51
+ 3. What is waiting for review?
52
+ 4. Is the wiki healthy enough to trust?
53
+ 5. What should I do next?
54
+
55
+ Recommended sections:
56
+
57
+ | Section | User value | Source |
58
+ | --- | --- | --- |
59
+ | Today focus | Shows the top 1-3 current actions | Active issues, latest triage, recent completion logs |
60
+ | Recent project changes | Shows latest releases, devlogs, and verification logs | `개발-진행-기록*`, `완료-보고*` |
61
+ | Review queue | Shows review-required candidates and curator proposals | `llmwiki status`, `llmwiki curator list` |
62
+ | Hygiene warnings | Shows lint/encoding/routing risk summary | `llmwiki lint`, hygiene proposal artifacts |
63
+ | Next actions | Shows recommended safe next steps | Current triage + dashboard policy |
64
+
65
+ ## Display principles
66
+
67
+ - Korean first, English suffix when it improves machine routing.
68
+ - The user dashboard should hide raw draft noise by default.
69
+ - Dashboard entries should link to deeper documents instead of copying long
70
+ reports.
71
+ - The dashboard should state when a section is generated from stale data.
72
+ - Review-required items must stay visibly review-required.
73
+
74
+ ## Non-goals for this dashboard slice
75
+
76
+ - No hosted sync.
77
+ - No account, marketplace, or payment flows.
78
+ - No hidden execution.
79
+ - No automatic deletion, automatic promotion, or automatic merge.
80
+ - No Eos personal assistant or Discord bridge implementation.
81
+
82
+ ## Compatibility expectations
83
+
84
+ - Existing OpenCode plugin usage must continue to work.
85
+ - Existing Codex bridge / CLI usage must continue to work.
86
+ - Existing folder names must not be destructively mass-renamed in this first
87
+ slice.
88
+ - Migration to Korean-first English-suffix folder labels should happen through a
89
+ compatibility and proposal layer first.
90
+
91
+ ## Completion evidence for this contract
92
+
93
+ The first Ultragoal story is complete when:
94
+
95
+ - The baseline inventory is recorded.
96
+ - The daily dashboard fields are explicitly defined.
97
+ - The current risks are named without mutating existing user documents.
98
+ - The contract is searchable from the project wiki or repo docs.
99
+
100
+ ## Regeneration command
101
+
102
+ Later implementation stories can refresh the user dashboard with:
103
+
104
+ ```sh
105
+ llmwiki dashboard generate --project oh-my-llmwikimode
106
+ ```
107
+
108
+ The command writes a review-required dashboard entry under the project dashboard
109
+ folder and does not delete, promote, merge, or auto-approve source entries.
110
+ Legacy aliases `llm-wiki-mode` and `llmwikimode` are accepted by the CLI and
111
+ route to the canonical project slug.
@@ -0,0 +1,43 @@
1
+ # Knowledge UX Migration Notes
2
+
3
+ These notes explain how to adopt the Korean-first project knowledge UX without
4
+ breaking current OpenCode or Codex bridge usage.
5
+
6
+ ## Migration posture
7
+
8
+ - Do not bulk-rename existing project folders first.
9
+ - Keep old paths readable while new writes prefer the bilingual taxonomy from
10
+ `docs/KNOWLEDGE_FOLDER_TAXONOMY.md`.
11
+ - Use `oh-my-llmwikimode` as the canonical project slug for new runtime writes.
12
+ `llm-wiki-mode` and `llmwikimode` are accepted legacy aliases and should be
13
+ routed to the canonical slug instead of creating split project folders.
14
+ - Use router-generated placements for new project knowledge, then let curator
15
+ proposal cards identify old entries that may be moved later.
16
+ - Use dashboard generation as the user's daily entry point instead of asking the
17
+ user to inspect every raw draft.
18
+
19
+ ## Safe command sequence
20
+
21
+ ```powershell
22
+ node bin/llmwiki.js doctor --wiki-root "C:\Users\USER\Documents\llm-wiki" --json
23
+ node bin/llmwiki.js rebuild --wiki-root "C:\Users\USER\Documents\llm-wiki" --browser-data
24
+ node bin/llmwiki.js dashboard preview --wiki-root "C:\Users\USER\Documents\llm-wiki" --project oh-my-llmwikimode --json
25
+ node bin/llmwiki.js dashboard generate --wiki-root "C:\Users\USER\Documents\llm-wiki" --project oh-my-llmwikimode
26
+ ```
27
+
28
+ Compatibility smoke may also run the same dashboard preview with
29
+ `--project llm-wiki-mode` and `--project llmwikimode`; both aliases must resolve
30
+ to the canonical project dashboard.
31
+
32
+ ## Compatibility checks
33
+
34
+ OpenCode remains compatible because the plugin server entry point and wiki root
35
+ contracts are unchanged. Codex remains compatible because the CLI bridge and HUD
36
+ are non-invasive: they report status, context, and review-required write paths
37
+ without mutating Codex config or the OMX status line.
38
+
39
+ ## Current verification evidence
40
+
41
+ - Targeted tests: `node --test test/project-dashboard.test.js test/cli.test.js test/wiki-save-routing.test.js test/lint.test.js test/doctor.test.js test/curator-proposals.test.js`
42
+ - Documentation consistency: `npm run verify:docs`
43
+ - Real wiki checks: `llmwiki rebuild`, `llmwiki query`, `llmwiki doctor`, `llmwiki status`