WIP: Define compatibility ABI values and checked numeric ranges #3

Draft
erikinkinen wants to merge 8 commits from feature/posix-compat into main
Owner

Summary and rationale

Define pure compatibility values, wire codecs, integer C declarations, errno and checked numeric ranges. Add a descriptive file-status base with seven validated file types, identity and owner values, link count, signed size and three canonical timestamps. Its prefixed raw C record occupies 88 bytes with alignment 8.

Tracking and scope

  • ABI design: #1; component audit: #2; native result domain: erix/lib-ipc#2.
  • Signed revision: 2417b283c2a82840ce18cf95eb9ca67d99fa2cc9 on feature/posix-compat.
  • Original dependencies remain lib-ipc 5ff18b2bf62d3103e5b84aa92d1dc1cd096e9725 and lib-fs-name 644e8e156d7eaa406b5b5b882980c3a435756425.
  • Native file operations, complete stat/credential/ACL semantics, XSI additions, runtime consumers and full POSIX compatibility remain open. Dependency pins, wire version and errno assignments are unchanged.

Architecture, authority and failure behavior

The production library denies unsafe code and missing documentation. File identities, owners, modes and times describe facts; they cannot authenticate a caller, find a resource or grant access. A native adapter must establish valid identity, ownership and timestamp facts. Unknown native metadata cannot be filled with plausible zero values or substituted path/open-description identities.

FileModeV1 accepts only seven complete type encodings and the defined permission bits. Type encodings are alternatives, not independent flags. FileOffset::try_from(u64) returns overflow above the signed range without truncation. Raw records retain every integer bit pattern; conversion validates mode and timestamp fractions without normalizing malformed input. All scalar fields retain their declared full-width domains. The record is a partial EriX-prefixed base, not a platform struct stat or a conformance claim.

C and Rust probes transport distinct literal records through arguments, returns and both callback conventions after six scalar arguments. All fields and malformed values remain checked on host and freestanding raw paths. Actual checked conversions run against the library after both host C returns. Freestanding raw links retain the strict named-undefined-symbol gate; they do not claim to supply or execute a complete Rust runtime.

Validation evidence

Rust 1.97.1 formatting, strict Clippy, warning-denied host/freestanding builds and eight private-rustdoc configurations pass. Each default/all-feature debug/release host configuration passes 66 unit tests and three doctests. All 26 Python driver tests pass. Exhaustive low-16-bit mode tests, unknown upper bits, independent arithmetic oracles and scalar boundary cases cover validation and error behavior.

GCC/Clang O0/O2 validation passes four host executions, four freestanding raw links without named undefined symbols, and twelve designated compiler rejections. The complete C result retains 280 actual commands, including 221 original-object reads. All 201 original dependency files and twelve compiled library artifacts correlate with the selected revisions. Accepted compiler, lint and documentation diagnostics contain no warnings.

The initial Markdown line-wrap failure, incorrect selection of a private Git skeleton and unsupported checked-conversion call in a raw freestanding probe remain recorded. Their corrections preserve production code and the strict failure gates. A retained archive-link diagnostic confirmed that whole Rust library objects require additional runtime support; the final tests explicitly separate host conversions from target raw transport. Passed Rust/unit checks were retained; the changed C probes and final documentation checks were validated. Only ROADMAP result prose changed after the final C matrix.

