Skip to content

Add: TMR kernel-mode resource contracts and init admission(2a) - #2177

Open
Leaf-Salix wants to merge 4 commits into
hw-native-sys:mainfrom
Leaf-Salix:dev/kernel-pr2a-tmr
Open

Add: TMR kernel-mode resource contracts and init admission(2a)#2177
Leaf-Salix wants to merge 4 commits into
hw-native-sys:mainfrom
Leaf-Salix:dev/kernel-pr2a-tmr

Conversation

@Leaf-Salix

Copy link
Copy Markdown
Contributor

Depends on #2064 — keep this PR in Draft. Do not merge it until #2064 has merged.

Based on #2064 at dc1268cd55405fc56137eb16d04227ea797a419f. This PR adds two commits: 48e37b3b and 2153406a. While the diff against main still includes K1, please review these two commits as the incremental changes. Once #2064 merges, this branch will be aligned with the merged baseline and revalidated.

Motivation

Supporting L2 kernel mode in TMR (tensormap_and_ringbuffer) requires separating resource requirements from resource allocation, mutable execution state, and task execution. Requirements must be computable and validatable before execution, without invoking the existing program bind path just to discover sizes: no tensor staging, device allocation, or runtime image upload.

This PR connects real resource sizing → shared validation → admission in the production kernel init entry:

CallConfig.runtime_env
  → TMR configuration parsing and reserve-only sizing/layout
  → PipelineContract
  → TMR resource-set validation + shared structure/topology validation
  → simpler_kernel_mode_init
  → UNSUPPORTED (kernel execution remains disabled)

This is not a kernel executor implementation. simpler_kernel_mode_supported() still returns 0, and valid init still returns PTO_RUNTIME_ERR_UNSUPPORTED. No kernel resources are established, and no context becomes capable of kernel execution.

Resource contract and admission

Runtime producers calculate the requirements

An internal hook is declared in src/common/platform/include/host/kernel_pipeline_contract.h:

extern "C" int build_kernel_pipeline_contract_impl(
    const CallConfig *config, PipelineContract *out);
  • The a2a3 and a5 TMR host/runtime_maker.cpp implementations reuse existing configuration parsing, size formulas, and their architecture-specific runtime_reserve_layout().
  • The hook reserves layout only: no commit, runtime image construction, or HostApi calls. It does not enter program bind, tensor staging, or cache paths.
  • Both HBG makers provide an UNSUPPORTED stub with the same signature so the shared C API links in every variant. HBG kernel sizing is not implemented by this PR.
  • No public query API is added. The existing get_pipeline_contract(void) signature and its read-only program declaration are unchanged.

The TMR kernel declaration is below. The existing program declaration and depth of 2 are unchanged.

Item TMR kernel declaration
Pipeline depth 1
GM_HEAP DEVICE_SCRATCH, nonzero required usable bytes derived from sizing
GM_SM DEVICE_SCRATCH, nonzero required usable bytes derived from sizing
RUNTIME_IMAGE DEVICE_SCRATCH, nonzero required usable bytes derived from layout
TASK_ARGS HOST_PER_RUN, bytes_per_copy = 0
AICPU_STREAM / AICORE_STREAM Each declared once, EXEC_HANDLE, bytes_per_copy = 0

Zero bytes for TASK_ARGS means this field does not express an argument-size limit, not that arguments consume no memory. The three arena sizes describe required usable bytes per copy, not total committed HBM, capacity budgets, or callable residency budgets. Stream entries declare execution roles; copy counts derived by the helper do not prescribe the number of physical streams to create.

Shared admission without coupling runtime-specific policies

