Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions docs/baseline-findings.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,11 @@ Priority meanings: **P0** blocks the requested test workflow or is an immediate
| BASE-CLEAN-001 | P2 | Clean-core status is provisionally Level D/unknown because of `CL_GUI_ABAPEDIT`, DDIC internals such as `DD03L`, system/kernel calls, and other unreleased references. Classic controls such as `CL_GUI_ALV_GRID` are Level B on-premise APIs. | Replace/encapsulate unsupported and unknown references, then re-run released-API ATC and document accepted Level B dependencies. | Open |
| BASE-TOOL-001 | P2 | ARC-1 0.9.19 can list/check this native-abapGit repository but its clone call sends an XML shape rejected by A4H 758 (`repository` namespace mismatch). Native abapGit UI was required to link/pull. | Minimal ARC-1 integration reproduction against A4H 758; fix ARC-1 separately, keep UI fallback documented. | Open |
| BASE-ENV-001 | P2 | NPL and `arc-1-750` are configured. SAP_BASIS 750 cannot create the transparent table through ADT, so the maintainer provisioned the complete repository once with native abapGit 1.134.0 from an offline ZIP in local package `$ZTOAD2`. | Require exact source activation/state, SAP syntax, all Unit tests, complete `DEFAULT` ATC, and zero inactive ZTOAD parts through ARC-1. NPL UI smoke remains out of scope. | Fixed: exact candidate is 67/67 with zero syntax errors, unchanged 88-finding ATC baseline, and no inactive ZTOAD part |
| BASE-DDIC-001 | P2 | Offline NPL installation warns that the table enhancement category is missing and normalizes `ZTOAD` to `#NOT_CLASSIFIED`, leaving a persistent table serialization difference. | Choose the explicit compatible category from SAP guidance, change the table in SAP, export only `TABL ZTOAD` through native abapGit, and require activation plus clean round trips on 750 and 758. | Open; separate structural PR |
| BASE-DDIC-001 | P2 | Offline NPL installation warns that the table enhancement category is missing and normalizes `ZTOAD` to `#NOT_CLASSIFIED`, leaving a persistent table serialization difference. | Require `<EXCLASS>1</EXCLASS>` (`#NOT_EXTENSIBLE`), native-abapGit export of only `TABL ZTOAD`, and activation plus reviewed round trips on 750 and 758. | Fixed candidate `4206a1a`: native round trip and both live structural gates pass; NPL is `#NOT_EXTENSIBLE`, 67/67 Unit, zero syntax errors, unchanged complete 88-finding ATC baseline, and no inactive ZTOAD part |
| BASE-TOOL-002 | P2 | ARC-1 1.0.2 detects NPL release 750, but its lint inventory reports `v702`/unknown; absent `PROG ZTOAD` is misclassified as a class-local include, and nonexistent `DEVC ZTOAD` returns unrelated objects. | Add focused ARC-1 integration reproductions on NPL and correct release propagation, not-found hints, and package resolution in the ARC-1 project. | Open |
| BASE-TOOL-003 | P2 | The local A4H ARC-1 pre-write linter also selected ABAP v702 and rejected valid 7.50+ syntax. The live SAP preflight accepted the exact source, and A4H activated it with zero syntax errors. | Propagate probed/configured SAP release into pre-write lint. Until fixed, bypass only `lintBeforeWrite` after repository abaplint is green; retain live preflight, explicit activation, syntax, Unit, and object-state checks. | Open |
| BASE-TOOL-004 | P2 | ARC-1 1.0.2 native-abapGit/CLI testing found cold-process feature detection, `stage` write-scope classification, unverified short-ref branch switching, weak remote-auth diagnostics, and no surgical edit support for local classes inside `PROG`. | Implement on-demand feature probing, normalize and verify refs, classify actual mutations, improve credential/postcondition JSON, and support report-local methods or narrow the documented contract. | Open; detailed audit in `docs/research/2026-08-07-arc1-abapgit-integration-audit.md` |
| BASE-TOOL-005 | P2 | On NPL, ARC-1 1.0.2's direct active `TABL` object-state request returns 404 for the installed transparent table while automatic/inactive-version reads, object search, explicit activation, and native abapGit all resolve it correctly. | Reuse `SAPRead`'s table/structure endpoint discovery in `SAPDiagnose(object_state)` and add a SAP_BASIS 750 transparent-table integration test. | Open; compensated by explicit activation, automatic plus inactive-version reads, exact metadata comparison, and the global inactive inventory |
| BASE-TOOL-004 | P2 | ARC-1 native-abapGit/CLI testing found cold-process feature detection, stage/push/pull XML contract mismatches, unverified short refs, weak remote-auth diagnostics, mutating TABL `dryRun`, and no surgical local-class edit inside `PROG`. | Add on-demand probing, backend-versioned XML fixtures, normalized verified refs, non-mutating dry runs, credential/postcondition JSON, and supported report-local method editing. | Open; detailed audit in `docs/research/2026-08-07-arc1-abapgit-integration-audit.md` |
| BASE-REL-001 | P2 | Source declares 4.0.4 but the latest Git tag is 4.0.3. Release Please uses 4.0.4 as its manifest baseline, but its first compare link expects that tag. | After both live gates pass at an exact commit, decide whether to create the one-time immutable 4.0.4 tag/release. | Decision |
| BASE-CTS-001 | P3 | Setup left empty local request `A4HK906377`; active work is in `A4HK906379`. | Manual owner decision whether to retain or delete the empty request. No automated deletion. | Decision |