Push CI 13 and PR CI 14 both pass for signed 2417b283c2a82840ce18cf95eb9ca67d99fa2cc9. All four complete logs (101,072 bytes) are correlated with the original workflow and checker sources and contain no compiler/lint warning candidates. Each runtime job passes formatting, strict host/freestanding Clippy and builds, 66 unit tests plus three doctests in each development/release selection, private rustdoc, 26 Python tests and the bounded C ABI checker. Detailed C command/artifact counts remain local evidence; inner CI artifacts were not retrieved. Matching Docs 7ccbe0bfa83ce5942878fb7cf8c57bb1abe75d00 is signed and pushed in Docs PR #4. Its original-source references select ABI 2417b283 and eighteen-function libc bdcbbea, with 161 and twenty API routes respectively. All 44 documentation tests, both API checks and 55 Markdown files pass. The complete 2,339-page manual passes in 154.64 seconds with zero final warnings; all 425,255 word boxes fit and nine actual previews pass visual review. The first render was interrupted by an outer watchdog that could not observe the inner log; its failed statuses and clean cleanup are retained. The corrected outer budget preserves the inner hard/progress limits, and passing API/unit checks were reused. Matching Docs push CI 837 and PR CI 838 both pass for signed 7ccbe0bfa83ce5942878fb7cf8c57bb1abe75d00, ending by 05:58:35 UTC on September 14. All four complete logs total 752,104 bytes and are correlated with the original workflow and build/publish scripts. Each manual job passes 44 tests and finishes at 2,339 pages with zero final-pass warnings; thirty first-pass and one second-pass convergence warnings resolve. Each Markdown job checks 55 files with zero errors. The logged CI PDF size is 4,105,617 bytes; CI artifact bytes and geometry were not independently inspected. Local layout and visual evidence remain separate. This adds no native metadata operation, companion migration or complete guest build result. Earlier push CI 11 and PR CI 12 pass for preceding source af01f597fe8d0b18b0559f395ba1437174be24a5. The accepted byte-extent manual at Docs 0912e7313c0212cd3be6f06fae7d932174ce087a and its passing CI 819/820 remain evidence for that preceding interface. The file-status update is tracked in Docs PR #4.

This checkpoint does not demonstrate a native stat operation or a full EriX build performed within EriX.

Review checklist

  • Original declarations and fixtures; verified signed canonical checkpoint.
  • Exact original dependency identities and unchanged validation lock.
  • Formatting, strict Clippy, unit/doctests, builds and meaningful rustdoc.
  • Independent mode/arithmetic, raw C transport and malformed-input coverage.
  • Canonical component documents; code files below 1,000 physical lines.
  • Current-source push and PR CI.
  • Matching file-status technical-manual/API publication and documentation CI.
  • Complete ABI, runtime consumers, repository audit and phase acceptance.