src/common/worker/pipeline_contract.h retains the single-argument program validator and adds explicit-mode validation, stream serviceability checks, and a separately named TMR completeness helper.

  • Structure, resource count, mode, kind/class ranges, and byte rules are checked before topology is inspected.
  • Shared serviceability checks validate arena topology and require exactly one declaration of each stream role with the correct class.
  • is_valid_tmr_kernel_pipeline_contract() checks TMR's six resource kinds, their classes, and depth 1. It is called by the TMR builder. Shared init neither imposes this complete resource set on HBG nor branches on runtime names.
  • The sim and onboard simpler_kernel_mode_init() entries invoke the builder and shared admission after K1's basic argument checks. Invalid TMR configurations/contracts return INTERNAL; successful admission still ends at UNSUPPORTED. C++ exceptions are translated to INTERNAL at this C API boundary.

Of K1's kernel-mode definitions, the shared contract depends only on the execution-mode definition, not the K9 invocation layout, kernel lifecycle state objects, or execution operation tables. New tests enforce this include boundary. This PR does not duplicate or redefine the K1 state machine.

Lifecycle and program-path impact

Lifetime and concurrency: The builder borrows config only for the duration of the call. Sizing, the temporary arena, and the candidate contract are call-local; no config pointer is retained and no mutable global/TLS cache is introduced. The caller-exclusive out is assigned once, at the end of a successful call; failure leaves it unchanged. Independent calls may run concurrently. Sharing an output or concurrently modifying inputs or process environment variables is unsupported. Existing cold-path logging is retained; zero host allocation is not promised.

Boundary safety: Packed configuration fields retain their existing memcpy reads. Ring ranges, the INT32_MAX bound on the total window, heap sums, and necessary size/alignment bounds are checked before layout calculation, preventing invalid configurations from reaching assertion or truncation paths.

Program-path impact: ChipWorker::init() only gains a stream declaration serviceability check, rejecting invalid declarations before context creation. Existing valid program contracts, depth, resource setup, and execution paths are preserved. Declarations that violate the new stream admission rules fail earlier. Public C ABI function signatures and struct layouts are unchanged.

Left to follow-up PRs: Stream/event creation and capture integration; arena capacity establishment, commit, and rollback; argument snapshots; device dispatch; ACLGraph capture/replay; and callable residency/generation management. Neither depth 1 nor the builder concurrency tests establish safety for device execution, replay, or close races. Validating requirements does not guarantee that device capacity is available.

Tests

Validation corresponds to the final version, 2153406a. The results below distinguish committed tests, inherited baseline regression tests, and supplemental checks. They are not a claim that the full CI matrix has passed.

Coverage added or extended in this PR

  • tests/ut/cpp/hierarchical/test_pipeline_contract.cpp: Mode/byte rules, TMR's six resource kinds and depth, missing/duplicate/misclassified streams, structural validity versus serviceability, and shared admission that does not impose TMR's resource set on HBG.
  • tests/ut/cpp/common/test_trb_runtime_temp_buffer.cpp (both architecture-specific maker targets): Default and explicit configurations, genuinely unaligned packed input, invalid rings, window/heap/alignment overflow, and unchanged output on failure. Small-configuration requirements are compared with actual bind requests. Large configurations reserve layout without device allocation. Four threads use independent config/output pairs, each making 32 calls and comparing results.
  • tests/ut/cpp/hierarchical/test_pipeline_contract_loader.cpp: A fixture runtime SO with official function signatures exercises the real ChipWorker loader. Invalid stream declarations cause zero context factory calls; a valid declaration reaches the factory, where a sentinel failure proves that admission was passed. Four real sim runtimes are also loaded to check invalid TMR init returning INTERNAL, valid init/HBG stubs returning UNSUPPORTED, supported/committed remaining zero, and launch remaining rejected.
  • tests/ut/py/test_host_runtime_abi.py: Standalone and cross-order inclusion of execution-mode and invocation headers under C11/C++17, plus dependency isolation between the shared contract and K9/lifecycle headers. Existing export checks for all eight components are retained.

Executed results

