Skip to content

The usual odds and ends - #200

Merged
vinniefalco merged 6 commits into
cppalliance:masterfrom
vinniefalco:master
Nov 6, 2026
Merged

vinniefalco merged 6 commits into
cppalliance:masterfrom
vinniefalco:master

Conversation

@vinniefalco

Copy link
Copy Markdown
Member

No description provided.

`PathReason` no longer parses a tag back from text, so `VfsError` is the only error type in `runvil-vfs`. `error-reason.rs` loses the `FromStr` implementation, `ParsePathReasonError`, `from_tag`, and `ALL`, and the `runvil::vfs` facade loses the re-export. `PathReason::tag` does not change, so a store error value still holds the tag in its `rule` field.

- `AGENTS.md` now names `VfsError` as the only exception to the rule that Engine and Harness crates report failures as the universal `Error`.
- `every_path_reason_has_its_own_stable_tag` replaces the two parse tests. It pins each tag string and checks that no two reasons share a tag, which the round-trip test checked before.
An `Access` no longer gives authority over its scope. Only `VfsRef::acquire_scope` returns a `ScopeHandle`, and the operations that fork, join, and end identities, derive store views, and end the scope are its methods. The Engine takes the run's handle from its root acquisition and passes it through `ChainOps` and `SectionVmSetup` to `install_engine_globals`.

- `ScopeHandle::spawn`, `ScopeHandle::store_view`, and `ScopeHandle::probe_store` assert that the `Access` belongs to the handle's scope and panic otherwise. Each has `#[track_caller]` and a `# Panics` section.
- `ScopeHandle::join` and `ScopeHandle::end_access` take `ExecId` values and act only on identities in the handle's own scope, so they never panic.
- `install_engine_globals` takes the handle and derives the store view once. The Lua VM keeps the view and not the handle.
- `Access::id` becomes public, and the `runvil::vfs` facade re-exports `ScopeHandle`.
- The test hook that dispatches a store call through a store-less access now installs that access's own handle, because the run's handle refuses an access from another scope.
- The new spawn documentation states that a refused acquire still advances the parent's own clock entry. The removed `access_spawn` documentation said the clock stayed untouched.
- Four new tests pin the panics on a foreign access and show that another scope's `join`, `end_access`, and `end` change nothing.
- The probe-chain test hooks still acquire their chain's access outside the run's scope.
The compile-time 500-line file limit does not measure structure, and it caused splits whose only purpose was to fit the limit. This change deletes the `build-ceiling` crate, the 33 build scripts that only called `build_ceiling::check()`, and each `build-ceiling` entry in the manifests, `Cargo.lock`, and `vibelight.toml`. It also removes the call from three other build scripts and deletes `tidy-wiring.rs`, whose check required the call in each crate's `build.rs`.

- This change does not merge split files back. `observation.rs` and the `__impl_tasks.lua` and `__impl_fanout.lua` chunks stay separate, and the comments on them no longer give the limit as the reason.
- `desktop/build.rs`, `gateway/build.rs`, and `server/build.rs` keep their other work but no longer print `cargo::rerun-if-changed` for their crate's source trees. `desktop/build.rs` still watches `RUNVIL_GATEWAY_SIDECAR` and the sidecar marker, and `gateway/build.rs` still watches `gateway-pin/pin.json`, so both rerun less often.
- `scaffold` now writes no `build.rs` and no `[build-dependencies]` table. The test `scaffold_writes_no_build_script` replaces the old build-script test and asserts both.
- This change adds no other size check to replace the removed one.
This commit writes the function size limits into the clippy configuration, so that a reader can see the size rule there. A new comment gives the rule: size limits are on functions and types, and a file has no length limit. The root `clippy.toml` and the three Engine files under `crates/` each get the comment, `too-many-lines-threshold = 100`, and `too-many-arguments-threshold = 7`.

- Clippy does not merge an Engine crate's `clippy.toml` with the root file, so each Engine file repeats the two root settings. The three Engine files stay byte-identical, and a `build-xtask` test checks that each one contains every root entry.
- Both values are clippy's defaults, so the lint results do not change.
- The new comment names a `build-xtask` type-size check. This commit does not add that check.
A type can spread its methods over any number of files, so this change puts size limits on types, not files. The `type_size` check fails a type with more than `MAX_METHODS` (25) inherent methods in its crate, or a struct with more than `MAX_FIELDS` (12) named fields. `ALLOWED` lifts a limit for listed types, and both `tidy.rs` and an inline `#[test]` run the check.

- The two bounds keep `ALLOWED` short: it holds 12 entries across five crates.
- The check sums methods by crate and by the last path segment of the `impl` self type, so the typestate impls of `SectionVm` merge into one count. The same rule sums two types of one name in one crate, and the syntax-only scan does not see an `impl` that a macro expands to.
- Each `Allowed` entry stores a ceiling in `recorded`, not an exact count, so a type can shrink without an edit to `ALLOWED`. The type fails one past `recorded`, and the entry fails when its `reason` is blank or its type is gone or back within the limit.
- The scan finds test code by file name and by `cfg`, not by a walk of the module tree, to keep it simple. As a result, it still reads a test-support file that only a gated `mod` line reaches, which gives the test-only `Scenario` its entry.
- The check skips any item behind a `cfg` that names `test` outside `not(...)`. So it skips an item behind `cfg(any(test, feature = "..."))`, although a build with that feature compiles it.
- The check reports an unreadable or unparseable file as a violation and does not skip it, and a scan that reads no `.rs` file fails. The scan also reads the crates in `walk.unread`, whose manifest the shared walk could not read.
- No fixture test covers an unreadable source file or a struct behind its own test `cfg`.
The agent rules now limit the size of functions and types, not files: callers depend on what a type does, not on its file. A new Structural Rules bullet gives the limits and allows a file split only for a second unrelated concept. New unit tests go in a `#[cfg(test)] mod tests` block in the file under test, and the Verification bullet for `cargo test -p build-xtask` lists the type-size limits.

- A new entry in the allowlist in `crates/build-xtask/src/type_size.rs` is a decision made in advance with a reason, never a way to make a change pass. The fix for an oversized type is a split by responsibility.
- Existing unit-test files (`foo-tests.rs`, `foo/tests.rs`) stay as they are, so the rule change moves no file.
- The commit changes prose only. The new text says every `clippy.toml` sets the function limits and `cargo test -p build-xtask` enforces the type-size limits, but this commit changes neither.
@vinniefalco
vinniefalco merged commit e228e26 into cppalliance:master Nov 6, 2026
14 checks passed

This branch was previously deployed

1 inactive deployment
github-pages — e228e269 Deployed Nov 6, 2026 by vinniefalco via deploy #167
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.

1 participant