Repository navigation
The usual odds and ends - #200
Merged
Merged
Conversation
`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
temporarily deployed
to
github-pages
November 6, 2026 23:18 — with
GitHub Actions
Inactive
This branch was previously deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.