Validation Result and scope
Targeted C++ UT 7/7 CTest targets, 92 cases passed: contract 27, loader/real sim entry 3, K1 entry validation 5, K1 execution state 24, K1 wire 3, and 15 per architecture-specific maker target. This includes inherited tests, not 92 newly added tests.
Python ABI 13 passed, 4 skipped. Default platform filtering skipped the four onboard parameterizations; these are not counted as passes.
Eight-component symbol matrix The existing export test was additionally invoked explicitly for a2a3/a5 × sim/onboard × TMR/HBG: 8/8 passed. This validates exports, not device execution.
Program sim smoke TMR/HBG vector on both a2a3sim and a5sim: 4 passed.
A3 onboard host admission probe 20 assertions passed against real TMR/HBG onboard SOs: basic argument rejection, invalid TMR rings, valid init/HBG returning unsupported, supported/committed remaining zero, launch rejection, and repeated init. This supplemental probe uses official headers; it is not included in this PR and does not execute a device kernel.
A3 onboard program smoke TMR/HBG vector: 2 passed.
A3 onboard L2 program regression 98 passed, 1 skipped, 208 deselected, 273.74 seconds, exit code 0. Coverage includes TMR/HBG, pipeline slots, prepared callables, stream reuse, concurrent prepare, and the DFX cases selected by default.
Build and lint Rebuilds succeeded with an explicit ccache configuration and four-way build parallelism. All applicable incremental pre-commit hooks passed for the three files changed by the ABI adaptation commit.

The A3 hardware environment used Ascend910_9392, CANN 9.0.0, and the repository-pinned PTO-ISA version. Hardware tests ran under an exclusive single-device lock. The source tree used for UT/sim validation matched the final commit's contents; before onboard validation, the checkout was advanced to that commit and verified clean.

The only L2 regression skip was TestPreparedCallableHbg::test_failed_double_prepare_closes_unpublished_host_handle: the test explicitly validates the unpublished host dlopen guard only on sim. The 208 deselected cases are not counted as passes. Standalone vector smoke and the L2 regression may overlap, so their counts are not summed as unique test cases.

Main reproduction commands, from the repository root after installation and UT target builds following the repository testing guide:

ctest --test-dir tests/ut/cpp/build --output-on-failure -V \
  -R '^(test_pipeline_contract|test_pipeline_contract_loader|test_kernel_entry_validation|test_kernel_execution_state|test_kernel_invocation_header|test_trb_runtime_temp_buffer|test_a5_trb_runtime_temp_buffer)$'

python -m pytest tests/ut/py/test_host_runtime_abi.py -v --forked

# Run under an exclusive device lock; TASK_DEVICE is assigned by the queue.
python -m pytest examples tests/st -m 'not sdma' --level 2 \
  --platform a2a3 --device "$TASK_DEVICE" --max-parallel 1 \
  --pto-session-timeout 1200 --require-pto-isa -v --forked

Not validated or not implemented: A5 hardware, the full UT/ST suites, manual/SDMA-specific suites, multi-device execution, L3/L4 full-network integration, actual kernel launch/capture/replay, and subsequent capacity establishment/rollback. Passing program regression tests does not imply that kernel mode supports those execution capabilities.

Commits

Two separate commits are retained on top of #2064:

  1. 48e37b3bAdd: declare and validate TMR kernel resource requirements: Resource sizing, shared validation, production entry admission, and tests.
  2. 2153406aUpdate: align resource contract dependencies with kernel ABI: Use K1's single execution-mode definition, remove 2a's additional coupling to a specific K9 layout, and strengthen the shared contract's dependency-isolation test.

Merge order: #2064 → this PR (2a). This PR neither replaces K1 nor implements HBG sizing (2b) or the subsequent kernel execution modules.