## Summary and rationale Define pure compatibility values, wire codecs, integer C declarations, errno and checked numeric ranges. Add a descriptive file-status base with seven validated file types, identity and owner values, link count, signed size and three canonical timestamps. Its prefixed raw C record occupies 88 bytes with alignment 8. ## Tracking and scope - ABI design: #1; component audit: #2; native result domain: erix/lib-ipc#2. - Signed revision: `2417b283c2a82840ce18cf95eb9ca67d99fa2cc9` on `feature/posix-compat`. - Original dependencies remain lib-ipc `5ff18b2bf62d3103e5b84aa92d1dc1cd096e9725` and lib-fs-name `644e8e156d7eaa406b5b5b882980c3a435756425`. - Native file operations, complete stat/credential/ACL semantics, XSI additions, runtime consumers and full POSIX compatibility remain open. Dependency pins, wire version and errno assignments are unchanged. ## Architecture, authority and failure behavior The production library denies unsafe code and missing documentation. File identities, owners, modes and times describe facts; they cannot authenticate a caller, find a resource or grant access. A native adapter must establish valid identity, ownership and timestamp facts. Unknown native metadata cannot be filled with plausible zero values or substituted path/open-description identities. `FileModeV1` accepts only seven complete type encodings and the defined permission bits. Type encodings are alternatives, not independent flags. `FileOffset::try_from(u64)` returns overflow above the signed range without truncation. Raw records retain every integer bit pattern; conversion validates mode and timestamp fractions without normalizing malformed input. All scalar fields retain their declared full-width domains. The record is a partial EriX-prefixed base, not a platform `struct stat` or a conformance claim. C and Rust probes transport distinct literal records through arguments, returns and both callback conventions after six scalar arguments. All fields and malformed values remain checked on host and freestanding raw paths. Actual checked conversions run against the library after both host C returns. Freestanding raw links retain the strict named-undefined-symbol gate; they do not claim to supply or execute a complete Rust runtime. ## Validation evidence Rust 1.97.1 formatting, strict Clippy, warning-denied host/freestanding builds and eight private-rustdoc configurations pass. Each default/all-feature debug/release host configuration passes 66 unit tests and three doctests. All 26 Python driver tests pass. Exhaustive low-16-bit mode tests, unknown upper bits, independent arithmetic oracles and scalar boundary cases cover validation and error behavior. GCC/Clang O0/O2 validation passes four host executions, four freestanding raw links without named undefined symbols, and twelve designated compiler rejections. The complete C result retains 280 actual commands, including 221 original-object reads. All 201 original dependency files and twelve compiled library artifacts correlate with the selected revisions. Accepted compiler, lint and documentation diagnostics contain no warnings. The initial Markdown line-wrap failure, incorrect selection of a private Git skeleton and unsupported checked-conversion call in a raw freestanding probe remain recorded. Their corrections preserve production code and the strict failure gates. A retained archive-link diagnostic confirmed that whole Rust library objects require additional runtime support; the final tests explicitly separate host conversions from target raw transport. Passed Rust/unit checks were retained; the changed C probes and final documentation checks were validated. Only ROADMAP result prose changed after the final C matrix. [Push CI 13](https://git.erikinkinen.fi/erix/lib-posixabi/actions/runs/13) and [PR CI 14](https://git.erikinkinen.fi/erix/lib-posixabi/actions/runs/14) both pass for signed `2417b283c2a82840ce18cf95eb9ca67d99fa2cc9`. All four complete logs (101,072 bytes) are correlated with the original workflow and checker sources and contain no compiler/lint warning candidates. Each runtime job passes formatting, strict host/freestanding Clippy and builds, 66 unit tests plus three doctests in each development/release selection, private rustdoc, 26 Python tests and the bounded C ABI checker. Detailed C command/artifact counts remain local evidence; inner CI artifacts were not retrieved. Matching Docs `7ccbe0bfa83ce5942878fb7cf8c57bb1abe75d00` is signed and pushed in [Docs PR #4](https://git.erikinkinen.fi/erix/docs/pulls/4). Its original-source references select ABI 2417b283 and eighteen-function libc bdcbbea, with 161 and twenty API routes respectively. All 44 documentation tests, both API checks and 55 Markdown files pass. The complete 2,339-page manual passes in 154.64 seconds with zero final warnings; all 425,255 word boxes fit and nine actual previews pass visual review. The first render was interrupted by an outer watchdog that could not observe the inner log; its failed statuses and clean cleanup are retained. The corrected outer budget preserves the inner hard/progress limits, and passing API/unit checks were reused. Matching Docs [push CI 837](https://git.erikinkinen.fi/erix/docs/actions/runs/837) and [PR CI 838](https://git.erikinkinen.fi/erix/docs/actions/runs/838) both pass for signed `7ccbe0bfa83ce5942878fb7cf8c57bb1abe75d00`, ending by 05:58:35 UTC on September 14. All four complete logs total 752,104 bytes and are correlated with the original workflow and build/publish scripts. Each manual job passes 44 tests and finishes at 2,339 pages with zero final-pass warnings; thirty first-pass and one second-pass convergence warnings resolve. Each Markdown job checks 55 files with zero errors. The logged CI PDF size is 4,105,617 bytes; CI artifact bytes and geometry were not independently inspected. Local layout and visual evidence remain separate. This adds no native metadata operation, companion migration or complete guest build result. Earlier [push CI 11](https://git.erikinkinen.fi/erix/lib-posixabi/actions/runs/11) and [PR CI 12](https://git.erikinkinen.fi/erix/lib-posixabi/actions/runs/12) pass for preceding source `af01f597fe8d0b18b0559f395ba1437174be24a5`. The accepted byte-extent manual at Docs `0912e7313c0212cd3be6f06fae7d932174ce087a` and its passing [CI 819](https://git.erikinkinen.fi/erix/docs/actions/runs/819)/[820](https://git.erikinkinen.fi/erix/docs/actions/runs/820) remain evidence for that preceding interface. The file-status update is tracked in [Docs PR #4](https://git.erikinkinen.fi/erix/docs/pulls/4). This checkpoint does not demonstrate a native stat operation or a full EriX build performed within EriX. ## Review checklist - [x] Original declarations and fixtures; verified signed canonical checkpoint. - [x] Exact original dependency identities and unchanged validation lock. - [x] Formatting, strict Clippy, unit/doctests, builds and meaningful rustdoc. - [x] Independent mode/arithmetic, raw C transport and malformed-input coverage. - [x] Canonical component documents; code files below 1,000 physical lines. - [x] Current-source push and PR CI. - [x] Matching file-status technical-manual/API publication and documentation CI. - [ ] Complete ABI, runtime consumers, repository audit and phase acceptance.
feat: Define checked compatibility identifiers and query codecs
All checks were successful
CI / markdown (push) Successful in 5s
CI / test (push) Successful in 14s
CI / markdown (pull_request) Successful in 4s
CI / test (pull_request) Successful in 14s
cb08cd72fc
Add a dependency-free no_std crate for descriptive descriptor, process, realm,
generation and request values. Define an original preparatory compatibility
query body with exact little-endian framing, closed discriminators, checked
lengths, deterministic errors and caller-owned encoding that preserves output
on failure. Numeric values and correlation acquire no native authority.

