@cspeach/cli 1.1.49 → 1.1.50

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 (46) hide show
  1. package/dist/agent/cold-prune.js +1 -1
  2. package/dist/agent/conversation-prompt.js +52 -0
  3. package/dist/agent/loop.js +83 -2
  4. package/dist/agent/oversized-results.js +204 -0
  5. package/dist/agent/turn-error-ux.js +14 -0
  6. package/dist/commands/plan-continue-gate.js +11 -0
  7. package/dist/cost/cost-log.js +4 -0
  8. package/dist/cost/system-block.js +25 -0
  9. package/dist/models/server-config.js +13 -0
  10. package/dist/projects/workspace.js +6 -3
  11. package/dist/repl.js +16 -6
  12. package/dist/session/fresh-start.js +15 -0
  13. package/dist/tools/_filesystem-shared.js +7 -0
  14. package/dist/tools/cut-markers.js +47 -0
  15. package/dist/tools/filesystem/extract-document.js +50 -2
  16. package/dist/tools/filesystem/file-read.js +2 -2
  17. package/dist/tools/filesystem/read-document.js +20 -4
  18. package/dist/tools/tool-output-read.js +5 -1
  19. package/dist/tools/write-pipeline.js +5 -0
  20. package/package.json +121 -121
  21. package/dist/commands/project.js +0 -301
  22. package/dist/doctor/checks/zcspeach.js +0 -96
  23. package/dist/projects/email-template.js +0 -56
  24. package/dist/projects/merge-cca.js +0 -292
  25. package/dist/tools/local-files.js +0 -31
  26. package/dist/tools/project/cca_merge.js +0 -164
  27. package/dist/tools/subagent/schedule_create.js +0 -131
  28. package/dist/ui/error-emitter.js +0 -21
  29. package/dist/ui/header.js +0 -41
  30. package/dist/ui/ink-classifier-route.js +0 -19
  31. package/dist/ui/rich-error-box.js +0 -9
  32. package/dist/ui/sidebar.js +0 -12
  33. package/dist/ui/status-emitter.js +0 -19
  34. package/dist/ui/status-line.js +0 -62
  35. package/dist/ui/status-row.js +0 -38
  36. package/dist/ui/todo-panel.js +0 -85
  37. package/dist/ui/widgets/ask-form.js +0 -250
  38. package/dist/ui/widgets/ask-question-modal.js +0 -178
  39. package/fiori/zlas-inspection-lr/package.json +0 -26
  40. package/fiori/zlas-inspection-lr/ui5-local.yaml +0 -45
  41. package/fiori/zlas-inspection-lr/ui5.yaml +0 -41
  42. package/fiori/zlas-inspection-lr/webapp/Component.js +0 -12
  43. package/fiori/zlas-inspection-lr/webapp/i18n/i18n.properties +0 -9
  44. package/fiori/zlas-inspection-lr/webapp/index.html +0 -35
  45. package/fiori/zlas-inspection-lr/webapp/manifest.json +0 -145
  46. package/live-check-2026-10-17-1343.txt +0 -41