中文总结

  • 合并依赖: 基于 Add: kernel-mode C ABI skeleton and wire headers (K1) #2064dc1268cd,新增 48e37b3b2153406a 两个 commit;必须等 Add: kernel-mode C ABI skeleton and wire headers (K1) #2064 合并后再合并本 PR。
  • 交付内容: 双架构 TMR 的真实资源 sizing、PipelineContract 声明与校验,以及 sim/onboard 真实 kernel init 准入;不是 kernel 执行实现,supported 仍为 0,合法 init 仍返回 UNSUPPORTED
  • 解耦边界: 复用配置解析与 reserve-only layout,不进入 program bind/staging/分配路径;公共准入与 runtime 专属资源组合分开,HBG 仅提供 unsupported 桩,后续由 2b 实现。
  • 生命周期: builder 不保留输入指针或共享可变缓存,失败不改输出;独立调用可并发,但不据此宣称已解决设备执行、replay 或 close 竞态。原 program depth 2 保持不变,TMR kernel 声明 depth 1
  • 内存口径: 三 arena 的 required bytes 不是完整 HBM 占用或 callable 预算;TASK_ARGS = 0 不表示参数不占内存。实际定容、分配、回滚及 callable 管理由后续 PR 负责。
  • 验证结果: 定向 C++ 92 cases 通过,Python ABI 13 passed/4 skipped,八构件符号检查通过,双架构 sim smoke 4 passed;A3 onboard 准入 20 项断言通过、program smoke 2 passed、L2 回归 98 passed/1 skipped/208 deselected。额外 onboard probe 不在本 PR 内;未验证 A5 真机,也未实现或验证真实 kernel launch/ACLGraph。

@Leaf-Salix
Leaf-Salix marked this pull request as draft September 9, 2026 09:32
@coderabbitai

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: df7e8c93-0312-495b-8152-098c5d2e7eaa

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 1f2c056d-0dad-4ce3-9968-d1b76a138a39

📥 Commits

Reviewing files that changed from the base of the PR and between a1aa7fd and 2153406.

📒 Files selected for processing (44)
  • docs/dynamic-linking.md
  • docs/user/reference/python-api.md
  • python/bindings/task_interface.cpp
  • src/a2a3/platform/onboard/host/CMakeLists.txt
  • src/a2a3/platform/onboard/host/device_runner.cpp
  • src/a2a3/platform/sim/host/CMakeLists.txt
  • src/a2a3/runtime/host_build_graph/host/runtime_maker.cpp
  • src/a2a3/runtime/tensormap_and_ringbuffer/host/runtime_maker.cpp
  • src/a5/platform/onboard/host/CMakeLists.txt
  • src/a5/platform/onboard/host/device_runner.cpp
  • src/a5/platform/sim/host/CMakeLists.txt
  • src/a5/runtime/host_build_graph/host/runtime_maker.cpp
  • src/a5/runtime/tensormap_and_ringbuffer/host/runtime_maker.cpp
  • src/common/platform/include/host/execution_mode_latch.h
  • src/common/platform/include/host/kernel_entry_validation.h
  • src/common/platform/include/host/kernel_execution_state.h
  • src/common/platform/include/host/kernel_pipeline_contract.h
  • src/common/platform/onboard/host/c_api_shared.cpp
  • src/common/platform/onboard/host/device_runner_base.cpp
  • src/common/platform/onboard/host/device_runner_base.h
  • src/common/platform/shared/host/kernel_execution_state.cpp
  • src/common/platform/sim/host/c_api_shared.cpp
  • src/common/platform/sim/host/device_runner_base.cpp
  • src/common/platform/sim/host/device_runner_base.h
  • src/common/task_interface/callable.h
  • src/common/task_interface/execution_mode.h
  • src/common/task_interface/kernel_invocation_header.h
  • src/common/worker/chip_worker.cpp
  • src/common/worker/chip_worker.h
  • src/common/worker/pipeline_contract.h
  • src/common/worker/runtime_c_api.h
  • tests/ut/cpp/CMakeLists.txt
  • tests/ut/cpp/common/test_kernel_entry_validation.cpp
  • tests/ut/cpp/common/test_kernel_execution_state.cpp
  • tests/ut/cpp/common/test_trb_runtime_temp_buffer.cpp
  • tests/ut/cpp/hierarchical/test_pipeline_contract.cpp
  • tests/ut/cpp/hierarchical/test_pipeline_contract_loader.cpp
  • tests/ut/cpp/stubs/pipeline_contract_runtime.cpp
  • tests/ut/cpp/types/test_callable_scalar_count.cpp
  • tests/ut/cpp/types/test_chip_callable_upload_immutable.cpp
  • tests/ut/cpp/types/test_chip_max_tensor_args.cpp
  • tests/ut/cpp/types/test_kernel_invocation_header.cpp
  • tests/ut/py/test_host_runtime_abi.py
  • tests/ut/py/test_task_interface.py

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The change adds kernel-mode runtime contracts, lifecycle state, borrowed-device handling, pipeline admission, ABI exports, callable scalar-count metadata, and validation tests across onboard and simulated host runtimes.

