diff --git a/.agents/conventions.md b/.agents/conventions.md index f4bcecd..db19485 100644 --- a/.agents/conventions.md +++ b/.agents/conventions.md @@ -5,5 +5,5 @@ discovery and implementation in private modules under `src/`. - Keep task names under `agent:context` and link this crate from the private `bake/` executable. - Keep package usage, provider instructions, and the language-agnostic specification in `context/`. -- Keep release notes and license updates composed through the local `cargo:after_version_bump` task. +- Keep release notes and license updates composed through the shared `socketry-project` `cargo:after_version_bump` hook. - The `bake/` package is private; publish only `bake-agent-context`. diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1beaf9e..476220f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -50,3 +50,15 @@ jobs: - run: cargo clippy --workspace --all-targets --locked -- -D warnings - name: Run tests and require complete source-region coverage run: cargo bake --locked test:coverage --all-targets true + + test-result: + if: always() + needs: [test, quality] + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Require successful tests and coverage + env: + JOB_RESULTS: ${{ toJSON(needs) }} + run: | + echo "$JOB_RESULTS" | jq -e 'all(.[]; .result == "success")' diff --git a/Cargo.lock b/Cargo.lock index 6a96ce8..8b1cc65 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,9 +19,9 @@ dependencies = [ [[package]] name = "bake" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbed34a1e40a3a5893a12c47de45006de3ae53112db64c0919a6e49c1a38d7e0" +checksum = "2f96c84418680954a2d9c8fe9afffb35aafb0b7086cb3cc141d613a2f0a74b42" dependencies = [ "bake-macros", "linkme", @@ -31,7 +31,7 @@ dependencies = [ [[package]] name = "bake-agent-context" -version = "0.3.1" +version = "0.3.2" dependencies = [ "bake", "serde", @@ -84,15 +84,25 @@ dependencies = [ [[package]] name = "bake-macros" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b801275922e3bbc727ecdbb809f1a82591744cad907c9e915bdfa9b28bf001f" +checksum = "696dc147efb72a305f77a058388c94e651cd3586222a0ccfe3fcf145c7143242" dependencies = [ "proc-macro2", "quote", "syn 2.0.119", ] +[[package]] +name = "bake-markdown" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be72df839f4db26a93f2fe0659e57ce7998900b9445b04ba1367d51b4ba38587" +dependencies = [ + "bake", + "socketry-markdown 0.3.0", +] + [[package]] name = "bake-readme" version = "0.1.6" @@ -667,16 +677,27 @@ dependencies = [ "unicode-id", ] +[[package]] +name = "socketry-markdown" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c02f802fe678b660dd21a6b6130bc2d0eb3423c24b9f26ebddb46514769e788" +dependencies = [ + "regex", + "unicode-id", +] + [[package]] name = "socketry-project" -version = "0.3.4" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f3a4391b29d2fcfe7522e3fdf651aaff9fd3de6c530a90412060b6bd1ad4e4" +checksum = "c2d4af345d5695d21119455e14c348b42267bc0c18eea584b44599d24f42d33e" dependencies = [ "bake", "bake-agent-context", "bake-cargo", "bake-license", + "bake-markdown", "bake-readme", "bake-releases", "bake-test-rust", diff --git a/Cargo.toml b/Cargo.toml index c37750c..9d8f34d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bake-agent-context" -version = "0.3.1" +version = "0.3.2" edition = "2024" license = "MIT" repository = "https://github.com/socketry/bake-agent-context-rust" diff --git a/bake/Cargo.toml b/bake/Cargo.toml index 18137fc..e717b5a 100644 --- a/bake/Cargo.toml +++ b/bake/Cargo.toml @@ -5,9 +5,9 @@ edition = "2024" publish = false [dependencies] -socketry-project = ">=0.3.3" -bake = "0" -bake-agent-context = { version = "0.3.1", path = ".." } +socketry-project = ">=0.3.7" +bake = "0.19" +bake-agent-context = { version = "0.3.2", path = ".." } bake-cargo = { version = "0.4.0" } bake-license = { version = "0.2.0" } bake-releases = { version = "0.3.0" } diff --git a/context/agent-context.md b/context/agent-context.md index ba1db6f..974ecba 100644 --- a/context/agent-context.md +++ b/context/agent-context.md @@ -1,56 +1,23 @@ # Agent Context -Keep reusable package guidance separate from repository-only instructions, -and make both easy for agents to discover. +Keep reusable package guidance separate from repository-only instructions, and make both easy for agents to discover. ## Package guidance -Put guidance that benefits users of a crate in its tracked `context/` -directory. Explain package-specific architecture, important invariants, common -usage patterns, and decisions that are not obvious from the public API. Keep -each guide focused on one topic, use descriptive lowercase filenames, and link -related guides together. - -Include `context/**` in the published Cargo package when downstream users need -the guidance. Bake Agent Context builds `.agents/context/index.md` from each -installed document's first heading and first prose sentence. It does not create -or modify the repository owner's `agents.md`. Use the `bake-agent-context-usage` -skill for file format, skill metadata, and installation details. - -Use a skill for a task-oriented procedure that an agent should follow, such as -setting up a repository or preparing a pull request. Skills are source Markdown -files in `context/` with YAML front matter containing `type: skill` and a -description. Bake installs them under `.agents/skills/` with names prefixed by -the provider crate. Skill documents are not copied to `.agents/context/` or -listed in the generated context index. +Put guidance that benefits users of a crate in its tracked `context/` directory. Explain package-specific architecture, important invariants, common usage patterns, and decisions that are not obvious from the public API. Keep each guide focused on one topic, use descriptive lowercase filenames, and link related guides together. + +Include `context/**` in the published Cargo package when downstream users need the guidance. Bake Agent Context builds `.agents/context/index.md` from each installed document's first heading and first prose sentence. It does not create or modify the repository owner's `agents.md`. Use the `bake-agent-context-usage` skill for file format, skill metadata, and installation details. + +Use a skill for a task-oriented procedure that an agent should follow, such as setting up a repository or preparing a pull request. Skills are source Markdown files in `context/` with YAML front matter containing `type: skill` and a description. Bake installs them under `.agents/skills/` with names prefixed by the provider crate. Skill documents are not copied to `.agents/context/` or listed in the generated context index. ## Repository-only instructions -Put guidance that applies only to the current checkout in `.agents/`. This can -include local development instructions, project-specific skills, and -instructions that should not ship to crate users. Do not put credentials or -machine-specific private details in package context. - -The repository owner controls `agents.md`; context installation leaves it -untouched. If agents should use dependency guidance, add a stable link to -`.agents/context/index.md` there. `cargo bake agent:context:install` maintains -a marked block in the local Git exclude file (`.git/info/exclude`) for -generated `.agents/context/` files, the skill ownership registry, and each -dependency-installed skill directory. These rules stay in the local checkout -instead of becoming project files. Project-owned skill directories remain -trackable. Edit package skill sources under `context/` and repository-only -skills under `.agents/skills/`, not generated dependency copies. +Put guidance that applies only to the current checkout in `.agents/`. This can include local development instructions, project-specific skills, and instructions that should not ship to crate users. Do not put credentials or machine-specific private details in package context. + +The repository owner controls `agents.md`; context installation leaves it untouched. If agents should use dependency guidance, add a stable link to `.agents/context/index.md` there. `cargo bake agent:context:install` maintains a marked block in the local Git exclude file (`.git/info/exclude`) for generated `.agents/context/` files, the skill ownership registry, and each dependency-installed skill directory. These rules stay in the local checkout instead of becoming project files. Project-owned skill directories remain trackable. Edit package skill sources under `context/` and repository-only skills under `.agents/skills/`, not generated dependency copies. ## Install and update -Add `bake-agent-context` to the project's private `bake/` package, directly or -through a shared task package such as `socketry-project`. Run -`cargo bake agent:context:install` to install ordinary context and skills from -resolved dependencies and update `.agents/context/index.md`. Run it again after -changing a context-providing dependency. Use `--package CRATE` to install from -one provider, or the skill-specific tasks to list and install selected skills. - -Before changing a project, follow its `agents.md` instructions, read relevant -installed context from `.agents/context/index.md`, and apply any skills that -fit the work. For details about the available Bake tasks and their options, -use the `bake-agent-context-usage` skill. +Add `bake-agent-context` to the project's private `bake/` package, directly or through a shared task package such as `socketry-project`. Run `cargo bake agent:context:install` to install ordinary context and skills from resolved dependencies and update `.agents/context/index.md`. Run it again after changing a context-providing dependency. Use `--package CRATE` to install from one provider, or the skill-specific tasks to list and install selected skills. + +Before changing a project, follow its `agents.md` instructions, read relevant installed context from `.agents/context/index.md`, and apply any skills that fit the work. For details about the available Bake tasks and their options, use the `bake-agent-context-usage` skill. diff --git a/context/getting-started.md b/context/getting-started.md index 5fe5f35..38b7103 100644 --- a/context/getting-started.md +++ b/context/getting-started.md @@ -8,8 +8,8 @@ Bake tasks belong in your project's private `bake/` crate. Add the Bake task lib ```toml [dependencies] -bake = "0.17" -bake-agent-context = "0.1" +bake = "0.19" +bake-agent-context = "0.3" ``` Link the task library from `bake/src/main.rs` and run the discovered task registry: diff --git a/context/rust.md b/context/rust.md index a2dd446..3a81f06 100644 --- a/context/rust.md +++ b/context/rust.md @@ -1,113 +1,57 @@ # Rust agent context -Use this shared guidance when working on Socketry's Rust crates. Follow any -project-specific instructions in its `.agents/` directory and public guides in -`context/` as well. +Use this shared guidance when working on Socketry's Rust crates. Follow any project-specific instructions in its `.agents/` directory and public guides in `context/` as well. ## Working from the Ruby designs -Port behavior, ownership relationships, modularity, and performance choices. -Do not translate Ruby syntax mechanically or introduce a hierarchy of traits -solely to reproduce class inheritance. Prefer data types and composition for -shared state, and traits for capabilities that real consumers need. +Port behavior, ownership relationships, modularity, and performance choices. Do not translate Ruby syntax mechanically or introduce a hierarchy of traits solely to reproduce class inheritance. Prefer data types and composition for shared state, and traits for capabilities that real consumers need. -Keep protocol representation and parsing separate from transport and task -scheduling. A protocol library should accept the I/O or owner it needs rather -than silently choosing a runtime for the application. +Keep protocol representation and parsing separate from transport and task scheduling. A protocol library should accept the I/O or owner it needs rather than silently choosing a runtime for the application. -Record the exact upstream revision and relevant files for a port. Preserve -license notices and contributor attribution. Explain intentional semantic -differences, especially ownership, cancellation, error handling, and time. +Record the exact upstream revision and relevant files for a port. Preserve license notices and contributor attribution. Explain intentional semantic differences, especially ownership, cancellation, error handling, and time. ## Futures and executors - Calling an async function constructs a future. Its body runs when polled. -- Poll::Pending returns control to the executor. The future must arrange a - wakeup when it can make progress, and update a stored waker when necessary. -- Treat a wakeup as a request to poll, not proof that the operation is ready. - Preserve wakeups that race with polling or queue transitions. -- Polling must not synchronously block a worker. CPU-intensive work and - blocking system calls need a deliberate execution strategy. +- Poll::Pending returns control to the executor. The future must arrange a wakeup when it can make progress, and update a stored waker when necessary. +- Treat a wakeup as a request to poll, not proof that the operation is ready. Preserve wakeups that race with polling or queue transitions. +- Polling must not synchronously block a worker. CPU-intensive work and blocking system calls need a deliberate execution strategy. - Do not poll a task concurrently or poll a completed future again. -- Pin preserves an address; Send permits transfer between threads. Neither - implies the other. A future can be Send without being Unpin. -- A Send future can contain non-Send local values during a poll when those - values are not retained across its suspension points. Suspending an - ordinary call stack inside poll invalidates attempts to infer stack - migration safety from the outer future's Send bound. -- The future foundation uses ordinary polling and `.await`. Do not restore - per-task stacks or hidden nested block_on calls as a compatibility shortcut. -- Concrete I/O and timer futures can require particular runtime services even - though they implement the standard Future trait. Trait adaptation does not - replace those services. Call Socketry's native backends selectors; dependencies - such as Tokio may use their own terminology. +- Pin preserves an address; Send permits transfer between threads. Neither implies the other. A future can be Send without being Unpin. +- A Send future can contain non-Send local values during a poll when those values are not retained across its suspension points. Suspending an ordinary call stack inside poll invalidates attempts to infer stack migration safety from the outer future's Send bound. +- The future foundation uses ordinary polling and `.await`. Do not restore per-task stacks or hidden nested block\_on calls as a compatibility shortcut. +- Concrete I/O and timer futures can require particular runtime services even though they implement the standard Future trait. Trait adaptation does not replace those services. Call Socketry's native backends selectors; dependencies such as Tokio may use their own terminology. ## Tasks and cleanup -Keep spawning, ownership, execution, cancellation, and completion distinct in -the implementation. An explicit owner controls a child task's lifetime; a -worker polls its future. Libraries spawning children should receive an owner. +Keep spawning, ownership, execution, cancellation, and completion distinct in the implementation. An explicit owner controls a child task's lifetime; a worker polls its future. Libraries spawning children should receive an owner. -Document what happens when a handle is dropped. A request to stop is different -from confirmation that the task and its children have stopped. Use an awaited -shutdown operation when callers need that confirmation. +Document what happens when a handle is dropped. A request to stop is different from confirmation that the task and its children have stopped. Use an awaited shutdown operation when callers need that confirmation. -On stable Rust, Drop cannot await. When a future is dropped, ordinary -destructors release retained state, but code after its current await is not -executed. If cleanup needs async work, the runtime must retain and poll the -cleanup work, or the caller must explicitly await it before dropping resources. +On stable Rust, Drop cannot await. When a future is dropped, ordinary destructors release retained state, but code after its current await is not executed. If cleanup needs async work, the runtime must retain and poll the cleanup work, or the caller must explicitly await it before dropping resources. -Do not use a destructor alone to justify tasks borrowing their owner's locals. -Account for cancellation, early returns, panics, forgotten futures, and work -already running on another thread before introducing scoped borrowing. +Do not use a destructor alone to justify tasks borrowing their owner's locals. Account for cancellation, early returns, panics, forgotten futures, and work already running on another thread before introducing scoped borrowing. ## I/O and timers -For completion-based I/O, keep buffers and descriptors alive until the selector -has established the kernel no longer accesses them. A cancellation request or -a dropped waiting future is not that confirmation. Prefer owned buffers in the -lowest-level operation API, and document any copy introduced by stream adapters. +For completion-based I/O, keep buffers and descriptors alive until the selector has established the kernel no longer accesses them. A cancellation request or a dropped waiting future is not that confirmation. Prefer owned buffers in the lowest-level operation API, and document any copy introduced by stream adapters. -Reuse stream registration and operation storage where practical. When storage -is reused, ensure a stale completion, waker, or cancellation cannot affect the -new occupant. Invoke user code and wakeups outside selector locks. +Reuse stream registration and operation storage where practical. When storage is reused, ensure a stale completion, waker, or cancellation cannot affect the new occupant. Invoke user code and wakeups outside selector locks. -Select concrete implementations with traits, target configuration and Cargo -features. Keep completion operations and readiness fallbacks behind the same -portable contract where the semantics match. Ordinary files need a blocking -pool or completion API; readiness alone does not make their operations async. +Select concrete implementations with traits, target configuration and Cargo features. Keep completion operations and readiness fallbacks behind the same portable contract where the semantics match. Ordinary files need a blocking pool or completion API; readiness alone does not make their operations async. -When adapting another runtime, document who keeps it alive and drives events. -Enter its context for each relevant poll, and restore context before returning -Pending. A runtime context guard must not survive across suspension or migration. -Keep registrations attached to their originating runtime and validate resource -identity where different runtime instances are incompatible. +When adapting another runtime, document who keeps it alive and drives events. Enter its context for each relevant poll, and restore context before returning Pending. A runtime context guard must not survive across suspension or migration. Keep registrations attached to their originating runtime and validate resource identity where different runtime instances are incompatible. -Use monotonic clocks for deadlines. Keep timer ordering independent of the -runtime, with explicit time inputs suitable for deterministic verification. -Distinguish elapsed deadlines, clock overflow, and cancellation from I/O errors. +Use monotonic clocks for deadlines. Keep timer ordering independent of the runtime, with explicit time inputs suitable for deterministic verification. Distinguish elapsed deadlines, clock overflow, and cancellation from I/O errors. ## Implementing changes -- Inspect existing code and repository status before editing; preserve work - outside the requested change. -- Prefer standard Cargo layout, rustfmt, and readable names. Use lowercase - Markdown documents and start license.md with `# MIT License`. Keep only - readme.md, license.md, and releases.md at a repository root; put public - package context in context/ and project-only instructions in .agents/. -- Avoid abbreviations in source code unless an external API or standard trait - requires the established name. -- Make runtime dependencies optional at the right package boundary. Keep - portable interfaces buildable without the native selector. -- Check generic bounds at public trait boundaries, including whether returned - futures need to be Send. Avoid introducing a Box per operation just to make - a trait object convenient. -- Keep unsafe operations small and state the lifetime, aliasing, pinning, and - thread assumptions they depend on. Use Result for expected failures. -- When verification is requested, cover the behavior being changed using - deterministic synchronization and time. Run platform-dependent operations - on the corresponding platform and report what actually ran. -- Make benchmarks establish allocation counts, contention, and throughput - claims; do not infer a speedup merely from a language change. -- Update documentation and agent context when changing public behavior. - Clearly label proposed APIs that do not yet exist. +- Inspect existing code and repository status before editing; preserve work outside the requested change. +- Prefer standard Cargo layout, rustfmt, and readable names. Use lowercase Markdown documents and start license.md with `# MIT License`. Keep only readme.md, license.md, and releases.md at a repository root; put public package context in context/ and project-only instructions in .agents/. +- Avoid abbreviations in source code unless an external API or standard trait requires the established name. +- Make runtime dependencies optional at the right package boundary. Keep portable interfaces buildable without the native selector. +- Check generic bounds at public trait boundaries, including whether returned futures need to be Send. Avoid introducing a Box per operation just to make a trait object convenient. +- Keep unsafe operations small and state the lifetime, aliasing, pinning, and thread assumptions they depend on. Use Result for expected failures. +- When verification is requested, cover the behavior being changed using deterministic synchronization and time. Run platform-dependent operations on the corresponding platform and report what actually ran. +- Make benchmarks establish allocation counts, contention, and throughput claims; do not infer a speedup merely from a language change. +- Update documentation and agent context when changing public behavior. Clearly label proposed APIs that do not yet exist. diff --git a/context/specification.md b/context/specification.md index bafedeb..b8e6a5f 100644 --- a/context/specification.md +++ b/context/specification.md @@ -64,6 +64,7 @@ Context providers MUST include a `context/` directory in their package root. Thi - **Versioning**: Must be versioned alongside the package code. Example structure: + ``` package-root/ ├── context/ @@ -87,6 +88,7 @@ Context consumers SHOULD create a `.agents/context/` directory in their project - **Transient Nature**: Should contain only reproducible content that can be regenerated from installed packages and MUST NOT contain unique or modified files. Example structure: + ``` project-root/ ├── .agents/context/ @@ -136,6 +138,7 @@ Context files SHOULD follow these naming conventions: - Group related files in subdirectories when appropriate. Common file names: + - `getting-started.md` - `configuration.md` - `troubleshooting.md` @@ -145,27 +148,11 @@ Common file names: ### 4.4 Skill Documents -A context provider may distribute an Agent Skill as a Markdown document directly -inside `context/`. The document MUST use YAML front matter with `type: skill` -and a non-empty `description`. Its filename, without the `.md` extension, is -the local skill name. A directory with the same name MAY contain skill -resources. Consumers MUST prefix the local name with the provider package name -and a hyphen to produce the globally unique installed skill name. - -Consumers that support skills MUST install the document as -`.agents/skills/-/SKILL.md`, with the installed name -and `description` in its front matter. Files in the matching resource directory -MUST be copied into that skill directory. Skill documents and their resources -MUST NOT also be copied into `.agents/context/` or included in the generated -context index. - -Dependency-installed skill directories SHOULD be excluded from version -control, while project-owned skills in `.agents/skills/` SHOULD remain -trackable. Git integrations SHOULD add exact dependency-installed skill paths -to `.git/info/exclude` rather than ignore the entire `.agents/skills/` -directory. They SHOULD mark generated entries with comments and preserve -user-authored rules outside that marked section. Any generated skill -ownership registry SHOULD also be excluded from version control. +A context provider may distribute an Agent Skill as a Markdown document directly inside `context/`. The document MUST use YAML front matter with `type: skill` and a non-empty `description`. Its filename, without the `.md` extension, is the local skill name. A directory with the same name MAY contain skill resources. Consumers MUST prefix the local name with the provider package name and a hyphen to produce the globally unique installed skill name. + +Consumers that support skills MUST install the document as `.agents/skills/-/SKILL.md`, with the installed name and `description` in its front matter. Files in the matching resource directory MUST be copied into that skill directory. Skill documents and their resources MUST NOT also be copied into `.agents/context/` or included in the generated context index. + +Dependency-installed skill directories SHOULD be excluded from version control, while project-owned skills in `.agents/skills/` SHOULD remain trackable. Git integrations SHOULD add exact dependency-installed skill paths to `.git/info/exclude` rather than ignore the entire `.agents/skills/` directory. They SHOULD mark generated entries with comments and preserve user-authored rules outside that marked section. Any generated skill ownership registry SHOULD also be excluded from version control. ## 5. Discovery and Installation diff --git a/license.md b/license.md index e589fcc..17fbb94 100644 --- a/license.md +++ b/license.md @@ -1,21 +1,9 @@ # MIT License -Copyright, 2026, by Samuel Williams. +Copyright, 2026, by Samuel Williams. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/readme.md b/readme.md index 4667f9e..36125ff 100644 --- a/readme.md +++ b/readme.md @@ -8,8 +8,8 @@ Add the task library to the unpublished `bake/` crate in your project, then link ```toml [dependencies] -bake = "0.17" -bake-agent-context = "0.1" +bake = "0.19" +bake-agent-context = "0.3" ``` ```rust,ignore @@ -69,33 +69,29 @@ This crate includes guides for its users and for other crate authors: ## Releasing -Prepare a release with `cargo bake cargo:version:patch` (or `minor`, `major`, -or `bump --version X.Y.Z`), then run `cargo bake cargo:release` and open a -pull request. After review and merge, GitHub Actions publishes the release -when the configured `crates-io` environment approves it. Follow the shared -[Releasing skill](https://github.com/socketry/socketry-project-rust/blob/main/context/releasing.md) -for the standard process. +Prepare a release with `cargo bake cargo:version:patch` (or `minor`, `major`, or `bump --version X.Y.Z`), then run `cargo bake cargo:release` and open a pull request. After review and merge, GitHub Actions publishes the release when the configured `crates-io` environment approves it. Follow the shared [Releasing skill](https://github.com/socketry/socketry-project-rust/blob/main/context/releasing.md) for the standard process. ## Releases + See [releases.md](releases.md) for the full release history. +### v0.3.2 + +- Adopt `socketry-project` 0.3.7 for shared project tasks and Markdown normalization. +- Require the aggregate test and coverage result for pull request merges. +- Refresh dependency examples and repository-owned agent guidance. + ### v0.3.1 -- Require `socketry-markdown` 0.2.0 or newer for safe inline Markdown - serialization. +- Require `socketry-markdown` 0.2.0 or newer for safe inline Markdown serialization. ### v0.3.0 -- Expose the context API and Bake task adapters from the crate root, removing - the redundant `agent::context` path while preserving all `agent:context:*` tasks. +- Expose the context API and Bake task adapters from the crate root, removing the redundant `agent::context` path while preserving all `agent:context:*` tasks. - Keep the private task executable on compatible Bake 0.x and current task-library releases. -### v0.2.2 - -- Declare compatibility with the Bake 0.x API so task libraries can share one task registry - when upgrading to crate-derived task namespaces. ## Contributing @@ -104,4 +100,4 @@ Please open an issue or pull request on [GitHub](https://github.com/socketry/bak ### Agent Context -Before contributing, follow `agents.md` if present, then read relevant guides linked from `.agents/context/index.md` and apply any matching skills. If the index or context files are missing or out of date, run `cargo bake agent:context:install` to refresh them. +Run `cargo bake agent:context:install` to install shared context and skills. Read `.agents/context/index.md` to find relevant guides, follow `agents.md` if present, and apply skills under `.agents/skills/`. The installer preserves repository-owned `agents.md`; it does not create or regenerate that file. diff --git a/releases.md b/releases.md index dac1768..239aae2 100644 --- a/releases.md +++ b/releases.md @@ -1,38 +1,37 @@ # Releases +## v0.3.2 + +- Adopt `socketry-project` 0.3.7 for shared project tasks and Markdown normalization. +- Require the aggregate test and coverage result for pull request merges. +- Refresh dependency examples and repository-owned agent guidance. + ## v0.3.1 -- Require `socketry-markdown` 0.2.0 or newer for safe inline Markdown - serialization. +- Require `socketry-markdown` 0.2.0 or newer for safe inline Markdown serialization. ## v0.3.0 -- Expose the context API and Bake task adapters from the crate root, removing - the redundant `agent::context` path while preserving all `agent:context:*` tasks. +- Expose the context API and Bake task adapters from the crate root, removing the redundant `agent::context` path while preserving all `agent:context:*` tasks. - Keep the private task executable on compatible Bake 0.x and current task-library releases. ## v0.2.2 -- Declare compatibility with the Bake 0.x API so task libraries can share one task registry - when upgrading to crate-derived task namespaces. +- Declare compatibility with the Bake 0.x API so task libraries can share one task registry when upgrading to crate-derived task namespaces. ## v0.2.1 -- Use the shared `socketry-project` Releasing skill for the standard release - process and remove references to the duplicate Bake Cargo publishing context. +- Use the shared `socketry-project` Releasing skill for the standard release process and remove references to the duplicate Bake Cargo publishing context. ## v0.2.0 -- Write the context index to `.agents/context/index.md` without creating or - modifying the repository owner's `agents.md`. +- Write the context index to `.agents/context/index.md` without creating or modifying the repository owner's `agents.md`. - Install the usage guide as the `bake-agent-context-usage` skill. -- Keep generated context and dependency-provided skills out of Git using local - excludes, while allowing projects to track their own skills. +- Keep generated context and dependency-provided skills out of Git using local excludes, while allowing projects to track their own skills. ## v0.1.5 -- Explain how to organize reusable package context and repository-only agent - instructions. +- Explain how to organize reusable package context and repository-only agent instructions. ## v0.1.4 @@ -54,6 +53,7 @@ - Switch the runtime dependency from `socketry-bake` to `bake` 0.17.0. - Add shared Rust context for Socketry crate development. + - Keep project-owned `.agents/` guidance while ignoring generated `.agents/context/` files. ## v0.1.0 diff --git a/src/test_filesystem.rs b/src/test_filesystem.rs index 3841a01..3d3f4a3 100644 --- a/src/test_filesystem.rs +++ b/src/test_filesystem.rs @@ -2,7 +2,6 @@ // Copyright, 2026, by Samuel Williams. //! Deterministic filesystem failures for exercising error handling in tests. - use std::io; use std::path::{Path, PathBuf}; use std::sync::Mutex;