Expand Down
4 changes: 3 additions & 1 deletion docs/development.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@ On A4H, the Fiori-shell URL for the transaction is:

Do not manually install only the report source. That omits the dynpros, table, authorization object, and transaction and cannot reproduce a supported installation. The repository-managed launcher is report transaction `ZTOAD` for program `ZTOAD`; use `#Shell-startGUI?sap-ui2-tcode=ZTOAD` or standalone `~transaction=ZTOAD` for its A4H smoke test.

For an offline NPL refresh, create an offline repository bound to the dedicated local package, import a ZIP generated from the exact Git commit, review and pull only `PROG ZTOAD`, `TABL ZTOAD`, `TRAN ZTOAD`, and `SUSO ZTOAD_AUTH`, then activate. Do not export the system-local root package as `package.devc.xml`, and do not accept release-normalized table metadata without a deliberate structural review. After this one-time structural provisioning, deploy source-only candidates directly through ARC-1 and keep all NPL validation UI-free.
For an offline NPL refresh, create an offline repository bound to the dedicated local package, import a ZIP generated from the exact Git commit, review and pull only `PROG ZTOAD`, `TABL ZTOAD`, `TRAN ZTOAD`, and `SUSO ZTOAD_AUTH`, then activate. For a structural-only change, select only the intended structural object. Do not export the system-local root package as `package.devc.xml`; if the pull review consequently proposes deleting `DEVC $ZTOAD2`, leave that row unselected. If a broader repository selection is applied accidentally, stop before a second pull and compare every selected object with the exact archive before deciding whether it is safe to keep. Do not accept release-normalized table metadata without a deliberate structural review. After this one-time structural provisioning, deploy source-only candidates directly through ARC-1 and keep all NPL validation UI-free.

Current ARC-1 TABL `dryRun` requests can still create an inactive draft. After any DDIC dry-run or preflight, compare active/inactive object state immediately; never infer non-mutation from the option name or success text. The A4H abapGit ADT backend also uses version-specific staging/pull XML namespaces, so an empty ARC-1 stage result is not proof of a clean repository—verify the raw bridge result or native client before pushing.

## 4. Local-first TDD flow with a stable `master`

Expand Down
78 changes: 78 additions & 0 deletions docs/plans/finished/base-ddic-001-enhancement-category.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# BASE-DDIC-001 enhancement-category plan

_Created: 2026-08-07 · finding: `BASE-DDIC-001` · target branch: `codex/fix-base-ddic-001`_

## Objective

Remove the offline-install warning and persistent table drift by declaring table `ZTOAD` as `#NOT_EXTENSIBLE` and round-tripping the structural metadata through native abapGit.

## Red evidence and test

- `src/ztoad.tabl.xml` has no `DD02V-EXCLASS` element.
- Both live systems report `#NOT_CLASSIFIED`; the NPL offline pull warned that the enhancement category was missing.
- Add a repository contract requiring the native-abapGit value `<EXCLASS>1</EXCLASS>`. Replay it against the current XML and record the intended red failure before changing the table.
- Red replay: `npm run test:repository` exits 1 at the focused `DD02V-EXCLASS 1` assertion; the existing launcher and forbidden-kernel-call assertions are reached first and remain green.

## Implementation

1. Commit and push the red contract plus this reviewed plan so the coordinated native-abapGit branch exists remotely.
2. On A4H, refresh/check the shared repository while it is still on `refs/heads/master`, record all drift, then switch using the full feature ref and verify the selected branch with a fresh read.
3. Change only the active table annotation to `#NOT_EXTENSIBLE` through ARC-1, explicitly activate `TABL ZTOAD`, and confirm its fields and technical properties are unchanged.
4. Refresh native abapGit, stage only `TABL ZTOAD`, review the exact object/file diff, push it to the feature branch, and fetch the resulting serializer commit locally. Never select the package or use **Add All**.
5. Restore the shared A4H repository with the full `refs/heads/master` ref, verify the branch and clean state, and explicitly confirm the intended active master object state after validation.
6. Import/validate the exact serialized table on NPL through the existing offline repository boundary; all validation remains UI-free through ARC-1 after the structural import.