Changes

Kernel mode and callable metadata

Layer / File(s) Summary
Contracts and wire metadata
src/common/task_interface/..., src/common/worker/..., src/common/platform/include/host/..., python/bindings/task_interface.cpp, docs/user/reference/python-api.md
Adds execution-mode and kernel-invocation contracts. Adds kernel entry validation and pipeline admission rules. Adds ChipCallable.scalar_count with validation and legacy zero semantics.
Kernel state and borrowed device lifecycle
src/common/platform/shared/host/kernel_execution_state.cpp, src/common/platform/onboard/host/..., src/common/platform/sim/host/..., src/a2a3/platform/..., src/a5/platform/...
Adds the kernel execution state machine. Separates thread binding, program attachment, and borrowed-device adoption. Kernel mode skips ACL setup, device reset, and committed-arena growth or release.
Pipeline contract construction and admission
src/a2a3/runtime/..., src/a5/runtime/..., src/common/worker/pipeline_contract.h, tests/ut/cpp/common/test_trb_runtime_temp_buffer.cpp, tests/ut/cpp/hierarchical/test_pipeline_contract.cpp
Builds validated contracts from ring sizing for supported runtimes. Graph runtimes return unsupported. Tests cover sizing, overflow, immutability, concurrency, and topology rules.
Runtime ABI and kernel entry integration
src/common/platform/.../c_api_shared.cpp, src/common/worker/chip_worker.*, src/common/worker/runtime_c_api.h, tests/ut/cpp/hierarchical/test_pipeline_contract_loader.cpp, tests/ut/py/test_host_runtime_abi.py
Exports and resolves the four kernel-mode lifecycle symbols. Adds validation stubs and clears function pointers during rollback and finalization.
Validation and compatibility tests
tests/ut/cpp/common/..., tests/ut/cpp/types/..., tests/ut/py/test_task_interface.py
Tests kernel argument validation, execution-state transitions, callable scalar-count wire compatibility, invocation-header layout, and legacy callable behavior.

Priority: ➖ Normal

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant ChipWorker
  participant host_runtime
  participant KernelExecutionState
  participant PipelineContract
  Client->>ChipWorker: initialize runtime
  ChipWorker->>host_runtime: resolve kernel lifecycle symbols
  Client->>host_runtime: simpler_kernel_mode_init
  host_runtime->>PipelineContract: validate kernel contract
  host_runtime->>KernelExecutionState: initialize borrowed context
  KernelExecutionState-->>host_runtime: lifecycle state
  host_runtime-->>Client: initialization result
Loading

Merge Risk: ⚪ Minimal · up to 21534