@@ -1,178 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * AskQuestionModal — Ink-native interactive form for the ask_question tool.
4
- *
5
- * Critical #2 fix (2026-05-17): the prior path called inquirer.input/
6
- * select/checkbox directly. In Ink that draws raw to stdout, corrupts
7
- * the React frame, and the user often can't tell what's being asked.
8
- *
9
- * Three modes match the tool's three kinds:
10
- * - text → free-form TextInput, Enter to submit, Esc to cancel
11
- * - choice → arrow-key single-select list (mirrors CoachingPicker)
12
- * - multi → space-to-toggle checkbox list, Enter to submit
13
- *
14
- * Mounted inline by App.tsx (NOT as position="absolute" overlay — we
15
- * learned the hard way that absolute overlays paint over Body and
16
- * can't be navigated cleanly).
17
- */
18
- import { useState, useEffect } from 'react';
19
- import { Box, Text, useInput } from 'ink';
20
- // D29 paste fix (2026-06-12): paste-safe replacement for ink-text-input —
21
- // pasted free-form answers were losing every chunk but the last on large
22
- // pastes (stale-prop closure upstream). See ../text-input.tsx.
23
- import TextInput from '../text-input.js';
24
- const PEACH = '#FFCBA4';
25
- export function askHelpLine(kind, opts) {
26
- switch (kind) {
27
- // 2026-09-17 — spelled out after a first-session user could not tell a
28
- // multi-select from a single pick ("was it a multi select?").
29
- case 'multi': return 'Space ticks a row · Enter confirms · Enter alone picks the highlighted row · Esc cancels';
30
- case 'pick': return opts?.single ? 'Enter pick · Esc cancel' : 'Enter pick · Tab next · Esc cancel';
31
- default: return opts?.single ? 'Enter submit · Esc cancel' : 'Tab next · Esc cancel';
32
- }
33
- }
34
- /**
35
- * Reclaim raw-mode stdin when an Ink modal mounts (2026-06-08).
36
- *
37
- * The approval plan-gate uses `@inquirer/prompts`, which toggles the
38
- * terminal's raw mode (and pauses stdin) out from under Ink while it runs.
39
- * When it releases, Ink's INTERNAL bookkeeping still thinks raw mode is on,
40
- * so it does not re-assert it — and a modal mounted afterwards (this one)
41
- * receives no keypresses: arrow keys and Enter are dead, the user cannot
42
- * answer the question. Re-syncing the OS state to what Ink expects on mount
43
- * fixes it. Direct `process.stdin` calls (not Ink's ref-counted setRawMode)
44
- * because the whole problem is that Ink's count is stale.
45
- *
46
- * Exported (UX Wave 2 / Task 2) so <AskForm> — the v2 multi-question form —
47
- * reuses the exact same reclaim on mount. v1 rendering is untouched.
48
- */
49
- export function useReclaimRawStdin() {
50
- useEffect(() => {
51
- const stdin = process.stdin;
52
- if (stdin.isTTY && typeof stdin.setRawMode === 'function') {
53
- try {
54
- stdin.setRawMode(true);
55
- }
56
- catch { /* not a TTY — ignore */ }
57
- stdin.resume();
58
- }
59
- }, []);
60
- }
61
- export function AskQuestionModal({ params, onResolve }) {
62
- useReclaimRawStdin();
63
- if (params.kind === 'text' || params.choices.length === 0) {
64
- return _jsx(TextInputForm, { params: params, onResolve: onResolve });
65
- }
66
- if (params.kind === 'choice') {
67
- return _jsx(ChoiceForm, { params: params, onResolve: onResolve });
68
- }
69
- return _jsx(MultiForm, { params: params, onResolve: onResolve });
70
- }
71
- // ---------------------------------------------------------------------------
72
- // Free-form text
73
- // ---------------------------------------------------------------------------
74
- function TextInputForm({ params, onResolve }) {
75
- const [value, setValue] = useState('');
76
- useInput((_input, key) => {
77
- if (key.escape) {
78
- onResolve({ answer: null, cancelled: true });
79
- }
80
- }, { isActive: true });
81
- return (_jsxs(Box, { flexDirection: "column", paddingX: 1, flexShrink: 0, children: [_jsx(Text, { bold: true, children: params.question }), params.context && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: params.context }) })), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: PEACH, children: '> ' }), _jsx(TextInput, { value: value, onChange: setValue, onSubmit: (v) => {
82
- const trimmed = v.trim();
83
- if (trimmed.length === 0) {
84
- onResolve({ answer: null, cancelled: true });
85
- }
86
- else {
87
- onResolve({ answer: trimmed });
88
- }
89
- } })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: askHelpLine('freeText', { single: true }) }) })] }));
90
- }
91
- // ---------------------------------------------------------------------------
92
- // Single choice (kind = 'choice')
93
- // ---------------------------------------------------------------------------
94
- function ChoiceForm({ params, onResolve }) {
95
- const [cursor, setCursor] = useState(0);
96
- useInput((_input, key) => {
97
- if (key.escape) {
98
- onResolve({ answer: null, cancelled: true });
99
- return;
100
- }
101
- if (key.upArrow) {
102
- setCursor((c) => Math.max(0, c - 1));
103
- return;
104
- }
105
- if (key.downArrow) {
106
- setCursor((c) => Math.min(params.choices.length - 1, c + 1));
107
- return;
108
- }
109
- if (key.return) {
110
- const chosen = params.choices[cursor];
111
- if (chosen)
112
- onResolve({ answer: chosen.value });
113
- }
114
- }, { isActive: true });
115
- return (_jsxs(Box, { flexDirection: "column", paddingX: 1, flexShrink: 0, children: [_jsx(Text, { bold: true, children: params.question }), params.context && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: params.context }) })), _jsx(Box, { marginTop: 1, flexDirection: "column", children: params.choices.map((c, i) => {
116
- const isCursor = i === cursor;
117
- return (_jsxs(Text, { color: isCursor ? PEACH : undefined, bold: isCursor, children: [isCursor ? '▸ ' : ' ', c.label] }, c.value));
118
- }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: askHelpLine('pick', { single: true }) }) })] }));
119
- }
120
- // ---------------------------------------------------------------------------
121
- // Multi choice (kind = 'multi') — space to toggle, Enter to submit
122
- // ---------------------------------------------------------------------------
123
- function MultiForm({ params, onResolve }) {
124
- const [cursor, setCursor] = useState(0);
125
- const [selected, setSelected] = useState(new Set());
126
- useInput((input, key) => {
127
- if (key.escape) {
128
- onResolve({ answer: null, cancelled: true });
129
- return;
130
- }
131
- if (key.upArrow) {
132
- setCursor((c) => Math.max(0, c - 1));
133
- return;
134
- }
135
- if (key.downArrow) {
136
- setCursor((c) => Math.min(params.choices.length - 1, c + 1));
137
- return;
138
- }
139
- if (input === ' ') {
140
- const current = params.choices[cursor];
141
- if (current) {
142
- setSelected((prev) => {
143
- const next = new Set(prev);
144
- if (next.has(current.value))
145
- next.delete(current.value);
146
- else
147
- next.add(current.value);
148
- return next;
149
- });
150
- }
151
- return;
152
- }
153
- if (key.return) {
154
- const values = params.choices
155
- .filter((c) => selected.has(c.value))
156
- .map((c) => c.value);
157
- if (values.length === 0) {
158
- // 2026-09-17 — nothing toggled: Enter alone picks the highlighted
159
- // option (single-choice muscle memory) instead of cancelling.
160
- const current = params.choices[cursor];
161
- if (current)
162
- onResolve({ answer: current.value });
163
- else
164
- onResolve({ answer: null, cancelled: true });
165
- }
166
- else {
167
- onResolve({ answer: values.join(',') });
168
- }
169
- }
170
- }, { isActive: true });
171
- return (_jsxs(Box, { flexDirection: "column", paddingX: 1, flexShrink: 0, children: [_jsxs(Text, { bold: true, children: [params.question, " (choose one or more)"] }), params.context && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: params.context }) })), _jsx(Box, { marginTop: 1, flexDirection: "column", children: params.choices.map((c, i) => {
172
- const isCursor = i === cursor;
173
- const isSelected = selected.has(c.value);
174
- const mark = isSelected ? '◉' : '○';
175
- const prefix = isCursor ? '▸ ' : ' ';
176
- return (_jsxs(Text, { color: isCursor ? PEACH : undefined, bold: isCursor, children: [prefix, mark, " ", c.label] }, c.value));
177
- }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: askHelpLine('multi') }) })] }));
178
- }
@@ -1,26 +0,0 @@
1
- {
2
- "name": "zlas.inspectionlog",
3
- "version": "0.0.1",
4
- "description": "Description of zlas.inspectionlog.",
5
- "keywords": [
6
- "ui5",
7
- "openui5",
8
- "sapui5"
9
- ],
10
- "main": "webapp/index.html",
11
- "dependencies": {},
12
- "devDependencies": {
13
- "@ui5/cli": "^4.0.33",
14
- "@sap/ux-ui5-tooling": "1"
15
- },
16
- "scripts": {
17
- "start": "fiori run --open \"/test/flpSandbox.html?sap-ui-xx-viewCache=false#zlasinspectionlog-tile\"",
18
- "start-local": "fiori run --config ./ui5-local.yaml --open \"/test/flpSandbox.html?sap-ui-xx-viewCache=false#zlasinspectionlog-tile\"",
19
- "build": "ui5 build --config=ui5.yaml --clean-dest --dest dist",
20
- "deploy": "fiori verify",
21
- "deploy-config": "fiori add deploy-config",
22
- "start-noflp": "fiori run --open \"/index.html?sap-ui-xx-viewCache=false\"",
23
- "start-variants-management": "fiori run --open \"/preview.html?sap-ui-xx-viewCache=false&fiori-tools-rta-mode=true&sap-ui-rta-skip-flex-validation=true#zlasinspectionlog-tile\""
24
- },
25
- "sapux": true
26
- }
@@ -1,45 +0,0 @@
1
- # yaml-language-server: $schema=https://sap.github.io/ui5-tooling/schema/ui5.yaml.json
2
-
3
- specVersion: "4.0"
4
- metadata:
5
- name: zlas.inspectionlog
6
- type: application
7
- framework:
8
- name: SAPUI5
9
- version: 1.120.0
10
- libraries:
11
- - name: sap.m
12
- - name: sap.ui.core
13
- - name: sap.fe.templates
14
- - name: sap.ushell
15
- - name: themelib_sap_fiori_3
16
- server:
17
- customMiddleware:
18
- - name: fiori-tools-appreload
19
- afterMiddleware: compression
20
- configuration:
21
- port: 35729
22
- path: webapp
23
- delay: 300
24
- - name: fiori-tools-preview
25
- afterMiddleware: fiori-tools-appreload
26
- configuration:
27
- flp:
28
- theme: sap_fiori_3
29
- path: test/flpSandbox.html
30
- intent:
31
- object: zlasinspectionlog
32
- action: tile
33
- - name: fiori-tools-proxy
34
- afterMiddleware: compression
35
- configuration:
36
- ignoreCertErrors: false # If set to true, certificate errors will be ignored. E.g. self-signed certificates will be accepted
37
- backend:
38
- - path: /sap
39
- url: https://172.16.24.98:44300
40
- client: '100'
41
- builder:
42
- resources:
43
- excludes:
44
- - /test/**
45
- - /localService/**
@@ -1,41 +0,0 @@
1
- # yaml-language-server: $schema=https://sap.github.io/ui5-tooling/schema/ui5.yaml.json
2
-
3
- specVersion: "4.0"
4
- metadata:
5
- name: zlas.inspectionlog
6
- type: application
7
- server:
8
- customMiddleware:
9
- - name: fiori-tools-proxy
10
- afterMiddleware: compression
11
- configuration:
12
- ignoreCertErrors: true # Dev-only: accept the backend's self-signed certificate
13
- ui5:
14
- path:
15
- - /resources
16
- - /test-resources
17
- url: https://ui5.sap.com
18
- backend:
19
- - path: /sap
20
- url: https://172.16.24.98:44300
21
- client: '100'
22
- - name: fiori-tools-appreload
23
- afterMiddleware: compression
24
- configuration:
25
- port: 35729
26
- path: webapp
27
- delay: 300
28
- - name: fiori-tools-preview
29
- afterMiddleware: fiori-tools-appreload
30
- configuration:
31
- flp:
32
- theme: sap_fiori_3
33
- path: test/flpSandbox.html
34
- intent:
35
- object: zlasinspectionlog
36
- action: tile
37
- builder:
38
- resources:
39
- excludes:
40
- - /test/**
41
- - /localService/**
@@ -1,12 +0,0 @@
1
- sap.ui.define(
2
- ["sap/fe/core/AppComponent"],
3
- function (Component) {
4
- "use strict";
5
-
6
- return Component.extend("zlas.inspectionlog.Component", {
7
- metadata: {
8
- manifest: "json"
9
- }
10
- });
11
- }
12
- );
@@ -1,9 +0,0 @@
1
- # This is the resource bundle for zlas.inspectionlog
2
-
3
- #Texts for manifest.json
4
-
5
- #XTIT: Application name
6
- appTitle=Equipment Inspection Logs
7
-
8
- #YDES: Application description
9
- appDescription=Description of zlas.inspectionlog.
@@ -1,35 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
- <title>Equipment Inspection Logs</title>
8
- <style>
9
- html, body, body > div, #container, #container-uiarea {
10
- height: 100%;
11
- }
12
- </style>
13
- <script
14
- id="sap-ui-bootstrap"
15
- src="resources/sap-ui-core.js"
16
- data-sap-ui-theme="sap_fiori_3"
17
- data-sap-ui-resource-roots='{
18
- "zlas.inspectionlog": "./"
19
- }'
20
- data-sap-ui-on-init="module:sap/ui/core/ComponentSupport"
21
- data-sap-ui-compat-version="edge"
22
- data-sap-ui-async="true"
23
- data-sap-ui-frame-options="trusted"
24
- ></script>
25
- </head>
26
- <body class="sapUiBody sapUiSizeCompact" id="content">
27
- <div
28
- data-sap-ui-component
29
- data-name="zlas.inspectionlog"
30
- data-id="container"
31
- data-settings='{"id" : "zlas.inspectionlog"}'
32
- data-handle-validation="true"
33
- ></div>
34
- </body>
35
- </html>
@@ -1,145 +0,0 @@
1
- {
2
- "_version": "1.60.0",
3
- "sap.app": {
4
- "id": "zlas.inspectionlog",
5
- "type": "application",
6
- "i18n": "i18n/i18n.properties",
7
- "applicationVersion": {
8
- "version": "0.0.1"
9
- },
10
- "title": "{{appTitle}}",
11
- "description": "{{appDescription}}",
12
- "resources": "resources.json",
13
- "sourceTemplate": {
14
- "id": "@sap-ux/fiori-elements-writer:lrop",
15
- "version": "3.0.39"
16
- },
17
- "dataSources": {
18
- "mainService": {
19
- "uri": "/sap/opu/odata4/sap/zui_las_inspectionlog_o4/srvd/sap/zui_las_inspectionlog_o4/0001/",
20
- "type": "OData",
21
- "settings": {
22
- "annotations": [],
23
- "odataVersion": "4.0"
24
- }
25
- }
26
- }
27
- },
28
- "sap.ui": {
29
- "technology": "UI5",
30
- "icons": {
31
- "icon": "",
32
- "favIcon": "",
33
- "phone": "",
34
- "phone@2": "",
35
- "tablet": "",
36
- "tablet@2": ""
37
- },
38
- "deviceTypes": {
39
- "desktop": true,
40
- "tablet": true,
41
- "phone": true
42
- }
43
- },
44
- "sap.ui5": {
45
- "flexEnabled": true,
46
- "dependencies": {
47
- "minUI5Version": "1.120.0",
48
- "libs": {
49
- "sap.m": {},
50
- "sap.ui.core": {},
51
- "sap.fe.templates": {}
52
- }
53
- },
54
- "contentDensities": {
55
- "compact": true,
56
- "cozy": true
57
- },
58
- "models": {
59
- "i18n": {
60
- "type": "sap.ui.model.resource.ResourceModel",
61
- "settings": {
62
- "bundleName": "zlas.inspectionlog.i18n.i18n"
63
- }
64
- },
65
- "": {
66
- "dataSource": "mainService",
67
- "preload": true,
68
- "settings": {
69
- "operationMode": "Server",
70
- "autoExpandSelect": true,
71
- "earlyRequests": true
72
- }
73
- },
74
- "@i18n": {
75
- "type": "sap.ui.model.resource.ResourceModel",
76
- "uri": "i18n/i18n.properties"
77
- }
78
- },
79
- "resources": {
80
- "css": []
81
- },
82
- "routing": {
83
- "config": {},
84
- "routes": [
85
- {
86
- "pattern": ":?query:",
87
- "name": "InspectionLogList",
88
- "target": "InspectionLogList"
89
- },
90
- {
91
- "pattern": "InspectionLog({key}):?query:",
92
- "name": "InspectionLogObjectPage",
93
- "target": "InspectionLogObjectPage"
94
- }
95
- ],
96
- "targets": {
97
- "InspectionLogList": {
98
- "type": "Component",
99
- "id": "InspectionLogList",
100
- "name": "sap.fe.templates.ListReport",
101
- "options": {
102
- "settings": {
103
- "contextPath": "/InspectionLog",
104
- "variantManagement": "Page",
105
- "navigation": {
106
- "InspectionLog": {
107
- "detail": {
108
- "route": "InspectionLogObjectPage"
109
- }
110
- }
111
- },
112
- "controlConfiguration": {
113
- "@com.sap.vocabularies.UI.v1.LineItem": {
114
- "tableSettings": {
115
- "type": "ResponsiveTable"
116
- }
117
- }
118
- }
119
- }
120
- }
121
- },
122
- "InspectionLogObjectPage": {
123
- "type": "Component",
124
- "id": "InspectionLogObjectPage",
125
- "name": "sap.fe.templates.ObjectPage",
126
- "options": {
127
- "settings": {
128
- "editableHeaderContent": false,
129
- "contextPath": "/InspectionLog"
130
- }
131
- }
132
- }
133
- }
134
- }
135
- },
136
- "sap.fiori": {
137
- "registrationIds": [],
138
- "archeType": "transactional"
139
- },
140
- "sap.fe": {
141
- "app": {
142
- "enableLazyLoading": true
143
- }
144
- }
145
- }
@@ -1,41 +0,0 @@
1
- CSPeach live check: system S4H, package ZTEST_LAS, run 2BUS
2
- Transport S4HK903771 (given with --transport)
3
-
4
- PASS CLI: sap_run and sap_transport_read (pipeline; D3, D18 refusals, one-shot run approval, dump window, spill; never a release) 90.6 s
5
- PASS temp home 0.0 s alias S4H copied; write_mode approval-gated; safety cards off
6
- covers: approval id + claims, Rule 9 transport, Rule 7 snapshot, WAL, Rule 10 verify, chain; not: Rule 8 (dispatchTool), the cards
7
- PASS card input 0.0 s risk high (code_run); this runs code on the SAP system
8
- PASS sap_create_object + sap_set_source CLAS 7.1 s ZCL_ZCSPLC2BUS_CR created and written; activated by the write and verified
9
- info: object locked in S4HK903771 — writing under owning transport
10
- info: snapshot ✓ CLAS ZCL_ZCSPLC2BUS_CR 2026-10-17T17-42-31-537Z
11
- ① snapshot ✓ ② written ✓ ③ syntax ✓ ④ activate pending
12
- audit: 2026-10-17T17:42:34.691Z | setSource | CLAS | ZCL_ZCSPLC2BUS_CR | success | 3146ms
13
- audit: 2026-10-17T17:42:34.976Z | setSource | CLAS | ZCL_ZCSPLC2BUS_CR | success | 4539ms
14
- PASS sap_run standard class refused 0.0 s run_refused before any request: CSPeach runs only your own classes and programs (names starting with Z or Y). CL_ABAP_UNIT_ASSERT is not one of them.
15
- PASS sap_lock 0.3 s ZCL_ZCSPLC2BUS_CR locked through sap_lock (a manual lock is held)
16
- PASS sap_run under a manual lock 0.0 s manual_lock_held before any request: A lock you took with sap_lock is still held. Unlock it (sap_unlock) first, then ask for the run again.
17
- PASS sap_unlock 0.7 s ZCL_ZCSPLC2BUS_CR unlocked; no manual lock held
18
- PASS sap_run CLAS 0.3 s the same approval id ran it once: {"ran":true,"type":"CLAS","name":"ZCL_ZCSPLC2BUS_CR","lines":9,"chars":107,"elapsed_ms":287,"session_ended":false}
19
- info: run CLAS ZCL_ZCSPLC2BUS_CR · ran · 287 ms
20
- PASS sap_run again with the same id 0.0 s APPROVAL_INVALID nonce_spent; no request
21
- PASS sap_run PROG 4.2 s ran: {"ran":true,"type":"PROG","name":"ZCSPLC2BUS_CRP","lines":6,"chars":255,"elapsed_ms":291,"session_ended":false}
22
- PASS sap_run CLAS dump 4.7 s run_dumped: "Division by zero", dump_window 20261018034313–20261018034713; next_step: sap_short_dump with fromDate and toDate = dump_window (SAP system time), then operation detail on the newest du...
23
- PASS sap_short_dump in the dump window 1.5 s listed: ZCL_ZCSPLC2BUS_CRX============CP (20261018034513vhcals4hci_S4H_00%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20S.LAEEQ%20%20%20%20%20100%20%20%20%20%20%20%2012); 1 dump(s) in the window
24
- PASS sap_run CLAS long output 17.9 s the content carries the pointer line; the spill file holds 20001 lines (the facts line and 20 000 output lines); {"ran":true,"type":"CLAS","name":"ZCL_ZCSPLC2BUS_CRB","lines":20001,"chars":1328895,...
25
- PASS sap_transport_read request 12.9 s S4HK903771 status D, 1 task(s), object_count 691, can_release true
26
- PASS sap_transport_read task 7.2 s S4HK903772: kind task of S4HK903771; note: S4HK903772 is a task of S4HK903771.
27
- PASS release card input (never used) 13.2 s risk high (transport_release); no approval minted, never sent
28
- Request S4HK903771 "CSPeach live check 2026-10-14" · owner S.LAEEQ · target CL5
29
- 1 task: S4HK903772 · 691 objects
30
- Cannot be undone. Once released, the request can move to the other systems on the transport route.
31
- CSPeach reads SAP's verdict after each step and checks the request afterwards. Check the transport in SE09 after the release.
32
- PASS sap_delete_object CLAS ZCL_ZCSPLC2BUS_CRB 5.7 s deleted; a search finds nothing
33
- PASS sap_delete_object CLAS ZCL_ZCSPLC2BUS_CRX 5.5 s deleted; a search finds nothing
34
- PASS sap_delete_object PROG ZCSPLC2BUS_CRP 3.7 s deleted; a search finds nothing
35
- PASS sap_delete_object CLAS ZCL_ZCSPLC2BUS_CR 5.6 s deleted; a search finds nothing
36
- PASS Cleanup 0.0 s
37
-
38
- 2 passed, 0 failed
39
- Transport: S4HK903771
40
- The transport is NOT released. Delete or release it in SE09.
41
- Leftover objects: none.