## Required gates

### Local

- red repository-contract replay before SAP change;
- `npm ci`, `npm test`, `git diff --check`;
- serializer diff limited to the expected enhancement-category field;
- complete diff, XML, compatibility, security, and Clean ABAP/Clean Core review.

### NPL / SAP_BASIS 750 first

- real `TABL ZTOAD` activation with no enhancement-category warning;
- active source shows `#NOT_EXTENSIBLE` and all seven fields are unchanged;
- zero inactive ZTOAD parts;
- `PROG ZTOAD` active syntax, all 67 ABAP Unit tests, and complete `DEFAULT` ATC compared with the 88-finding baseline.

### A4H / SAP_BASIS 758

- exact serialized table activation and active category/field verification;
- zero inactive ZTOAD parts;
- active report syntax, all 67 ABAP Unit tests, and recorded ATC variants compared with baseline;
- browser/ST22 is not applicable because runtime source, screens, transaction, and table columns are unchanged.

## Rollback

Restore `TABL ZTOAD` from the reviewed `master` serialization through native abapGit and explicitly activate it. No column conversion or persistent-data migration is involved. Restore the shared repository to `refs/heads/master` even if another gate fails.

## Plan review

- `#NOT_EXTENSIBLE` is the narrow SAP-supported category and does not promise unsupported appends.
- The repository contract checks the exact abapGit representation.
- Structural XML comes only from a native-abapGit round trip.
- The coordinated branch procedure prevents a system-only or master-only structural mutation.
- Live gates cover both supported releases while respecting NPL's no-UI boundary.

## Validation progress

- Red contract commit `fb60eca` failed at the exact missing `EXCLASS 1` assertion.
- Native-abapGit candidate commit `4206a1a`, table XML SHA-256 `0a7b98b6c073e5062c56bfd314dc297ecd88dc0ea685bee643caabc9a76a1f40`.
- Local `npm ci`, `npm test`, and `git diff --check` are green.
- A4H candidate activation/state, 67/67 Unit, syntax, inactive inventory, and recorded ATC gates are green; browser/ST22 remains not applicable.
- A4H is restored to full `refs/heads/master`; current master report and pre-change table are active with no inactive divergence. The known table drift remains visible until this PR merges.
- NPL imported `/tmp/ztoad-base-ddic-001.zip` (SHA-256 `a5c5745c55304e34f334ddb6b1e4ec7c4c3fbde9cf6ce46d01264f963059a4c5`). The maintainer accidentally selected all four repository objects instead of only `TABL ZTOAD`; this was safe because the archive's `PROG ZTOAD` was exact current `master` and `TRAN`/`SUSO` were unchanged. The later `DEVC` deletion proposal was not selected or applied.
- ARC-1 then explicitly activated `TABL ZTOAD` and `PROG ZTOAD`. The table reads as `#NOT_EXTENSIBLE` with the same seven fields, `PROG ZTOAD` syntax has zero errors, all 67 Unit tests pass, `DEFAULT` ATC remains 88 findings (3 P1, 4 P2, 81 P3, including the known time-zone prerequisite finding), and the global inactive inventory contains no ZTOAD part.
- NPL's direct active-table object-state endpoint intermittently returns 404 even though the transparent table is searchable, activated, and readable through ARC-1's automatic version resolution. The compensating evidence is the explicit activation result, active automatic read, inactive-version response stating that no inactive draft exists, exact category/field comparison, and zero ZTOAD entries in the global inactive inventory. This is an ARC-1 adapter finding, not a product gate failure.

## Post-green process audit

- GitHub Actions run `31164462265` checked the merge candidate, installed the pinned dependency set, and passed abaplint with zero issues plus the repository and installation contracts. The external abaplint check also passed.
- The implementation remains limited to the native serializer output and its exact contract; the canonical metadata removals were generated by native abapGit and reviewed field by field rather than accepted as an unexamined XML rewrite.
- Both supported-release gates were performed against the exact serialized candidate. The broader NPL import was compared with the archive before it was accepted, and the dangerous system-local package deletion proposal was not applied.
- The durable workflow improvement is now in `docs/development.md`: structural-only offline pulls select only their intended object, `DEVC $ZTOAD2` deletion remains unselected, and an accidental broad selection requires an exact archive comparison before any further pull.
- The inconsistent NPL table object-state endpoint is recorded separately as `BASE-TOOL-005` and in the ARC-1 integration audit. It is compensated by independent evidence rather than misreported as a passing object-state call.
- No CI workflow change is needed: the existing quality job exercised the new repository contract on the merge commit and produced complete, readable output.
7 changes: 6 additions & 1 deletion docs/research/2026-08-07-arc1-abapgit-integration-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ _Observed 2026-08-06 to 2026-08-07 with ARC-1 1.0.2, A4H SAP_BASIS 758 SP02, nat