Kernel-mode initialization remains unsupported and does not establish kernel-mode state, so the reviewed guard paths do not affect current runtime behavior.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 13.81% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 210 functions across 37 files. (7 skipped… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main changes: TMR kernel-mode resource contracts and initialization admission.
Description check ✅ Passed The description is detailed and directly explains the resource sizing, contract validation, initialization admission, limitations, dependencies, and test results.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 13.81% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 210 functions across 37 files. (7 skipped: 7 unsupported.)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit checks the kernels bright,
And counts each scalar just right.
Streams line up, states softly flow,
Borrowed devices stay below.
Tests hop clean through every gate,
While old callables keep their state.

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2153406a04

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/common/platform/onboard/host/device_runner_base.cpp
sunkaixuan2018 and others added 4 commits September 11, 2026 15:25
Kernel mode borrows the caller's device and stream for a bounded
asynchronous operator. Define its C ABI, invocation envelope, and
lifecycle contracts without enabling kernel execution in any backend.

- Add the four simpler_kernel_mode entries, validating unsupported
  stubs, and distinct invalid-argument and invalid-state errors.
- Latch the execution identity once. Program init latches PROGRAM
  before side effects; errors and finalization cannot change the mode.
  Separate thread binding, program attachment, and borrowed-device
  adoption, and guard the onboard device lifecycle by that identity.
- Latch PROGRAM in ensure_acl_ready before its first ACL call. The
  entry is reachable without simpler_init, so taking ACL ownership is
  itself what makes a context a program context; leaving it unlatched
  would let a later kernel latch coexist with acl_ready_, whose
  finalize resets a device the context does not own.
- Decide a kernel-mode arena capacity refusal across every region
  before touching any of them. The commit sequence rolls all regions
  back on failure, so a refusal raised from inside it would release
  the committed bases a captured graph still names.
- Pin the 40-byte invocation header and every field offset. Make its
  trailing reserved bytes explicit and require both reserved fields
  to be zero. Payload validation belongs to the AICPU consumer.
- Derive scalar counts from the callable signature. Preserve the
  existing factory signatures and serialized layout, with fixed
  callable offsets and tests that ignore historical padding bytes.
- Require the kernel capability probe when loading a runtime. Resolve
  its lifecycle entries only for a supported context and publish the
  pointers after initialization succeeds.
- Provide the kernel phase/cleanup state machine and restricted,
  non-throwing operation tables, compiled in its unit test until
  production integration. Keep stream/event handles encapsulated.
- Cover wire bytes, scalar counts, error contracts, cleanup retries,
  arena refusal over real committed regions, and shared-library
  capability negotiation including failed-init recovery. Keep
  uniform-export checks for all eight components.

Kernel init remains unsupported, so no production call latches KERNEL.
Production integration must supply generation checks, safe enqueue/close
serialization, and graph-resource lifetime enforcement.
Compute TMR kernel arena requirements from the existing per-architecture
sizing and reserve-only layout without acquiring device resources.
Keep candidates call-local and publish output only on success.

Share mode-aware contract and topology validation while keeping the TMR
resource set explicit. Preserve valid program behavior and reject
unserviceable stream declarations before context creation.

Define execution modes in a neutral header shared with the unchanged
invocation envelope. Connect the internal builder to validating kernel
init stubs; HBG remains unsupported and kernel execution stays disabled.

Cover sizing bounds, packed input, independent concurrent calls, real
loader admission, sim entry behavior, and C/C++ header compatibility.
Relevant tests and sim partitions pass. Full CTest retains the existing
profiler quiesce failure (139/140); onboard validation remains pending.
Use the upstream execution-mode header as the single definition.
Keep resource contracts independent of kernel lifecycle and invocation
headers, and verify that boundary through compiler dependencies.

Leave invocation layout ownership and its original wire tests with K1;
remove the resource-contract test that additionally pins wire offsets.
TMR sizing, resource validation, and init preflight remain unchanged.
Classify invalid TMR sizing input as INVALID_ARGUMENT while retaining
INTERNAL for producer invariants and an invalid output pointer.
Update entry tests to the shared kernel ABI error contract.
Give capability-loader fixtures valid execution-stream declarations
without weakening admission or retry assertions.
@Leaf-Salix
Leaf-Salix marked this pull request as ready for review September 11, 2026 09:29
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants