@stalfh233/omc-cli 0.4.102 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +359 -359
- package/coverage/m1-coverage-manifest-v1.json +1414 -1414
- package/dist/approval-flow.js +0 -0
- package/dist/approval-token.js +102 -0
- package/dist/args.js +0 -0
- package/dist/artifacts.js +0 -0
- package/dist/batch-call.js +0 -0
- package/dist/bench/call-face-eval.js +0 -0
- package/dist/bench/context-attribution.js +0 -0
- package/dist/bench/discovery-cost-eval.js +2 -0
- package/dist/bench/driver.js +0 -0
- package/dist/bench/evals.js +0 -0
- package/dist/bench/fake-http-server.js +65 -0
- package/dist/bench/instrument.js +0 -0
- package/dist/bench/intent-face-eval.js +40 -40
- package/dist/bench/run.js +0 -0
- package/dist/bench/scenario.js +0 -0
- package/dist/bench/types.js +0 -0
- package/dist/bi-wire.js +0 -0
- package/dist/bizservice-config.js +0 -0
- package/dist/call.js +0 -0
- package/dist/capability-absences.js +0 -0
- package/dist/capability-overview.js +0 -0
- package/dist/capability-shape.js +0 -0
- package/dist/cli-contract.js +38 -1
- package/dist/cli-output.js +8 -2
- package/dist/cli.js +147 -5
- package/dist/closest-match.js +0 -0
- package/dist/code-rules.js +0 -0
- package/dist/command-transport.js +0 -0
- package/dist/compound-writes.js +0 -0
- package/dist/compute.js +0 -0
- package/dist/config-store.js +0 -0
- package/dist/context.js +0 -0
- package/dist/contract-consistency.js +0 -0
- package/dist/contract-resources.js +0 -0
- package/dist/coverage-consistency.js +0 -0
- package/dist/coverage-registry.js +0 -0
- package/dist/coverage.js +0 -0
- package/dist/data-list-filter.js +0 -0
- package/dist/describe-cache.js +0 -0
- package/dist/discovery.js +0 -0
- package/dist/endpoints.js +0 -0
- package/dist/environment-policy.js +0 -0
- package/dist/execution-metadata.js +0 -0
- package/dist/fake/app.js +45 -0
- package/dist/fake/b2-registration.js +594 -0
- package/dist/fake/businessrule.js +242 -0
- package/dist/fake/datarule.js +72 -0
- package/dist/fake/dictionary.js +108 -0
- package/dist/fake/environment.js +30 -0
- package/dist/fake/field.js +167 -0
- package/dist/fake/form.js +101 -0
- package/dist/fake/index.js +121 -0
- package/dist/fake/list-view.js +289 -0
- package/dist/fake/model.js +136 -0
- package/dist/fake/online-js.js +18 -0
- package/dist/fake/report.js +253 -0
- package/dist/fake/routes.js +47 -0
- package/dist/fake/rule-lifecycle.js +37 -0
- package/dist/fake/runtime-data.js +367 -0
- package/dist/fake/state.js +67 -0
- package/dist/fake/workflow.js +364 -0
- package/dist/field-change.js +86 -2
- package/dist/field-families.js +59 -9
- package/dist/form-default.js +0 -0
- package/dist/form-layout.js +0 -0
- package/dist/form-support.js +0 -0
- package/dist/formula-lint.js +0 -0
- package/dist/goal-routes.js +16 -16
- package/dist/governed-execution.js +0 -0
- package/dist/graph.js +734 -0
- package/dist/human-summary.js +0 -0
- package/dist/identity.js +0 -0
- package/dist/intent/baseline.js +0 -0
- package/dist/intent/capabilities/bizservice.js +0 -0
- package/dist/intent/capabilities/businessrule.js +0 -0
- package/dist/intent/capabilities/datarule.js +0 -0
- package/dist/intent/capabilities/field.js +0 -0
- package/dist/intent/capabilities/form.js +0 -0
- package/dist/intent/capabilities/index.js +0 -0
- package/dist/intent/capabilities/listview.js +0 -0
- package/dist/intent/capabilities/model.js +0 -0
- package/dist/intent/capabilities/onlinejs.js +0 -0
- package/dist/intent/capabilities/report.js +0 -0
- package/dist/intent/capabilities/workflow.js +0 -0
- package/dist/intent/capability.js +0 -0
- package/dist/intent/cli.js +0 -0
- package/dist/intent/compare.js +0 -0
- package/dist/intent/compiler.js +0 -0
- package/dist/intent/dsl.js +0 -0
- package/dist/intent/plan-apply.js +0 -0
- package/dist/intent/plan-file.js +0 -0
- package/dist/intent/readback.js +0 -0
- package/dist/intent/schema.js +0 -0
- package/dist/intent/validation.js +0 -0
- package/dist/intent/yaml.js +0 -0
- package/dist/journal.js +0 -0
- package/dist/json-column.js +0 -0
- package/dist/lanes/app-contract.js +0 -0
- package/dist/lanes/app-coverage.js +0 -0
- package/dist/lanes/app.js +0 -0
- package/dist/lanes/apply-changes.js +0 -0
- package/dist/lanes/b2-registration-contract.js +0 -0
- package/dist/lanes/b2-registration-coverage.js +0 -0
- package/dist/lanes/b2-registration.js +0 -0
- package/dist/lanes/businessrule-contract.js +0 -0
- package/dist/lanes/businessrule-coverage.js +0 -0
- package/dist/lanes/businessrule.js +7 -1
- package/dist/lanes/contract-support.js +0 -0
- package/dist/lanes/coverage-declaration.js +0 -0
- package/dist/lanes/custom-page.js +0 -0
- package/dist/lanes/datarule-contract.js +0 -0
- package/dist/lanes/datarule-coverage.js +0 -0
- package/dist/lanes/datarule-protocol.js +0 -0
- package/dist/lanes/datarule.js +0 -0
- package/dist/lanes/dictionary-contract.js +0 -0
- package/dist/lanes/dictionary-coverage.js +0 -0
- package/dist/lanes/dictionary.js +0 -0
- package/dist/lanes/environment-contract.js +0 -0
- package/dist/lanes/environment-coverage.js +0 -0
- package/dist/lanes/environment.js +0 -0
- package/dist/lanes/field-contract.js +0 -0
- package/dist/lanes/field-coverage.js +0 -0
- package/dist/lanes/field.js +6 -1
- package/dist/lanes/folder-contract.js +0 -0
- package/dist/lanes/folder-coverage.js +0 -0
- package/dist/lanes/folder.js +0 -0
- package/dist/lanes/form-contract.js +0 -0
- package/dist/lanes/form-coverage.js +0 -0
- package/dist/lanes/form.js +0 -0
- package/dist/lanes/lane-ids.js +0 -0
- package/dist/lanes/list-view-contract.js +0 -0
- package/dist/lanes/list-view-coverage.js +0 -0
- package/dist/lanes/list-view-shapes.js +0 -0
- package/dist/lanes/list-view.js +0 -0
- package/dist/lanes/meta-contract.js +0 -0
- package/dist/lanes/meta.js +6 -0
- package/dist/lanes/model-contract.js +0 -0
- package/dist/lanes/model-coverage.js +0 -0
- package/dist/lanes/model.js +4 -2
- package/dist/lanes/online-js-contract.js +0 -0
- package/dist/lanes/online-js-coverage.js +0 -0
- package/dist/lanes/online-js.js +0 -0
- package/dist/lanes/org-tree.js +0 -0
- package/dist/lanes/organization.js +0 -0
- package/dist/lanes/report-contract.js +0 -0
- package/dist/lanes/report-coverage.js +0 -0
- package/dist/lanes/report.js +0 -0
- package/dist/lanes/rule-graph.js +0 -0
- package/dist/lanes/rule-lifecycle-contract.js +0 -0
- package/dist/lanes/rule-lifecycle-coverage.js +0 -0
- package/dist/lanes/rule-lifecycle.js +0 -0
- package/dist/lanes/runtime-data-contract.js +0 -0
- package/dist/lanes/runtime-data-coverage.js +0 -0
- package/dist/lanes/runtime-data.js +0 -0
- package/dist/lanes/workflow-contract.js +0 -0
- package/dist/lanes/workflow-coverage.js +0 -0
- package/dist/lanes/workflow.js +0 -0
- package/dist/model-purge.js +0 -0
- package/dist/model-scaffold.js +0 -0
- package/dist/omc-core-lazy.js +0 -0
- package/dist/online-js-layout.js +0 -0
- package/dist/online-js-source.js +28 -28
- package/dist/package-tool.js +0 -0
- package/dist/package.js +0 -0
- package/dist/path-projection.js +0 -0
- package/dist/plan.js +0 -0
- package/dist/read.js +0 -0
- package/dist/recipes/b2-registration.js +0 -0
- package/dist/recipes/businessrule.js +0 -0
- package/dist/recipes/datarule.js +0 -0
- package/dist/recipes/dictionary.js +0 -0
- package/dist/recipes/field.js +55 -1
- package/dist/recipes/form.js +0 -0
- package/dist/recipes/list-view.js +0 -0
- package/dist/recipes/model.js +0 -0
- package/dist/recipes/online-js.js +0 -0
- package/dist/recipes/runtime-data.js +0 -0
- package/dist/recipes/shared.js +0 -0
- package/dist/recipes/workflow.js +0 -0
- package/dist/redact.js +0 -0
- package/dist/refusal-guidance.js +0 -0
- package/dist/rollback-spec.js +0 -0
- package/dist/rollback.js +0 -0
- package/dist/rule-support.js +0 -0
- package/dist/rule-when.js +0 -0
- package/dist/runtime-support.js +0 -0
- package/dist/script.js +0 -0
- package/dist/server.js +92 -0
- package/dist/service-doctor.js +0 -0
- package/dist/session-manager.js +0 -0
- package/dist/session.js +12 -0
- package/dist/skills.js +12 -2
- package/dist/sqlite-warning-filter.js +0 -0
- package/dist/support.js +0 -0
- package/dist/token-cache.js +0 -0
- package/dist/tool-types.js +0 -0
- package/dist/tools.js +0 -0
- package/dist/usage-log.js +0 -0
- package/dist/wire.js +0 -0
- package/dist/workflow-support.js +0 -0
- package/dist/write-lease.js +0 -0
- package/dist/write-lock.js +0 -0
- package/dist/write.js +0 -0
- package/dist/zip.js +0 -0
- package/docs/images/omc-nixi/README.md +41 -41
- package/docs/omc-introduction.md +851 -851
- package/docs/tool-surface-map.md +42 -42
- package/package.json +7 -5
- package/skills/omc-acceptance-criteria.md +50 -50
- package/skills/omc-business-configuration.md +334 -334
- package/skills/omc-capabilities.md +214 -214
- package/skills/omc-capability-scouting.md +55 -55
- package/skills/omc-config-draft-review.md +175 -175
- package/skills/omc-five-piece-flow.md +35 -35
- package/skills/omc-glossary.md +86 -86
- package/skills/omc-refusals.md +127 -127
- package/skills/omc-requirement-analysis.md +161 -161
- package/skills/omc-requirement-vocabulary.md +61 -61
- package/skills/omc-start-here.md +106 -106
- package/skills/omc-tool-selection.md +119 -119
- package/skills/omc-write-hazards.md +200 -199
- package/dist/lanes/organization-coverage.js +0 -27
package/docs/tool-surface-map.md
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
# Tool Surface ↔ Coverage Manifest Correspondence
|
|
2
|
-
|
|
3
|
-
Baseline: `coverage/m1-coverage-manifest-v1.json` (39 items, M1, 8.6-only).
|
|
4
|
-
Every `executable` and `partial` item maps to at least one tool below;
|
|
5
|
-
`blocked` / `static-only` / `unsupported` items are hard boundaries —
|
|
6
|
-
requesting them refuses with the manifest citation (red-team tested).
|
|
7
|
-
|
|
8
|
-
Methodology (how to operate the tools) is read with `omc help <topic>` — see
|
|
9
|
-
`skills/`. The tool surface is the "what"; those topics are the "how".
|
|
10
|
-
|
|
11
|
-
| # | Manifest item (lane) | Status | Tools that carry it |
|
|
12
|
-
|---|---|---|---|
|
|
13
|
-
| 1 | W1-list-view | partial | `listview.create`, `listview.delete` (forced defaults, header readback, exact absence) |
|
|
14
|
-
| 3 | W5-S26-aggregation | partial | `field.create` with formula/EXPRESSION scope (same-model AGGREGATION semantics documented in the manifest entry; no separate wire face was live-proven) |
|
|
15
|
-
| 10 | W7-S29-greenfield | executable | `workflow.create`, `workflow.delete` |
|
|
16
|
-
| 11 | W7-S29-residual-OQs | partial | surfaced by `coverage.manifest` + `get_status` (residual OQs are documented unknowns — no tool may claim past them) |
|
|
17
|
-
| 12 | S25-rule-lifecycle | executable | `rule.enable`, `rule.disable`, `rule.delete` (invoke via enable + effect readback) |
|
|
18
|
-
| 12a | B1-businessrule | executable | `rule.list` (latest runtime versions with full business-field projection; agent filters client-side) |
|
|
19
|
-
| 13 | S32-business-integration | executable | `service.register`, `service.get`, `service.delete` (RESTFUL face) |
|
|
20
|
-
| 15 | M2-runtime-data (data-entry projection) | partial | `data.load` (projection boundary: `form/load` authoritative) |
|
|
21
|
-
| 15a | M2-runtime-data (query/list) | executable | `data.list` (simplified filters -> queryCondition, pagination, field projection) |
|
|
22
|
-
| 21 | field-families | executable | `field.create`, `field.publish`, `field.delete`, `field.list` |
|
|
23
|
-
| 22 | field-families (numeric-logical/date-time) | partial | same field tools, family types constrained to the proven set |
|
|
24
|
-
| 23 | model-management | executable | `model.create`, `model.update` (app-tree NODE rename patch: bizSchemaCode/id/name/parentId required, modelType refused — fixed at create), `model.setSummary`, `model.delete`, `model.deleteMany` (publish aspect = model-scoped publication via `field.publish`/`form.publish`, exactly the proven ladder; no separate model-publish wire call exists) |
|
|
25
|
-
| 24 | form-publish-chain | executable | `form.draft`, `form.publish`, `form.get` (draft-first, explicit publishedHtmlJson, control-level layout readback) |
|
|
26
|
-
| 25 | B1-businessrule | executable | `rule.save` (dead-state + B1.2 CRUD/conditional node graphs) |
|
|
27
|
-
| 26 | C-workflow-template | executable | `workflow.create` (minimal template lifecycle) |
|
|
28
|
-
| 27 | online-js (composer) | executable | `onlinejs.compose` (platform skeleton preserved, canonical customScript element with array attrs, publish + SHA-256 readback). The design-time 在线开发 face (`/api/api/programming` JAVA source) is authored via 二开扩展包 and exposes no CLI tool |
|
|
29
|
-
| 28 | M2-runtime-data (write/readback) | executable | `data.save`, `data.load`, `data.delete`, `data.list` |
|
|
30
|
-
| 29 | B2-registration | executable | `service.register` (+ method), `service.get`, `service.delete` |
|
|
31
|
-
| 30 | environment-governance | executable | `discover_environment`, `environment.fingerprint`, `doctor`, `get_status` |
|
|
32
|
-
| 31 | e2e-delivery | executable | the governed chain itself: write tools (DELIVERED + artifact) → read tools (VERIFIED) → delete tools with exact-absence proof (CLEANED) |
|
|
33
|
-
| 32 | app-management | executable | `app.list`, `app.create`, `app.delete` (design-time application package lifecycle; production writes permanently refused) |
|
|
34
|
-
|
|
35
|
-
High-level orchestrations compose the same lanes under one token:
|
|
36
|
-
`configure_model` (23+21+24), `configure_form` (24), `configure_rule`
|
|
37
|
-
(25+12), `discover_environment` (30).
|
|
38
|
-
|
|
39
|
-
Blocked/static-only/unsupported boundaries (no tools, enforced by refusal):
|
|
40
|
-
W2-permissions, W5-S26-cross-model, W6-S27-* (nested child tables, relation
|
|
41
|
-
linkage, child-to-child), W6-S28-*, S32-custom-extension, boundary-unsupported
|
|
42
|
-
(inline backend coding, app publish/environment release, OCR/ELECTRONIC_SIGN).
|
|
1
|
+
# Tool Surface ↔ Coverage Manifest Correspondence
|
|
2
|
+
|
|
3
|
+
Baseline: `coverage/m1-coverage-manifest-v1.json` (39 items, M1, 8.6-only).
|
|
4
|
+
Every `executable` and `partial` item maps to at least one tool below;
|
|
5
|
+
`blocked` / `static-only` / `unsupported` items are hard boundaries —
|
|
6
|
+
requesting them refuses with the manifest citation (red-team tested).
|
|
7
|
+
|
|
8
|
+
Methodology (how to operate the tools) is read with `omc help <topic>` — see
|
|
9
|
+
`skills/`. The tool surface is the "what"; those topics are the "how".
|
|
10
|
+
|
|
11
|
+
| # | Manifest item (lane) | Status | Tools that carry it |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| 1 | W1-list-view | partial | `listview.create`, `listview.delete` (forced defaults, header readback, exact absence) |
|
|
14
|
+
| 3 | W5-S26-aggregation | partial | `field.create` with formula/EXPRESSION scope (same-model AGGREGATION semantics documented in the manifest entry; no separate wire face was live-proven) |
|
|
15
|
+
| 10 | W7-S29-greenfield | executable | `workflow.create`, `workflow.delete` |
|
|
16
|
+
| 11 | W7-S29-residual-OQs | partial | surfaced by `coverage.manifest` + `get_status` (residual OQs are documented unknowns — no tool may claim past them) |
|
|
17
|
+
| 12 | S25-rule-lifecycle | executable | `rule.enable`, `rule.disable`, `rule.delete` (invoke via enable + effect readback) |
|
|
18
|
+
| 12a | B1-businessrule | executable | `rule.list` (latest runtime versions with full business-field projection; agent filters client-side) |
|
|
19
|
+
| 13 | S32-business-integration | executable | `service.register`, `service.get`, `service.delete` (RESTFUL face) |
|
|
20
|
+
| 15 | M2-runtime-data (data-entry projection) | partial | `data.load` (projection boundary: `form/load` authoritative) |
|
|
21
|
+
| 15a | M2-runtime-data (query/list) | executable | `data.list` (simplified filters -> queryCondition, pagination, field projection) |
|
|
22
|
+
| 21 | field-families | executable | `field.create`, `field.publish`, `field.delete`, `field.list` |
|
|
23
|
+
| 22 | field-families (numeric-logical/date-time) | partial | same field tools, family types constrained to the proven set |
|
|
24
|
+
| 23 | model-management | executable | `model.create`, `model.update` (app-tree NODE rename patch: bizSchemaCode/id/name/parentId required, modelType refused — fixed at create), `model.setSummary`, `model.delete`, `model.deleteMany` (publish aspect = model-scoped publication via `field.publish`/`form.publish`, exactly the proven ladder; no separate model-publish wire call exists) |
|
|
25
|
+
| 24 | form-publish-chain | executable | `form.draft`, `form.publish`, `form.get` (draft-first, explicit publishedHtmlJson, control-level layout readback) |
|
|
26
|
+
| 25 | B1-businessrule | executable | `rule.save` (dead-state + B1.2 CRUD/conditional node graphs) |
|
|
27
|
+
| 26 | C-workflow-template | executable | `workflow.create` (minimal template lifecycle) |
|
|
28
|
+
| 27 | online-js (composer) | executable | `onlinejs.compose` (platform skeleton preserved, canonical customScript element with array attrs, publish + SHA-256 readback). The design-time 在线开发 face (`/api/api/programming` JAVA source) is authored via 二开扩展包 and exposes no CLI tool |
|
|
29
|
+
| 28 | M2-runtime-data (write/readback) | executable | `data.save`, `data.load`, `data.delete`, `data.list` |
|
|
30
|
+
| 29 | B2-registration | executable | `service.register` (+ method), `service.get`, `service.delete` |
|
|
31
|
+
| 30 | environment-governance | executable | `discover_environment`, `environment.fingerprint`, `doctor`, `get_status` |
|
|
32
|
+
| 31 | e2e-delivery | executable | the governed chain itself: write tools (DELIVERED + artifact) → read tools (VERIFIED) → delete tools with exact-absence proof (CLEANED) |
|
|
33
|
+
| 32 | app-management | executable | `app.list`, `app.create`, `app.delete` (design-time application package lifecycle; production writes permanently refused) |
|
|
34
|
+
|
|
35
|
+
High-level orchestrations compose the same lanes under one token:
|
|
36
|
+
`configure_model` (23+21+24), `configure_form` (24), `configure_rule`
|
|
37
|
+
(25+12), `discover_environment` (30).
|
|
38
|
+
|
|
39
|
+
Blocked/static-only/unsupported boundaries (no tools, enforced by refusal):
|
|
40
|
+
W2-permissions, W5-S26-cross-model, W6-S27-* (nested child tables, relation
|
|
41
|
+
linkage, child-to-child), W6-S28-*, S32-custom-extension, boundary-unsupported
|
|
42
|
+
(inline backend coding, app publish/environment release, OCR/ELECTRONIC_SIGN).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stalfh233/omc-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "CloudPivot 8.6 configuration capability CLI — governed, fail-closed, coverage-manifest bounded.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"typecheck": "tsc --noEmit",
|
|
27
27
|
"coverage:manifest": "tsx scripts/coverage-manifest.ts --write",
|
|
28
28
|
"coverage:check": "tsx scripts/coverage-manifest.ts --check",
|
|
29
|
-
"test": "npm run build &&
|
|
29
|
+
"test": "npm run build && node scripts/run-tests.mjs",
|
|
30
30
|
"verify": "npm run typecheck && npm run coverage:check && npm test",
|
|
31
31
|
"eval:call-face": "node --import tsx scripts/run-call-face-eval.ts",
|
|
32
32
|
"eval:intent-face": "node --import tsx scripts/run-intent-face-eval.ts",
|
|
@@ -41,7 +41,9 @@
|
|
|
41
41
|
"test:live-permission": "node conformance/live-permission-acceptance.mjs",
|
|
42
42
|
"sandbox:dogfood": "node conformance/setup-dogfood-sandbox.mjs",
|
|
43
43
|
"payload:report": "tsx scripts/payload-report.ts",
|
|
44
|
-
"prepublishOnly": "npm run build"
|
|
44
|
+
"prepublishOnly": "npm run build",
|
|
45
|
+
"build:fast": "tsc --project tsconfig.build.json --incremental",
|
|
46
|
+
"typecheck:fast": "tsc --noEmit --incremental --tsBuildInfoFile .typecheck.tsbuildinfo"
|
|
45
47
|
},
|
|
46
48
|
"engines": {
|
|
47
49
|
"node": ">=20"
|
|
@@ -50,9 +52,9 @@
|
|
|
50
52
|
"access": "public"
|
|
51
53
|
},
|
|
52
54
|
"dependencies": {
|
|
53
|
-
"@stalfh233/omc-fake-platform": "0.
|
|
55
|
+
"@stalfh233/omc-fake-platform": "0.5.1",
|
|
54
56
|
"commander": "14.0.3",
|
|
55
|
-
"omc-core": "0.
|
|
57
|
+
"omc-core": "0.5.1",
|
|
56
58
|
"proper-lockfile": "4.1.2",
|
|
57
59
|
"write-file-atomic": "6.0.0",
|
|
58
60
|
"zod": "^3.23.8",
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: omc-acceptance-criteria
|
|
3
|
-
description: Decide whether a CLI change is accepted. Use before claiming done: readback, delivery-state, zero-residue, and negative-test gates.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Acceptance Criteria (验收标准)
|
|
7
|
-
|
|
8
|
-
A change is accepted only when every gate below holds.
|
|
9
|
-
|
|
10
|
-
## Per-write
|
|
11
|
-
|
|
12
|
-
1. **Environment permission** — `writable:true` admits the write; `writable:false` refuses before wire. A production write additionally carries `confirmProduction:true` and records `productionConfirmed:true`.
|
|
13
|
-
2. **Authoritative readback** — prove the intended state from the authoritative face (`field.list`, `form.get`, `data.load`, `onlinejs.get` for Online JS, `model.inspect` for workflow/rules), pairing each write with its same-family reader (`onlinejs.compose`→`onlinejs.get`; `report.datasource.link`→`linkedCount>0`). "Called without error" is not acceptance.
|
|
14
|
-
2a. **Judge must be decidable** — prove the field exists first; all-same values (`false`/`null`/`0`) mean a wrong judge, not a pass. `form.get` has no `customScript` key — use `onlinejs.get`.
|
|
15
|
-
2b. **Reachable ≠ correct** — `method.test success:true` proves reachability only; without a contract report "接口连通,业务对接未验证(契约缺失)".
|
|
16
|
-
2c. **Allowed ≠ advanced** — `data.submit` → `PROCESSING` only proves the instance exists. Prove the next task via `workitem.list` or a later submit; a stalled instance still answers `errCode 0`.
|
|
17
|
-
3. **Delivery state recorded** — the `.omc/` artifact exists with `deliveryState: DELIVERED` and the environment fingerprint.
|
|
18
|
-
4. **Zero residue** — fixtures removed and exact absence proven on every face (draft and published); final state CLEANED.
|
|
19
|
-
|
|
20
|
-
## Per-session
|
|
21
|
-
|
|
22
|
-
5. **`uncertain` resolved** — every uncertain outcome was re-discovered before any further write.
|
|
23
|
-
6. **Secrets zero-echo** — no output, artifact, or error contains the credential or bearer token.
|
|
24
|
-
7. **Boundaries respected** — every `capability-out-of-coverage` refusal was treated as a boundary, not retried through another tool.
|
|
25
|
-
8. **Draft gate evidenced** — if the session performed any write, the report must attach each design draft it presented and the human's approval turn(s) (and every revision). A write with no preceding draft/approval record fails acceptance — read `omc-config-draft-review`.
|
|
26
|
-
|
|
27
|
-
## Portal/DOM acceptance (opt-in, real platform)
|
|
28
|
-
|
|
29
|
-
Storage readback is NOT platform consumption. When the change is a form/design
|
|
30
|
-
artifact, the strongest acceptance is the opt-in live batteries — and they ARE
|
|
31
|
-
the "open a browser" step; do not report "no portal acceptance entry point":
|
|
32
|
-
|
|
33
|
-
- `npm run test:live` — designer canvas, condition panels **and the condition
|
|
34
|
-
dialog must render >=1 rule row** (a serialization can crash the formatter and
|
|
35
|
-
silently drop the row while the panel still says "Set"), portal fields (two
|
|
36
|
-
loads), list columns, list buttons, Online JS wrapper + `window.h3form` boot.
|
|
37
|
-
- `npm run test:live-workflow` — two-stage workflow + rule write-back via
|
|
38
|
-
`data.save(workflowCode)` → `workitem.list` → `data.submit` → `data.load`.
|
|
39
|
-
- `npm run test:live-permission` — node field permissions read from
|
|
40
|
-
`form/load.formPermission.dataPermissions` as a NON-admin participant (an
|
|
41
|
-
admin is force-granted `e:true`).
|
|
42
|
-
|
|
43
|
-
## Negative baseline (must stay green)
|
|
44
|
-
|
|
45
|
-
- Read-only environment → `environment-write-disabled`, zero wire calls.
|
|
46
|
-
- Writable production without `confirmProduction:true` → `production-confirmation-required`, zero wire calls.
|
|
47
|
-
- Concurrent writes → serialized by the write lease (max 1 in flight).
|
|
48
|
-
- Blocked lane (e.g. `W2-permissions`) → refused with citation.
|
|
49
|
-
- Transport outage during a write → `uncertain` + `frozen`, never `ok`.
|
|
50
|
-
- Non-8.6 version (or missing version evidence) → writes fail closed.
|
|
1
|
+
---
|
|
2
|
+
name: omc-acceptance-criteria
|
|
3
|
+
description: Decide whether a CLI change is accepted. Use before claiming done: readback, delivery-state, zero-residue, and negative-test gates.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Acceptance Criteria (验收标准)
|
|
7
|
+
|
|
8
|
+
A change is accepted only when every gate below holds.
|
|
9
|
+
|
|
10
|
+
## Per-write
|
|
11
|
+
|
|
12
|
+
1. **Environment permission** — `writable:true` admits the write; `writable:false` refuses before wire. A production write additionally carries `confirmProduction:true` and records `productionConfirmed:true`.
|
|
13
|
+
2. **Authoritative readback** — prove the intended state from the authoritative face (`field.list`, `form.get`, `data.load`, `onlinejs.get` for Online JS, `model.inspect` for workflow/rules), pairing each write with its same-family reader (`onlinejs.compose`→`onlinejs.get`; `report.datasource.link`→`linkedCount>0`). "Called without error" is not acceptance.
|
|
14
|
+
2a. **Judge must be decidable** — prove the field exists first; all-same values (`false`/`null`/`0`) mean a wrong judge, not a pass. `form.get` has no `customScript` key — use `onlinejs.get`.
|
|
15
|
+
2b. **Reachable ≠ correct** — `method.test success:true` proves reachability only; without a contract report "接口连通,业务对接未验证(契约缺失)".
|
|
16
|
+
2c. **Allowed ≠ advanced** — `data.submit` → `PROCESSING` only proves the instance exists. Prove the next task via `workitem.list` or a later submit; a stalled instance still answers `errCode 0`.
|
|
17
|
+
3. **Delivery state recorded** — the `.omc/` artifact exists with `deliveryState: DELIVERED` and the environment fingerprint.
|
|
18
|
+
4. **Zero residue** — fixtures removed and exact absence proven on every face (draft and published); final state CLEANED.
|
|
19
|
+
|
|
20
|
+
## Per-session
|
|
21
|
+
|
|
22
|
+
5. **`uncertain` resolved** — every uncertain outcome was re-discovered before any further write.
|
|
23
|
+
6. **Secrets zero-echo** — no output, artifact, or error contains the credential or bearer token.
|
|
24
|
+
7. **Boundaries respected** — every `capability-out-of-coverage` refusal was treated as a boundary, not retried through another tool.
|
|
25
|
+
8. **Draft gate evidenced** — if the session performed any write, the report must attach each design draft it presented and the human's approval turn(s) (and every revision). A write with no preceding draft/approval record fails acceptance — read `omc-config-draft-review`.
|
|
26
|
+
|
|
27
|
+
## Portal/DOM acceptance (opt-in, real platform)
|
|
28
|
+
|
|
29
|
+
Storage readback is NOT platform consumption. When the change is a form/design
|
|
30
|
+
artifact, the strongest acceptance is the opt-in live batteries — and they ARE
|
|
31
|
+
the "open a browser" step; do not report "no portal acceptance entry point":
|
|
32
|
+
|
|
33
|
+
- `npm run test:live` — designer canvas, condition panels **and the condition
|
|
34
|
+
dialog must render >=1 rule row** (a serialization can crash the formatter and
|
|
35
|
+
silently drop the row while the panel still says "Set"), portal fields (two
|
|
36
|
+
loads), list columns, list buttons, Online JS wrapper + `window.h3form` boot.
|
|
37
|
+
- `npm run test:live-workflow` — two-stage workflow + rule write-back via
|
|
38
|
+
`data.save(workflowCode)` → `workitem.list` → `data.submit` → `data.load`.
|
|
39
|
+
- `npm run test:live-permission` — node field permissions read from
|
|
40
|
+
`form/load.formPermission.dataPermissions` as a NON-admin participant (an
|
|
41
|
+
admin is force-granted `e:true`).
|
|
42
|
+
|
|
43
|
+
## Negative baseline (must stay green)
|
|
44
|
+
|
|
45
|
+
- Read-only environment → `environment-write-disabled`, zero wire calls.
|
|
46
|
+
- Writable production without `confirmProduction:true` → `production-confirmation-required`, zero wire calls.
|
|
47
|
+
- Concurrent writes → serialized by the write lease (max 1 in flight).
|
|
48
|
+
- Blocked lane (e.g. `W2-permissions`) → refused with citation.
|
|
49
|
+
- Transport outage during a write → `uncertain` + `frozen`, never `ok`.
|
|
50
|
+
- Non-8.6 version (or missing version evidence) → writes fail closed.
|