@odla-ai/cli 0.25.1 → 0.25.2
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/bin.cjs +4 -1
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +1 -1
- package/dist/{chunk-M4XST3OX.js → chunk-MX6FSJUN.js} +5 -2
- package/dist/chunk-MX6FSJUN.js.map +1 -0
- package/dist/index.cjs +4 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/skills/odla-migrate/references/phase-2-chapter.md +60 -10
- package/dist/chunk-M4XST3OX.js.map +0 -1
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@odla-ai/cli",
|
|
3
|
-
"version": "0.25.
|
|
3
|
+
"version": "0.25.2",
|
|
4
4
|
"description": "Agent-operable CLI for odla provisioning, calendar consent and sync lifecycle, System AI administration, Worker secrets, security jobs, and smoke checks.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://odla.ai/docs/packages/cli",
|
|
@@ -39,19 +39,69 @@ hand-author only the namespaces it does not.
|
|
|
39
39
|
hands each the same context (`ctx.verifyUser`, `ctx.makeDb`, `ctx.roleFor`,
|
|
40
40
|
`ctx.isAdmin`), so you never verify a JWT twice. Do NOT hand routes over to
|
|
41
41
|
chapter in the same change as the framework swap.
|
|
42
|
-
5. **Adopt the host-independent console shell
|
|
43
|
-
`@odla-ai/ui/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
5. **Adopt the host-independent console shell without replacing product
|
|
43
|
+
behavior.** Import the scoped theme, `@odla-ai/ui/index.css`, and
|
|
44
|
+
`@odla-ai/crm/ui.css`, then render `ChapterAdmin` at the existing `/admin/`
|
|
45
|
+
mount. A greenfield site may accept the default workspaces after reviewing
|
|
46
|
+
them against its product requirements. An operating site must preserve each
|
|
47
|
+
validated workspace through the `workspaces` transform until the
|
|
48
|
+
feature-level UI gate below proves the packaged composition equivalent.
|
|
49
|
+
Chapter's default navigation uses fragments such as
|
|
50
|
+
`/admin/#people/person/record-id/profile`; keep legacy query/path links only
|
|
51
|
+
as inbound compatibility URLs.
|
|
48
52
|
6. **Override rather than inherit wherever local behavior was a decision.**
|
|
49
53
|
7. `npx @odla-ai/cli doctor` → `provision --dry-run` (show the human) → provision.
|
|
50
54
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
### Existing admin workspace gate
|
|
56
|
+
|
|
57
|
+
Labels and route ids are inventory keys, not parity evidence. A legacy
|
|
58
|
+
workspace named "People" and Chapter's default `people` workspace can use the
|
|
59
|
+
same CRM rows while exposing different summaries, search and filtering,
|
|
60
|
+
selection behavior, role signals, mutations, and error states.
|
|
61
|
+
|
|
62
|
+
For every existing workspace, inventory and test:
|
|
63
|
+
|
|
64
|
+
- summaries and operational counts;
|
|
65
|
+
- search, filters, sort, pagination, saved views, and responsive list/detail
|
|
66
|
+
geometry;
|
|
67
|
+
- role, permission, lifecycle, billing, and identity signals;
|
|
68
|
+
- record tabs, deep links, and every mutation or provider side effect;
|
|
69
|
+
- loading, empty, error, unauthorized, keyboard, and narrow-screen states.
|
|
70
|
+
|
|
71
|
+
Classify each item as packaged-equivalent, composed through a documented
|
|
72
|
+
Chapter/CRM seam, an explicit PM-approved product change, or blocked. A matching
|
|
73
|
+
top-level label, a populated table, or a green schema/API test proves none of
|
|
74
|
+
those classifications.
|
|
75
|
+
|
|
76
|
+
The safe first cutover is to preserve the existing workspace first and let
|
|
77
|
+
Chapter own the surrounding auth, routing, chrome, and other reviewed defaults:
|
|
78
|
+
|
|
79
|
+
```tsx
|
|
80
|
+
const workspaces = (defaults) => {
|
|
81
|
+
if (!defaults.some((workspace) => workspace.id === "people")) {
|
|
82
|
+
throw new Error("expected ChapterAdmin people workspace");
|
|
83
|
+
}
|
|
84
|
+
return defaults.map((workspace) =>
|
|
85
|
+
workspace.id === "people"
|
|
86
|
+
? { ...workspace, render: (ctx) => <ExistingPeople context={ctx} /> }
|
|
87
|
+
: workspace
|
|
88
|
+
);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
<ChapterAdmin chapter={chapter} workspaces={workspaces} />;
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Match the exact id and fail closed if Chapter changes its catalog. Spread the
|
|
95
|
+
default workspace so its reviewed routing metadata survives. Keep an
|
|
96
|
+
integration test that asserts the host component renders and that representative
|
|
97
|
+
summary, exploration, role, and operation affordances are present.
|
|
98
|
+
|
|
99
|
+
Only then migrate pieces into `collectionSection`/`peopleSection` using
|
|
100
|
+
`renderSummary`, `renderMaster`, `renderDetailHeader`, `renderEmptyDetail`,
|
|
101
|
+
`hrefForRecord`, `extendRecordTabs`, and an application-authoritative
|
|
102
|
+
`lifecycleAdapter`. Delete the old workspace only after the complete behavioral
|
|
103
|
+
matrix and deployed viewport journey pass. For a greenfield site, build the same
|
|
104
|
+
matrix from requirements; there is no legacy component to preserve.
|
|
55
105
|
|
|
56
106
|
## Behavior deltas to audit
|
|
57
107
|
|