## What works

- A4H has the native abapGit ADT bridge installed and usable. Repository discovery, details, status/check, full-ref branch switching, selective staging, and selective push all worked through the bridge.
- A4H has the native abapGit ADT bridge installed and usable. Repository discovery, details, status/check, full-ref branch switching, selective staging, selective push, and pull all work at the bridge protocol level. Several ARC-1 request/parser shapes remain incompatible with this installed backend and required direct calls using the backend's published XML contract.
- Selective staging of `PROG ZTOAD` included only the five intended program serializer files and excluded unrelated `TABL`/`DEVC` drift.
- Native abapGit remained the authoritative complete-object round trip, while ARC-1 was effective for source reads/writes, activation, syntax, Unit, ATC, object state, and inactive-child diagnostics.
- The system is not missing a bridge component. The earlier clone namespace error belongs to the older ARC-1 request shape and should be retested with the current client before retaining it as an active system defect.
Expand All @@ -21,6 +21,9 @@ _Observed 2026-08-06 to 2026-08-07 with ARC-1 1.0.2, A4H SAP_BASIS 758 SP02, nat
8. **Large-source ergonomics should be first class.** Complete report writes require callers to build a temporary JSON payload to avoid stdin `EAGAIN`. Add a `sourceFile`/`--source-file` option that reads locally inside the CLI, reports the source hash, and never logs full source or credentials.
9. **Evidence-friendly output is incomplete.** Return staged object/file inventories, selected full ref, before/after commit IDs, and the exact remote result in stable JSON. This would make selective native-abapGit procedures auditable without scraping log previews.
10. **Published MCP schemas can lag the installed CLI.** The connected SAPGit MCP contract exposed only read actions while the local ARC-1 1.0.2 CLI supported `stage`, `push`, and `switch_branch`; the same skew hid newer diagnostic actions. Publish the running server/client version in discovery, keep action enums generated from one source, and fail with an explicit upgrade/reload instruction instead of forcing callers to discover CLI-only capabilities experimentally.
11. **The installed backend's XML namespaces are not modeled correctly.** Its stage response uses `http://www.sap.com/adt/abapgit/staging`, so ARC-1 returned an empty object list even though raw XML contained `PROG` and `TABL`. ARC-1's push builder emitted a different generic `<objects>` payload, and its pull builder used singular `/repository` instead of the backend-required plural `/repositories` namespace. Version or discover the bridge contract, parse the staging namespace, preserve its staged-object shape, and add integration fixtures for this backend version.
12. **`SAPWrite(dryRun=true)` mutated TABL state.** The call returned “Successfully updated” and created an inactive `TABL ZTOAD` draft. A dry run must never acquire/save a draft; until fixed, callers must compare active/inactive state after every DDIC dry-run request and clean up or deliberately continue only after reviewing the exact draft.
13. **NPL table object-state does not reuse endpoint discovery.** On SAP_BASIS 750, `SAPDiagnose(action="object_state", type="TABL")` requests the active table-source path and returns 404 for the installed transparent table, while `SAPRead(version="auto")`, `SAPRead(version="inactive")`, search, activation, and native abapGit all resolve it. Reuse the same table-versus-structure/version fallback in object-state diagnostics and cover this with a 7.50 integration fixture.

## Safe workflow until those gaps are fixed

Expand All @@ -30,6 +33,8 @@ _Observed 2026-08-06 to 2026-08-07 with ARC-1 1.0.2, A4H SAP_BASIS 758 SP02, nat
4. Stage explicit object selections, review returned filenames, and never use **Add All** with unrelated drift.
5. Treat native abapGit as the complete serializer and ARC-1 source writes as source-only unless the exact child-object closure is independently proven.
6. After activation, require active/inactive main equality plus the global inactive-child inventory for `PROG/P`, `PROG/PCA`, `PROG/PS`, and `PROG/PX`.
7. Treat `dryRun` as untrusted on current TABL writes and verify object state immediately. When the bridge wrapper returns an empty stage for known drift, inspect the raw staging document before taking any push action.
8. On 7.50, if direct table object-state returns 404, do not call the object absent until automatic and inactive-version reads, exact metadata, object search, explicit activation, and the global inactive inventory have been reconciled.

## System-side conclusion

Expand Down
Loading