Keep native transport validation, receipt authentication and rejected-transfer
retirement with future adapters. No service route, POSIX errno mapping, complete
C ABI or libc implementation is claimed. Document the wire contract and future
consumer gates, and enforce missing_docs and unsafe-code denial in all crates.

Formatting, strict Clippy, 14 tests and one doctest, warning-denied debug/release
builds and private-item rustdoc pass. Freestanding x86_64-unknown-none checks and
canonical documentation validation pass. Exact-head CI remains required before
consumer pins are admitted.
feat: Define and validate the integer C compatibility boundary
All checks were successful
CI / markdown (pull_request) Successful in 16s
CI / markdown (push) Successful in 17s
CI / test (push) Successful in 3m18s
CI / test (pull_request) Successful in 3m17s
edc4fdca7e
Define prefixed x86_64 LP64 integer C declarations and raw process/open-description identity records separately from checked Rust metadata and wire bytes. Add the missing checked ID domains while preserving explicit field validation, authority-free values, unsafe-code denial and existing codec bytes.

Add original independent GCC/Clang layout and integer-call fixtures, freestanding object/link checks and a bounded explicit-tool validation driver with ownership/failure regressions. The 23 unit tests and one doctest per profile, strict host/freestanding checks, 46-command C matrix, 11 driver tests and documentation checks pass without warnings. This preparatory integer subset exports no C function or runtime route and does not establish complete ABI conformance or guest execution.
erikinkinen changed title from WIP: Define compatibility identifiers and checked query codecs to WIP: Define compatibility codecs and the integer C boundary 2026-09-12 10:57:30 +02:00
feat: Define checked EriX errno integer assignments
All checks were successful
CI / markdown (push) Successful in 26s
CI / markdown (pull_request) Successful in 27s
CI / test (push) Successful in 2m58s
CI / test (pull_request) Successful in 2m59s
c9efd11481
Assign nineteen stable EriX errno integers independently of native status codes and foreign libc numbering. Exact little-endian codecs reject unknown values without truncation and preserve caller buffers on failure; the signed C boundary uses the same literal assignments.

Extend independent Rust and GCC/Clang probes, including deliberate errno-header drift rejection, and select the published Cargo source helper. Formatting, strict Clippy, host and freestanding builds, rustdoc, 28 tests and a doctest pass without warnings. Contextual native completion mapping and runtime errno remain subsequent work.
erikinkinen changed title from WIP: Define compatibility codecs and the integer C boundary to WIP: Define compatibility codecs, C integers and checked errno values 2026-09-12 12:00:34 +02:00
feat: Classify native completions with explicit operation context
All checks were successful
CI / markdown (push) Successful in 21s
CI / markdown (pull_request) Successful in 21s
CI / test (push) Successful in 4m25s
CI / test (pull_request) Successful in 4m25s
79a3b02cac
Preserve native result identity, pending transport state and independent effect
and cleanup uncertainty before admitting finite operation-specific errno causes.
Add checked full-width committed-byte progress without acquiring authority or
claiming a runtime adapter. Keep wire and C-header assignments unchanged.

Pin the shared IPC result domain and build direct C probes from verified original
dependency objects under bounded owned processes. Document the assertion limits
and test route contradictions, initialization ambiguity, partial progress and
source/probe failure boundaries. Strict Rust, Python and C checks pass; runtime
adapters, complete error mapping and guest validation remain separate work.
erikinkinen changed title from WIP: Define compatibility codecs, C integers and checked errno values to WIP: Define compatibility codecs and contextual native completion rules 2026-09-12 12:49:01 +02:00
feat: Add checked signed file and time arithmetic
All checks were successful
CI / markdown (pull_request) Successful in 10s
CI / markdown (push) Successful in 10s
CI / test (pull_request) Successful in 3m32s
CI / test (push) Successful in 3m32s
2ce268816e
Define full-range file offsets and seconds with canonical timespec arithmetic
that validates overflow after fractional normalization. Add matching raw LP64
C records and independent signed boundary, call and callback probes without
introducing resource access, operation policy or implicit errno conversion.

Default/all-feature debug/release host and freestanding strict checks pass,
with 48 unit tests and two doctests per host configuration. GCC/Clang probes
cover four host executions, four freestanding links and ten expected rejections.
Keep complete pointer, native-operation and runtime integration work open.
erikinkinen changed title from WIP: Define compatibility codecs and contextual native completion rules to WIP: Define checked compatibility ABI and file/time arithmetic 2026-09-12 16:49:48 +02:00
feat: Add checked numeric byte extents
All checks were successful
CI / markdown (push) Successful in 18s
CI / markdown (pull_request) Successful in 18s
CI / test (pull_request) Successful in 3m50s
CI / test (push) Successful in 3m50s
af01f597fe
Preserve unsigned address and byte-count metadata through the mathematical
endpoint 2^64 without manufacturing pointer, mapping or access authority.
Provide fieldwise raw LP64 C conversion and independently check arithmetic,
layout, register arguments and stack callbacks, including overflowing raw data.

All 35 strict local checks pass: four host configurations each run 55 unit
tests and three doctests, with host/freestanding builds, Clippy and private
rustdoc. GCC/Clang O0/O2 execution and link checks, ten negative controls and
26 validation-driver tests pass without warnings. Runtime pointer intake and
complete POSIX compatibility remain separate work.
erikinkinen changed title from WIP: Define checked compatibility ABI and file/time arithmetic to WIP: Define compatibility ABI values and checked numeric ranges 2026-09-12 19:16:06 +02:00
feat: Add checked file status and raw C aggregate
All checks were successful
CI / markdown (pull_request) Successful in 2s
CI / markdown (push) Successful in 2s
CI / test (push) Successful in 1m22s
CI / test (pull_request) Successful in 1m22s
2417b283c2
Define seven validated file types, descriptive identity and timestamp fields,
checked unsigned size narrowing, and the matching 88-byte LP64 C record.
Preserve the distinction between representable metadata and authenticated
native facts; no file operation, authority, dependency or wire change is added.

Validate full mode domains and boundary values with independent Rust tests
and C/Rust argument, return and callback probes. Rust 1.97.1 formatting, strict Clippy, host/freestanding builds and
rustdoc pass. Each of four host configurations passes 66 units and three
doctests; 26 driver tests, four C/Rust host programs, four freestanding raw
links and twelve intended compiler rejections pass. Final documentation
checks are warning-free. Retain corrected setup/probe failures; native
file operations, matching manual updates and new-source CI remain open.
build: Align acknowledged terminal accounting dependencies
All checks were successful
CI / markdown (push) Successful in 10s
CI / markdown (pull_request) Successful in 10s
CI / test (push) Successful in 3m19s
CI / test (pull_request) Successful in 3m21s
d5616f1fcc
Select original signed shared revisions for coherent service-consumer adoption
of retained CPU evidence and exact terminal acknowledgement. Preserve the local
API and capability policy without duplicate shared source revisions.

Four strict host and native configurations, private rustdoc, formatting,
Markdown and dependency checks pass without warnings. Consumer adoption and
full service acceptance remain open under Kernel #20.
All checks were successful
CI / markdown (push) Successful in 10s
CI / markdown (pull_request) Successful in 10s
CI / test (push) Successful in 3m19s
CI / test (pull_request) Successful in 3m21s
This pull request is marked as a work in progress.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feature/posix-compat:feature/posix-compat
git switch feature/posix-compat

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff feature/posix-compat
git switch feature/posix-compat
git rebase main
git switch main
git merge --ff-only feature/posix-compat
git switch feature/posix-compat
git rebase main
git switch main
git merge --no-ff feature/posix-compat
git switch main
git merge --squash feature/posix-compat
git switch main
git merge --ff-only feature/posix-compat
git switch main
git merge feature/posix-compat
git push origin main
Sign in to join this conversation.
No description provided.