Skip to content

Remove wflpkg package manager before RC1 - #649

Merged
logbie merged 2 commits into
mainfrom
claude/remove-wflpkg-system-lzvr8g
Jul 26, 2026
Merged

Remove wflpkg package manager before RC1#649
logbie merged 2 commits into
mainfrom
claude/remove-wflpkg-system-lzvr8g

Conversation

@logbie

@logbie logbie commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

Remove the wflpkg package manager system entirely before the first release candidate. The package manager — a ~7,700-line crate with twelve wfl subcommands, a package: import protocol, and extensive design documentation — is being redesigned from scratch and should not ship in RC1.

Breaking Changes

wfl run <file>.wfl and wfl test <file>.wfl no longer work.

These two aliases were not package-management commands, but they lived inside the same positional-subcommand match in src/main.rs and were implemented by mutating args in place (args.remove(1), args.insert(1, "--test")) before falling through to normal file handling. Keeping them would mean keeping the dispatch block this PR exists to delete.

Was Use instead
wfl run program.wfl wfl program.wfl
wfl test program.wfl wfl --test program.wfl

The replacements are the documented spellings and are unchanged. After this PR, wfl run program.wfl exits 1 with a not-found error for the literal path run — it fails loudly rather than silently doing something else.

Neither alias ever appeared in print_help(), in the CLI lists in CLAUDE.md / AGENTS.md, or anywhere in Docs/, so the discoverable surface is unaffected.

package: imports no longer resolve. load module from "package:my-lib" is now an ordinary relative path and fails as one. This is nominal rather than practical: resolving it required an installed packages/ tree that only the removed wfl add could produce.

No WFL program is affected. The file-based module system — load module from "path.wfl", include from "path.wfl", and export — is untouched; package: was a runtime string prefix, opaque to the parser. All 110 TestPrograms/ pass against the release build.

Governance. GOVERNANCE.md §3.1 and AGENTS.md scope the ≥ 1-year deprecation window to breaking existing WFL programs; what is withdrawn here is a CLI invocation surface. This mirrors the JavaScript transpiler sunset in the same [Unreleased] ### Removed section, where the same reasoning was accepted. Per §2.2, the break was raised with the Maintainer before implementation and the immediate removal was confirmed. It is recorded in CHANGELOG.md, as a BREAKING CHANGE: trailer on 2f1786d, in the Dev Diary, and pinned by the run_and_test_positional_aliases_are_removed test.

Key Changes

  • Removed crates/wflpkg/ crate entirely: All package manager code, including:

    • Archive creation/extraction (archive.rs, checksum.rs)
    • Registry client and authentication (registry/api.rs, registry/auth.rs)
    • Manifest parsing and versioning (manifest/, lockfile/)
    • Dependency resolution (resolver/)
    • CLI commands (commands/create.rs, add.rs, share.rs, login.rs, etc.)
    • Comprehensive test suites (security_tests.rs, version_and_lockfile_tests.rs, workflow_integration.rs, error_handling.rs)
  • Removed package: import protocol from interpreter (src/interpreter/mod.rs):

    • Deleted special handling for package: prefix in module resolution
    • package: is now treated as an ordinary (unresolvable) relative path
    • No package manager guidance strings remain in error messages
  • Removed CLI subcommands from src/main.rs:

    • Deleted create, add, remove, update, build, run, test, share, login, search, info, check subcommands
    • Removed DEFAULT_REGISTRY constant
    • Updated help text to remove all package management documentation
  • Updated workspace configuration:

    • Removed crates/wflpkg from Cargo.toml workspace members
    • Removed wflpkg crate dependency from root package
  • Archived design documentation:

    • Moved all wflpkg/ design documents to Docs/Archive/wflpkg/ for historical reference
    • Added Docs/Archive/wflpkg/README.md explaining the archive
    • Added dev diary entry (Dev diary/2026-07-26-remove-wflpkg-system.md) documenting the decision
  • Updated governance and CI:

    • Updated GOVERNANCE.md to remove references to package design ADRs
    • Updated .github/workflows/ci.yml to remove wflpkg from workspace test runs
    • Updated AGENTS.md and CLAUDE.md to remove wflpkg from project structure
  • Added post-removal contract tests (tests/package_protocol_removed_test.rs):

    • Verifies that package: protocol is no longer recognized
    • Confirms that package manager subcommands are gone
    • Ensures file-based module system remains functional

Rationale

Package managers are irreversible commitments: manifest formats, lockfile formats, archive formats, and registry trust roots cannot be redesigned after early adoption. Shipping a half-formed system and redesigning it later would either break every early package or require carrying a design nobody wanted. Removing it before RC1 preserves the option to ship a well-designed system in a future release.

The file-based module system (load module from) remains fully functional and unaffected.


[View with code smith](https://app.blacksmith.sh/WebFirstLanguage/codesmith/wfl/pr/649)

Need help on this PR? Tag @codesmith-bot with what you need. Autofix is enabled.

claude added 2 commits July 26, 2026 14:26
Pins the post-removal contract before the code changes land, so the
removal has auditable Red->Green evidence (root testing.md ss3/ss6).

Red run against the current tree (6 failing for the intended reasons,
2 regression guards green):

  package_protocol_no_longer_resolves ......... FAILED (import succeeds today)
  package_import_failure_mentions_no_package_manager FAILED (no failure to inspect)
  bare_package_prefix_is_not_special_cased .... FAILED ("requires a package name")
  package_subcommands_are_removed ............. FAILED (wfl logout exits 0)
  run_and_test_positional_aliases_are_removed . FAILED (wfl run main.wfl runs it)
  help_has_no_package_management_section ...... FAILED (PACKAGE MANAGEMENT present)
  relative_module_paths_still_work ............ ok
  relative_load_module_still_works ............ ok

The package tests invoke the script by absolute path: the resolver's
find_project_root walked up from the source file's parent, so a bare
relative argument gave it an empty parent and it bailed out before ever
reaching packages/. The absolute path exercises the real resolve path.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011TH11eg1F6V8W4t1Nmo3xx
WFL is heading into its first RC, and the package manager is being
rethought from scratch. Package managers are the hardest part of a
project to revise after release -- manifest, lockfile and archive
formats, and above all the registry trust root, are things other people
build against as soon as they exist. Withdrawing it before the RC costs
nothing because nothing depends on it yet; shipping and then redesigning
would break every early package.

Removed:

  * crates/wflpkg in full -- manifest/lockfile parsers, the resolver, the
    .wflpkg archive format, the wflhash:v2: integrity transcript, the
    download cache, the wflhub.org registry client and credential store,
    and the standalone wflpkg binary. Drops five dependencies nothing
    else used (rpassword, flate2, tar, ignore, unix libc) and reqwest's
    multipart feature.
  * the positional wfl subcommands (create/add/remove/update/build/run/
    share/search/info/login/logout/check), DEFAULT_REGISTRY,
    parse_create_project_args, and the PACKAGE MANAGEMENT help section.
  * the package: import protocol in the interpreter, plus
    resolve_package_path and find_project_root.
  * the eight [Unreleased] Security CHANGELOG bullets covering package
    publishing and registry credentials -- they describe code that will
    never ship a release.

Kept: the file-based module system (load module from / include from /
export) is untouched and covered by two regression tests. The design
documents move to Docs/Archive/wflpkg/ with a README stating up front
that nothing in the folder describes shipping behavior.

BREAKING CHANGE: `wfl run <file>.wfl` and `wfl test <file>.wfl` were
handled inside the removed subcommand block and go with it. Use the
documented spellings `wfl <file.wfl>` and `wfl --test <file.wfl>`;
neither alias appeared in --help, CLAUDE.md, or Docs/. Confirmed with
the Maintainer before implementation.

Risk class R3 (backward compatibility). Red evidence in afe8c05, a
test-only ancestor of this commit: 6 of 8 tests in
tests/package_protocol_removed_test.rs failed there for the intended
reasons, 2 were green regression guards; all 8 are green here.

Verification: cargo fmt --check clean; clippy -D warnings clean;
cargo test --workspace 130 binaries / 0 failures; TestPrograms 110
passed / 0 failed / 24 skipped against the release binary;
validate_docs_examples.py 18/18. See the Dev diary entry for the
disk-allowance workaround used to fit the debug test build.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011TH11eg1F6V8W4t1Nmo3xx
Copilot AI review requested due to automatic review settings July 26, 2026 15:10
@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The wflpkg package manager is removed from workspace configuration, CLI dispatch, interpreter module resolution, and documentation. Its design materials move to an archive, while tests verify package protocol removal and continued relative module loading.

Changes

wflpkg removal

Layer / File(s) Summary
Package manager core removal
Cargo.toml, crates/wflpkg/...
Removes the wflpkg workspace dependency and remaining resolver/workspace exports.
CLI and runtime contract
src/main.rs, src/interpreter/mod.rs, tests/package_protocol_removed_test.rs, scripts/test_docs_code_blocks.py
Removes package subcommands and package: resolution, and tests rejected legacy behavior alongside working relative modules.
Documentation and governance alignment
AGENTS.md, CLAUDE.md, CHANGELOG.md, GOVERNANCE.md, .github/workflows/ci.yml, Docs/04-advanced-features/modules.md, Dev diary/...
Updates repository structure, governance, changelog, CI commentary, module documentation, and removal records.
Historical design archive
Docs/Archive/wflpkg/*
Adds archival notices and preserves package-manager PRDs, ADRs, grammar specifications, brainstorm results, and decision records as historical documents.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant WflCLI
  participant Interpreter
  participant ModuleResolver
  participant Tests
  WflCLI->>Interpreter: execute source file
  Interpreter->>ModuleResolver: resolve module path
  ModuleResolver-->>Interpreter: relative module or unresolved package path
  Interpreter-->>WflCLI: result and diagnostics
  Tests->>WflCLI: assert package paths fail
  Tests->>WflCLI: assert relative modules execute
Loading

Possibly related PRs

Suggested reviewers: copilot

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: removing the wflpkg package manager before RC1.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/remove-wflpkg-system-lzvr8g

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

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

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

@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: 2f1786dd4c

ℹ️ 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/main.rs
let _profiler = dhat::Profiler::new_ad_hoc();

let mut args: Vec<String> = env::args().collect();
let args: Vec<String> = env::args().collect();

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Preserve the existing run/test aliases

When existing scripts invoke wfl run x.wfl or wfl test x.wfl, this removal now treats the alias as an input filename and fails instead of executing x.wfl; the new Dev Diary explicitly confirms this compatibility break. Removing package-management commands does not require removing these two aliases, so keep their argument rewrites until they have completed the documented deprecation path required by repository policy.

AGENTS.md reference: AGENTS.md:L194-L196

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Removing the wfl run <file>/wfl test <file> aliases is a deliberate, maintainer-approved break documented in the Dev Diary ("The one backward-compatibility break") and pinned by the intentional Red→Green test run_and_test_positional_aliases_are_removed. The aliases were never documented in --help, CLAUDE.md, or Docs/, and the documented wfl <file.wfl> / wfl --test <file.wfl> spellings still work; restoring them would revert the confirmed decision and break the existing test.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Not restoring these — the cited policy doesn't reach this change, and the repo already settled the question.

Policy scope. Both AGENTS.md:194 and GOVERNANCE.md §3.1 scope the deprecation window to breaking existing WFL programs:

Never break existing WFL programs without a documented path.

wfl run x.wfl is a CLI invocation surface, not a WFL program. No WFL program is affected by this diff: all 110 TestPrograms/ pass against the release build (0 failed, 24 skipped per the runner's own skip list), and the language — load module from, include from, export — is untouched. package: was a runtime string prefix, opaque to the parser.

Precedent. The immediately preceding entry in the same [Unreleased] ### Removed section (the JavaScript transpiler sunset) made exactly this argument and it was accepted:

the ≥ 1-year deprecation window applies to breaking existing WFL programs, and no WFL program is affected […] What is withdrawn is a build-tooling surface (the --transpile CLI mode) […] Per §2.2, breaking-change decisions rest with the Maintainer, who directed this sunset and accepted the immediate removal rather than a deferred one.

Same shape here, and §2.2 applies the same way — this removal was raised with the Maintainer before implementation, including the alias break specifically, and the immediate removal was confirmed.

Why the aliases went with the block. They weren't independent code. run and test were arms of the package-subcommand match in src/main.rs that mutated args in place (args.remove(1), args.insert(1, "--test")) before falling through. Keeping them means keeping the positional-dispatch block that this change exists to delete.

Discoverability. Neither alias appeared in print_help(), in CLAUDE.md/AGENTS.md's CLI list, or anywhere in Docs/. The documented spellings wfl <file.wfl> and wfl --test <file.wfl> are unchanged and verified working. wfl run x.wfl now exits 1 with a not-found error — loud, not silent.

The break is recorded in CHANGELOG.md under ### Removed, as a BREAKING CHANGE: trailer on 2f1786d, in the Dev Diary, and pinned by run_and_test_positional_aliases_are_removed. Restoring the aliases would revert the Maintainer's decision and fail that test.


Generated by Claude Code

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Removes the in-tree wflpkg package-manager system ahead of RC1, including its CLI surface area and the interpreter’s package: import behavior, while preserving the existing file-based module system and archiving the prior design docs for reference.

Changes:

  • Removed wflpkg workspace member/dependency, the wfl positional package subcommands, and the interpreter package: protocol handling.
  • Archived wflpkg design documents under Docs/Archive/wflpkg/ and updated user-facing docs/governance/changelog accordingly.
  • Added integration “contract” tests to lock in the post-removal CLI/runtime behavior and updated doc-audit categorization to reflect the new error surface.

Reviewed changes

Copilot reviewed 54 out of 63 changed files in this pull request and generated no comments.

Show a summary per file
File Description
tests/package_protocol_removed_test.rs Adds contract tests asserting package: no longer resolves and package-related positional subcommands/help text are gone, while relative module loading still works.
src/main.rs Removes package-manager subcommand dispatch and related help text/constants; CLI now only supports documented flags and file execution.
src/interpreter/mod.rs Deletes package: protocol special-casing and associated package-resolution helpers, leaving standard relative-path module resolution.
scripts/test_docs_code_blocks.py Updates doc-block failure categorization to match the post-removal module-resolution error strings.
GOVERNANCE.md Removes governance references to in-tree package-design ADRs and records that WFL currently has no package manager (docs archived).
fuzz/Cargo.lock Regenerates fuzz workspace lockfile to drop wflpkg-related dependencies.
Docs/Archive/wflpkg/README.md Adds an explicit “archived prior art only” README for the removed package manager docs.
Docs/Archive/wflpkg/wflpkg-open-decisions-resolved.md Archives prior wflpkg decision record (historical reference only).
Docs/Archive/wflpkg/wflpkg-adr-001-binary-and-crate-structure.md Archives prior ADR for wflpkg binary/library topology (historical reference only).
Docs/Archive/wflpkg/wflpkg_prd.md Archives prior WFLHub PRD tied to the removed package-manager system.
Docs/04-advanced-features/modules.md Removes the documented “Package System (V4)” section that referenced package: imports.
Dev diary/2026-07-26-remove-wflpkg-system.md Adds a dev diary entry documenting rationale, compatibility impact, and testing notes for the removal.
Cargo.toml Removes crates/wflpkg from workspace members and drops the wflpkg dependency from the root crate.
Cargo.lock Updates lockfile to remove wflpkg and its transitive dependencies.
CHANGELOG.md Drops unreleased security entries that described non-shipping wflpkg behavior and adds a “Removed” entry documenting the package-manager removal and CLI impact.
CLAUDE.md Updates project-structure documentation to remove the (now-deleted) wflpkg/ design-docs location.
AGENTS.md Updates project-structure documentation to remove the (now-deleted) wflpkg/ design-docs location.
.github/workflows/ci.yml Adjusts CI commentary to reflect the updated workspace composition after removing wflpkg.
crates/wflpkg/Cargo.toml Deletes the wflpkg crate manifest as part of removing the crate.
crates/wflpkg/src/lib.rs Deletes the wflpkg library root/module exports as part of removing the crate.
crates/wflpkg/src/main.rs Deletes the standalone wflpkg binary entrypoint as part of removing the crate.
crates/wflpkg/src/error.rs Deletes package-manager error types/messages as part of removing the crate.
crates/wflpkg/src/permissions.rs Deletes package permission prompting/types as part of removing the crate.
crates/wflpkg/src/package_files.rs Deletes packaging file-selection/ignore-stack logic as part of removing the crate.
crates/wflpkg/src/cache/mod.rs Deletes global package-cache implementation as part of removing the crate.
crates/wflpkg/src/commands/mod.rs Deletes package-manager CLI command module wiring as part of removing the crate.
crates/wflpkg/src/commands/create.rs Deletes wfl create project implementation as part of removing the crate.
crates/wflpkg/src/commands/add.rs Deletes wfl add implementation as part of removing the crate.
crates/wflpkg/src/commands/remove.rs Deletes wfl remove implementation as part of removing the crate.
crates/wflpkg/src/commands/update.rs Deletes wfl update implementation as part of removing the crate.
crates/wflpkg/src/commands/build.rs Deletes wfl build implementation as part of removing the crate.
crates/wflpkg/src/commands/run.rs Deletes package-manager wfl run project-entry behavior as part of removing the crate.
crates/wflpkg/src/commands/share.rs Deletes wfl share publishing implementation as part of removing the crate.
crates/wflpkg/src/commands/search.rs Deletes wfl search implementation as part of removing the crate.
crates/wflpkg/src/commands/info.rs Deletes wfl info implementation as part of removing the crate.
crates/wflpkg/src/commands/login.rs Deletes registry login/logout implementation as part of removing the crate.
crates/wflpkg/src/commands/check.rs Deletes wfl check implementations as part of removing the crate.
crates/wflpkg/src/manifest/mod.rs Deletes manifest data model as part of removing the crate.
crates/wflpkg/src/manifest/parser.rs Deletes manifest parser as part of removing the crate.
crates/wflpkg/src/manifest/writer.rs Deletes manifest writer as part of removing the crate.
crates/wflpkg/src/manifest/version.rs Deletes manifest version/constraint types as part of removing the crate.
crates/wflpkg/src/lockfile/mod.rs Deletes lockfile data model as part of removing the crate.
crates/wflpkg/src/lockfile/parser.rs Deletes lockfile parser as part of removing the crate.
crates/wflpkg/src/lockfile/writer.rs Deletes lockfile writer as part of removing the crate.
crates/wflpkg/src/registry/mod.rs Deletes registry module wiring as part of removing the crate.
crates/wflpkg/src/registry/advisory.rs Deletes advisory lookup client logic as part of removing the crate.
crates/wflpkg/src/resolver/mod.rs Deletes resolver module wiring as part of removing the crate.
crates/wflpkg/src/resolver/algorithm.rs Deletes dependency-resolution algorithm as part of removing the crate.
crates/wflpkg/src/resolver/package_path.rs Deletes package-path resolution logic as part of removing the crate.
crates/wflpkg/src/workspace/mod.rs Deletes workspace module as part of removing the crate.
crates/wflpkg/src/workspace/parser.rs Deletes workspace parser as part of removing the crate.
crates/wflpkg/tests/workflow_integration.rs Deletes package workflow integration tests as part of removing the crate.
crates/wflpkg/tests/error_handling.rs Deletes package error-handling tests as part of removing the crate.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 10

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CHANGELOG.md`:
- Around line 89-102: The immediate removal of the package: protocol breaks the
required compatibility path. In CHANGELOG.md lines 89-102, document the
deprecation and migration plan instead of declaring immediate withdrawal; in Dev
diary/2026-07-26-remove-wflpkg-system.md lines 75-90, record the transition
decision and deprecation period; in tests/package_protocol_removed_test.rs lines
76-162, replace removal assertions with tests for supported compatibility
behavior during that transition, preserving removal coverage for the eventual
deprecation-removal release.

In `@Docs/Archive/wflpkg/wflhub_language_gaps_prd.md`:
- Around line 1-11: Mark all seven archived WFL package documents as historical
and superseded: Docs/Archive/wflpkg/wflhub_language_gaps_prd.md (lines 1-11)
should identify WFLHub requirements as historical;
Docs/Archive/wflpkg/wflpkg-adr-001-binary-and-crate-structure.md (lines 1-9)
should state that the ADR is superseded;
Docs/Archive/wflpkg/wflpkg-brainstorm-results.md (lines 1-9) should mark
existing-wflpkg claims historical;
Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md (lines 1-8) should remove or
qualify its active launch-gate status;
Docs/Archive/wflpkg/wflpkg-open-decisions-resolved.md (lines 1-14) should label
the decisions historical; Docs/Archive/wflpkg/wflpkg_prd.md (lines 1-5) should
label registry/API requirements retired; and Docs/Archive/wflpkg/wflpkgdesign.md
(lines 1-9) should mark the package-manager design superseded. Add a consistent
banner to each document with the removal date and a link to the removal diary or
archive README.
- Around line 576-593: Update the proposed Value::RateLimiter representation and
RateLimiterState ownership to use an Arc with an appropriate concurrency-safe
guard, or explicitly document and enforce a single-threaded runtime constraint.
Ensure the chosen design satisfies the “safe for concurrent use” acceptance
criterion while preserving shared limiter state across handlers.

In `@Docs/Archive/wflpkg/wflpkg_prd.md`:
- Around line 36-52: In Docs/Archive/wflpkg/wflpkg_prd.md (lines 36-52) and
Docs/Archive/wflpkg/wflpkgdesign.md (lines 36-52), update every fenced code
block to include an appropriate language identifier such as wfl, json, or text,
ensuring all Markdown fences satisfy MD040.

In `@Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md`:
- Around line 356-360: Update the executable ABNF for string/unescaped in the
manifest grammar to exclude DEL, C1 controls, BOM, bidi controls, and zero-width
characters required by Gate L rejection rules. Ensure the grammar itself matches
the documented MG-L03/MG-L05/MG-L06 behavior rather than relying only on an
implicit post-lexical check.
- Around line 133-143: Resolve the key-character contract in the N3 Key and
N4-String documentation: either restrict quoted keys to ASCII explicitly, or
update the JSON projection and JCS ordering rules to define non-ASCII key
behavior and add corresponding tests. Apply the same clarification to the
related JSON-projection section so the grammar and projection remain consistent.
- Around line 226-230: The “Canonical on-disk form” section conflates parser
acceptance with writer output. Revise the grammar documentation to define
accepted input separately from the canonical output emitted by `wfl fmt`,
explicitly documenting whether whitespace and blank-line variants are accepted
and how `fmt` normalizes them; update the injectivity, rejection, and round-trip
claims to match that distinction.
- Around line 82-125: Update every illustrative manifest and lockfile example,
including the inline example near the referenced grammar section, to begin with
the required wflpkg grammar-version record. Use the exact multiline syntax
defined by the ABNF production and ensure each example’s envelope is consistent
with the required version format.

In `@Docs/Archive/wflpkg/wflpkg-open-decisions-resolved.md`:
- Around line 50-53: Update the resolved syntax description near “The right
answer” to remove null from the permitted literal types, matching the frozen
grammar’s rejection of nothing, missing, and undefined. Keep the remaining
string, number, boolean, list, and record literal description unchanged.

In `@tests/package_protocol_removed_test.rs`:
- Around line 219-240: Extend run_and_test_positional_aliases_are_removed with a
positive compatibility check for wfl --test main.wfl: invoke run_in with the
--test flag, assert a successful exit, and verify the program output is
produced. Keep the existing assertions for the removed run and test positional
aliases unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 47d7a80e-a5bf-41f4-b316-dc09837cce38

📥 Commits

Reviewing files that changed from the base of the PR and between ed704e6 and 2f1786d.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • fuzz/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (61)
  • .github/workflows/ci.yml
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • Cargo.toml
  • Dev diary/2026-07-26-remove-wflpkg-system.md
  • Docs/04-advanced-features/modules.md
  • Docs/Archive/wflpkg/README.md
  • Docs/Archive/wflpkg/wflhub_language_gaps_prd.md
  • Docs/Archive/wflpkg/wflpkg-adr-001-binary-and-crate-structure.md
  • Docs/Archive/wflpkg/wflpkg-brainstorm-results.md
  • Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md
  • Docs/Archive/wflpkg/wflpkg-open-decisions-resolved.md
  • Docs/Archive/wflpkg/wflpkg_prd.md
  • Docs/Archive/wflpkg/wflpkgdesign.md
  • GOVERNANCE.md
  • crates/wflpkg/Cargo.toml
  • crates/wflpkg/src/archive.rs
  • crates/wflpkg/src/cache/mod.rs
  • crates/wflpkg/src/checksum.rs
  • crates/wflpkg/src/commands/add.rs
  • crates/wflpkg/src/commands/build.rs
  • crates/wflpkg/src/commands/check.rs
  • crates/wflpkg/src/commands/create.rs
  • crates/wflpkg/src/commands/info.rs
  • crates/wflpkg/src/commands/login.rs
  • crates/wflpkg/src/commands/mod.rs
  • crates/wflpkg/src/commands/remove.rs
  • crates/wflpkg/src/commands/run.rs
  • crates/wflpkg/src/commands/search.rs
  • crates/wflpkg/src/commands/share.rs
  • crates/wflpkg/src/commands/update.rs
  • crates/wflpkg/src/error.rs
  • crates/wflpkg/src/lib.rs
  • crates/wflpkg/src/lockfile/mod.rs
  • crates/wflpkg/src/lockfile/parser.rs
  • crates/wflpkg/src/lockfile/writer.rs
  • crates/wflpkg/src/main.rs
  • crates/wflpkg/src/manifest/mod.rs
  • crates/wflpkg/src/manifest/parser.rs
  • crates/wflpkg/src/manifest/version.rs
  • crates/wflpkg/src/manifest/writer.rs
  • crates/wflpkg/src/package_files.rs
  • crates/wflpkg/src/permissions.rs
  • crates/wflpkg/src/registry/advisory.rs
  • crates/wflpkg/src/registry/api.rs
  • crates/wflpkg/src/registry/auth.rs
  • crates/wflpkg/src/registry/mod.rs
  • crates/wflpkg/src/resolver/algorithm.rs
  • crates/wflpkg/src/resolver/mod.rs
  • crates/wflpkg/src/resolver/package_path.rs
  • crates/wflpkg/src/workspace/mod.rs
  • crates/wflpkg/src/workspace/parser.rs
  • crates/wflpkg/tests/error_handling.rs
  • crates/wflpkg/tests/security_tests.rs
  • crates/wflpkg/tests/version_and_lockfile_tests.rs
  • crates/wflpkg/tests/workflow_integration.rs
  • scripts/test_docs_code_blocks.py
  • src/interpreter/mod.rs
  • src/main.rs
  • tests/package_protocol_removed_test.rs
💤 Files with no reviewable changes (45)
  • crates/wflpkg/src/archive.rs
  • crates/wflpkg/src/manifest/writer.rs
  • crates/wflpkg/src/commands/run.rs
  • crates/wflpkg/tests/error_handling.rs
  • crates/wflpkg/src/commands/info.rs
  • crates/wflpkg/src/commands/search.rs
  • crates/wflpkg/src/lockfile/writer.rs
  • crates/wflpkg/src/permissions.rs
  • crates/wflpkg/src/registry/mod.rs
  • crates/wflpkg/src/main.rs
  • crates/wflpkg/src/manifest/mod.rs
  • crates/wflpkg/tests/workflow_integration.rs
  • crates/wflpkg/src/workspace/mod.rs
  • crates/wflpkg/Cargo.toml
  • crates/wflpkg/src/lib.rs
  • crates/wflpkg/src/commands/share.rs
  • crates/wflpkg/src/commands/check.rs
  • crates/wflpkg/src/commands/create.rs
  • crates/wflpkg/src/registry/advisory.rs
  • crates/wflpkg/src/commands/update.rs
  • crates/wflpkg/src/resolver/package_path.rs
  • crates/wflpkg/src/resolver/algorithm.rs
  • crates/wflpkg/src/workspace/parser.rs
  • crates/wflpkg/src/commands/add.rs
  • crates/wflpkg/src/manifest/parser.rs
  • crates/wflpkg/src/lockfile/parser.rs
  • crates/wflpkg/src/commands/login.rs
  • crates/wflpkg/src/registry/api.rs
  • crates/wflpkg/src/checksum.rs
  • crates/wflpkg/src/manifest/version.rs
  • AGENTS.md
  • crates/wflpkg/tests/security_tests.rs
  • crates/wflpkg/src/commands/build.rs
  • crates/wflpkg/src/lockfile/mod.rs
  • crates/wflpkg/src/package_files.rs
  • crates/wflpkg/src/registry/auth.rs
  • crates/wflpkg/tests/version_and_lockfile_tests.rs
  • crates/wflpkg/src/commands/remove.rs
  • Docs/04-advanced-features/modules.md
  • crates/wflpkg/src/error.rs
  • crates/wflpkg/src/commands/mod.rs
  • CLAUDE.md
  • crates/wflpkg/src/cache/mod.rs
  • crates/wflpkg/src/resolver/mod.rs
  • src/interpreter/mod.rs

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 10

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CHANGELOG.md`:
- Around line 89-102: The immediate removal of the package: protocol breaks the
required compatibility path. In CHANGELOG.md lines 89-102, document the
deprecation and migration plan instead of declaring immediate withdrawal; in Dev
diary/2026-07-26-remove-wflpkg-system.md lines 75-90, record the transition
decision and deprecation period; in tests/package_protocol_removed_test.rs lines
76-162, replace removal assertions with tests for supported compatibility
behavior during that transition, preserving removal coverage for the eventual
deprecation-removal release.

In `@Docs/Archive/wflpkg/wflhub_language_gaps_prd.md`:
- Around line 1-11: Mark all seven archived WFL package documents as historical
and superseded: Docs/Archive/wflpkg/wflhub_language_gaps_prd.md (lines 1-11)
should identify WFLHub requirements as historical;
Docs/Archive/wflpkg/wflpkg-adr-001-binary-and-crate-structure.md (lines 1-9)
should state that the ADR is superseded;
Docs/Archive/wflpkg/wflpkg-brainstorm-results.md (lines 1-9) should mark
existing-wflpkg claims historical;
Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md (lines 1-8) should remove or
qualify its active launch-gate status;
Docs/Archive/wflpkg/wflpkg-open-decisions-resolved.md (lines 1-14) should label
the decisions historical; Docs/Archive/wflpkg/wflpkg_prd.md (lines 1-5) should
label registry/API requirements retired; and Docs/Archive/wflpkg/wflpkgdesign.md
(lines 1-9) should mark the package-manager design superseded. Add a consistent
banner to each document with the removal date and a link to the removal diary or
archive README.
- Around line 576-593: Update the proposed Value::RateLimiter representation and
RateLimiterState ownership to use an Arc with an appropriate concurrency-safe
guard, or explicitly document and enforce a single-threaded runtime constraint.
Ensure the chosen design satisfies the “safe for concurrent use” acceptance
criterion while preserving shared limiter state across handlers.

In `@Docs/Archive/wflpkg/wflpkg_prd.md`:
- Around line 36-52: In Docs/Archive/wflpkg/wflpkg_prd.md (lines 36-52) and
Docs/Archive/wflpkg/wflpkgdesign.md (lines 36-52), update every fenced code
block to include an appropriate language identifier such as wfl, json, or text,
ensuring all Markdown fences satisfy MD040.

In `@Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md`:
- Around line 356-360: Update the executable ABNF for string/unescaped in the
manifest grammar to exclude DEL, C1 controls, BOM, bidi controls, and zero-width
characters required by Gate L rejection rules. Ensure the grammar itself matches
the documented MG-L03/MG-L05/MG-L06 behavior rather than relying only on an
implicit post-lexical check.
- Around line 133-143: Resolve the key-character contract in the N3 Key and
N4-String documentation: either restrict quoted keys to ASCII explicitly, or
update the JSON projection and JCS ordering rules to define non-ASCII key
behavior and add corresponding tests. Apply the same clarification to the
related JSON-projection section so the grammar and projection remain consistent.
- Around line 226-230: The “Canonical on-disk form” section conflates parser
acceptance with writer output. Revise the grammar documentation to define
accepted input separately from the canonical output emitted by `wfl fmt`,
explicitly documenting whether whitespace and blank-line variants are accepted
and how `fmt` normalizes them; update the injectivity, rejection, and round-trip
claims to match that distinction.
- Around line 82-125: Update every illustrative manifest and lockfile example,
including the inline example near the referenced grammar section, to begin with
the required wflpkg grammar-version record. Use the exact multiline syntax
defined by the ABNF production and ensure each example’s envelope is consistent
with the required version format.

In `@Docs/Archive/wflpkg/wflpkg-open-decisions-resolved.md`:
- Around line 50-53: Update the resolved syntax description near “The right
answer” to remove null from the permitted literal types, matching the frozen
grammar’s rejection of nothing, missing, and undefined. Keep the remaining
string, number, boolean, list, and record literal description unchanged.

In `@tests/package_protocol_removed_test.rs`:
- Around line 219-240: Extend run_and_test_positional_aliases_are_removed with a
positive compatibility check for wfl --test main.wfl: invoke run_in with the
--test flag, assert a successful exit, and verify the program output is
produced. Keep the existing assertions for the removed run and test positional
aliases unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 47d7a80e-a5bf-41f4-b316-dc09837cce38

📥 Commits

Reviewing files that changed from the base of the PR and between ed704e6 and 2f1786d.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • fuzz/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (61)
  • .github/workflows/ci.yml
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • Cargo.toml
  • Dev diary/2026-07-26-remove-wflpkg-system.md
  • Docs/04-advanced-features/modules.md
  • Docs/Archive/wflpkg/README.md
  • Docs/Archive/wflpkg/wflhub_language_gaps_prd.md
  • Docs/Archive/wflpkg/wflpkg-adr-001-binary-and-crate-structure.md
  • Docs/Archive/wflpkg/wflpkg-brainstorm-results.md
  • Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md
  • Docs/Archive/wflpkg/wflpkg-open-decisions-resolved.md
  • Docs/Archive/wflpkg/wflpkg_prd.md
  • Docs/Archive/wflpkg/wflpkgdesign.md
  • GOVERNANCE.md
  • crates/wflpkg/Cargo.toml
  • crates/wflpkg/src/archive.rs
  • crates/wflpkg/src/cache/mod.rs
  • crates/wflpkg/src/checksum.rs
  • crates/wflpkg/src/commands/add.rs
  • crates/wflpkg/src/commands/build.rs
  • crates/wflpkg/src/commands/check.rs
  • crates/wflpkg/src/commands/create.rs
  • crates/wflpkg/src/commands/info.rs
  • crates/wflpkg/src/commands/login.rs
  • crates/wflpkg/src/commands/mod.rs
  • crates/wflpkg/src/commands/remove.rs
  • crates/wflpkg/src/commands/run.rs
  • crates/wflpkg/src/commands/search.rs
  • crates/wflpkg/src/commands/share.rs
  • crates/wflpkg/src/commands/update.rs
  • crates/wflpkg/src/error.rs
  • crates/wflpkg/src/lib.rs
  • crates/wflpkg/src/lockfile/mod.rs
  • crates/wflpkg/src/lockfile/parser.rs
  • crates/wflpkg/src/lockfile/writer.rs
  • crates/wflpkg/src/main.rs
  • crates/wflpkg/src/manifest/mod.rs
  • crates/wflpkg/src/manifest/parser.rs
  • crates/wflpkg/src/manifest/version.rs
  • crates/wflpkg/src/manifest/writer.rs
  • crates/wflpkg/src/package_files.rs
  • crates/wflpkg/src/permissions.rs
  • crates/wflpkg/src/registry/advisory.rs
  • crates/wflpkg/src/registry/api.rs
  • crates/wflpkg/src/registry/auth.rs
  • crates/wflpkg/src/registry/mod.rs
  • crates/wflpkg/src/resolver/algorithm.rs
  • crates/wflpkg/src/resolver/mod.rs
  • crates/wflpkg/src/resolver/package_path.rs
  • crates/wflpkg/src/workspace/mod.rs
  • crates/wflpkg/src/workspace/parser.rs
  • crates/wflpkg/tests/error_handling.rs
  • crates/wflpkg/tests/security_tests.rs
  • crates/wflpkg/tests/version_and_lockfile_tests.rs
  • crates/wflpkg/tests/workflow_integration.rs
  • scripts/test_docs_code_blocks.py
  • src/interpreter/mod.rs
  • src/main.rs
  • tests/package_protocol_removed_test.rs
💤 Files with no reviewable changes (45)
  • crates/wflpkg/src/archive.rs
  • crates/wflpkg/src/manifest/writer.rs
  • crates/wflpkg/src/commands/run.rs
  • crates/wflpkg/tests/error_handling.rs
  • crates/wflpkg/src/commands/info.rs
  • crates/wflpkg/src/commands/search.rs
  • crates/wflpkg/src/lockfile/writer.rs
  • crates/wflpkg/src/permissions.rs
  • crates/wflpkg/src/registry/mod.rs
  • crates/wflpkg/src/main.rs
  • crates/wflpkg/src/manifest/mod.rs
  • crates/wflpkg/tests/workflow_integration.rs
  • crates/wflpkg/src/workspace/mod.rs
  • crates/wflpkg/Cargo.toml
  • crates/wflpkg/src/lib.rs
  • crates/wflpkg/src/commands/share.rs
  • crates/wflpkg/src/commands/check.rs
  • crates/wflpkg/src/commands/create.rs
  • crates/wflpkg/src/registry/advisory.rs
  • crates/wflpkg/src/commands/update.rs
  • crates/wflpkg/src/resolver/package_path.rs
  • crates/wflpkg/src/resolver/algorithm.rs
  • crates/wflpkg/src/workspace/parser.rs
  • crates/wflpkg/src/commands/add.rs
  • crates/wflpkg/src/manifest/parser.rs
  • crates/wflpkg/src/lockfile/parser.rs
  • crates/wflpkg/src/commands/login.rs
  • crates/wflpkg/src/registry/api.rs
  • crates/wflpkg/src/checksum.rs
  • crates/wflpkg/src/manifest/version.rs
  • AGENTS.md
  • crates/wflpkg/tests/security_tests.rs
  • crates/wflpkg/src/commands/build.rs
  • crates/wflpkg/src/lockfile/mod.rs
  • crates/wflpkg/src/package_files.rs
  • crates/wflpkg/src/registry/auth.rs
  • crates/wflpkg/tests/version_and_lockfile_tests.rs
  • crates/wflpkg/src/commands/remove.rs
  • Docs/04-advanced-features/modules.md
  • crates/wflpkg/src/error.rs
  • crates/wflpkg/src/commands/mod.rs
  • CLAUDE.md
  • crates/wflpkg/src/cache/mod.rs
  • crates/wflpkg/src/resolver/mod.rs
  • src/interpreter/mod.rs
🛑 Comments failed to post (10)
CHANGELOG.md (1)

89-102: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Preserve package: through the documented deprecation path.

package: is a WFL program construct. Declaring that no released program could practically use it does not satisfy the repository’s compatibility invariant; restore a supported transition path before enforcing this removal.

  • CHANGELOG.md#L89-L102: replace the immediate language-protocol withdrawal with the documented deprecation and migration plan.
  • Dev diary/2026-07-26-remove-wflpkg-system.md#L75-L90: record the transition/deprecation decision rather than an immediate compatibility exception.
  • tests/package_protocol_removed_test.rs#L76-L162: test the supported compatibility behavior during the transition, then move these removal assertions to the deprecation-removal release.

As per coding guidelines, “Never break existing WFL programs without the documented deprecation path; preserve backward compatibility as a project invariant.”

📍 Affects 3 files
  • CHANGELOG.md#L89-L102 (this comment)
  • Dev diary/2026-07-26-remove-wflpkg-system.md#L75-L90
  • tests/package_protocol_removed_test.rs#L76-L162
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CHANGELOG.md` around lines 89 - 102, The immediate removal of the package:
protocol breaks the required compatibility path. In CHANGELOG.md lines 89-102,
document the deprecation and migration plan instead of declaring immediate
withdrawal; in Dev diary/2026-07-26-remove-wflpkg-system.md lines 75-90, record
the transition decision and deprecation period; in
tests/package_protocol_removed_test.rs lines 76-162, replace removal assertions
with tests for supported compatibility behavior during that transition,
preserving removal coverage for the eventual deprecation-removal release.

Source: Coding guidelines

Docs/Archive/wflpkg/wflhub_language_gaps_prd.md (2)

1-11: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Mark every archived document as historical and superseded.

These headers still present wflpkg, package: imports, active CLI commands, and WFLHub contracts as current, while this PR removes them. Add a consistent banner with the removal date and a link to the removal diary/archive README; change statuses such as Accepted or launch-gate where necessary.

  • Docs/Archive/wflpkg/wflhub_language_gaps_prd.md#L1-L11: identify the WFLHub requirements as historical.
  • Docs/Archive/wflpkg/wflpkg-adr-001-binary-and-crate-structure.md#L1-L9: mark the ADR superseded by package-manager removal.
  • Docs/Archive/wflpkg/wflpkg-brainstorm-results.md#L1-L9: mark the existing-wflpkg claims historical.
  • Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md#L1-L8: remove or qualify the active launch-gate status.
  • Docs/Archive/wflpkg/wflpkg-open-decisions-resolved.md#L1-L14: label the decisions as historical.
  • Docs/Archive/wflpkg/wflpkg_prd.md#L1-L5: label the registry/API requirements as retired.
  • Docs/Archive/wflpkg/wflpkgdesign.md#L1-L9: label the package-manager design as superseded.
📍 Affects 7 files
  • Docs/Archive/wflpkg/wflhub_language_gaps_prd.md#L1-L11 (this comment)
  • Docs/Archive/wflpkg/wflpkg-adr-001-binary-and-crate-structure.md#L1-L9
  • Docs/Archive/wflpkg/wflpkg-brainstorm-results.md#L1-L9
  • Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md#L1-L8
  • Docs/Archive/wflpkg/wflpkg-open-decisions-resolved.md#L1-L14
  • Docs/Archive/wflpkg/wflpkg_prd.md#L1-L5
  • Docs/Archive/wflpkg/wflpkgdesign.md#L1-L9
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Docs/Archive/wflpkg/wflhub_language_gaps_prd.md` around lines 1 - 11, Mark
all seven archived WFL package documents as historical and superseded:
Docs/Archive/wflpkg/wflhub_language_gaps_prd.md (lines 1-11) should identify
WFLHub requirements as historical;
Docs/Archive/wflpkg/wflpkg-adr-001-binary-and-crate-structure.md (lines 1-9)
should state that the ADR is superseded;
Docs/Archive/wflpkg/wflpkg-brainstorm-results.md (lines 1-9) should mark
existing-wflpkg claims historical;
Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md (lines 1-8) should remove or
qualify its active launch-gate status;
Docs/Archive/wflpkg/wflpkg-open-decisions-resolved.md (lines 1-14) should label
the decisions historical; Docs/Archive/wflpkg/wflpkg_prd.md (lines 1-5) should
label registry/API requirements retired; and Docs/Archive/wflpkg/wflpkgdesign.md
(lines 1-9) should mark the package-manager design superseded. Add a consistent
banner to each document with the removal date and a link to the removal diary or
archive README.

576-593: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "## Candidate doc excerpt"
sed -n '550,610p' Docs/Archive/wflpkg/wflhub_language_gaps_prd.md 2>/dev/null || true

echo
echo "## Search for Rust runtime/concurrency hints and Rc/RefCell in relevant docs/candidates"
rg -n "rate limiter|RateLimiter|Rc<RefCell|Arc<(Mutex|RwLock)|async runtime|concurrent|single-threaded|multi-threaded" -S . \
  -g '!target/**' -g '!Cargo.lock' | head -n 200

Repository: WebFirstLanguage/wfl

Length of output: 27667


Use a concurrent-safe owned state for rate limiters.

Rc<RefCell<RateLimiterState>> can be cloned across concurrent handlers, but neither type is Send, so the acceptance criterion “safe for concurrent use” cannot be satisfied with this design. Document an intentional single-threaded constraint, or switch to an Arc<_>-guarded limiter state.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Docs/Archive/wflpkg/wflhub_language_gaps_prd.md` around lines 576 - 593,
Update the proposed Value::RateLimiter representation and RateLimiterState
ownership to use an Arc with an appropriate concurrency-safe guard, or
explicitly document and enforce a single-threaded runtime constraint. Ensure the
chosen design satisfies the “safe for concurrent use” acceptance criterion while
preserving shared limiter state across handlers.
Docs/Archive/wflpkg/wflpkg_prd.md (1)

36-52: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add language identifiers to all fenced code blocks.

Markdownlint reports MD040 for these files. Label each fence as wfl, json, text, or another appropriate language so documentation validation passes.

📍 Affects 2 files
  • Docs/Archive/wflpkg/wflpkg_prd.md#L36-L52 (this comment)
  • Docs/Archive/wflpkg/wflpkgdesign.md#L36-L52
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Docs/Archive/wflpkg/wflpkg_prd.md` around lines 36 - 52, In
Docs/Archive/wflpkg/wflpkg_prd.md (lines 36-52) and
Docs/Archive/wflpkg/wflpkgdesign.md (lines 36-52), update every fenced code
block to include an appropriate language identifier such as wfl, json, or text,
ensuring all Markdown fences satisfy MD040.

Source: Linters/SAST tools

Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md (4)

82-125: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Make the required version envelope consistent with the examples.

The specification requires every file to begin with a wflpkg grammar-version record, but both illustrative files omit it. The inline form at Line 284 also does not match the multiline ABNF production. Add the envelope to every example and show it using the exact grammar accepted by the spec.

Also applies to: 274-285

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md` around lines 82 - 125,
Update every illustrative manifest and lockfile example, including the inline
example near the referenced grammar section, to begin with the required wflpkg
grammar-version record. Use the exact multiline syntax defined by the ABNF
production and ensure each example’s envelope is consistent with the required
version format.

133-143: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Resolve the quoted-key versus ASCII-key contradiction.

Quoted keys are defined as strings, and strings permit non-ASCII NFC text; however, the JSON-projection section assumes that all keys are ASCII. Either restrict quoted keys to ASCII explicitly or define and test the non-ASCII JCS ordering behavior.

Also applies to: 232-234

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md` around lines 133 - 143,
Resolve the key-character contract in the N3 Key and N4-String documentation:
either restrict quoted keys to ASCII explicitly, or update the JSON projection
and JCS ordering rules to define non-ASCII key behavior and add corresponding
tests. Apply the same clarification to the related JSON-projection section so
the grammar and projection remain consistent.

226-230: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Separate accepted input from canonical output.

Line 230 says every non-canonical form is rejected, then says the pre-fmt parser accepts extra whitespace and blank lines. Define the accepted grammar separately from the canonical writer; otherwise implementations will disagree about whether formatting variants are valid.

🧰 Tools
🪛 markdownlint-cli2 (0.23.0)

[warning] 230-230: Spaces inside code span elements

(MD038, no-space-in-code)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md` around lines 226 - 230,
The “Canonical on-disk form” section conflates parser acceptance with writer
output. Revise the grammar documentation to define accepted input separately
from the canonical output emitted by `wfl fmt`, explicitly documenting whether
whitespace and blank-line variants are accepted and how `fmt` normalizes them;
update the injectivity, rejection, and round-trip claims to match that
distinction.

356-360: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Align the executable ABNF with the rejection rules.

The unescaped range admits DEL, C1 controls, bidi controls, and zero-width characters that Gate L says must be rejected. Because Appendix A is declared executable, encode those exclusions in the grammar or make the post-lexical rejection pass explicitly part of the oracle.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Docs/Archive/wflpkg/wflpkg-manifest-grammar-1.0.md` around lines 356 - 360,
Update the executable ABNF for string/unescaped in the manifest grammar to
exclude DEL, C1 controls, BOM, bidi controls, and zero-width characters required
by Gate L rejection rules. Ensure the grammar itself matches the documented
MG-L03/MG-L05/MG-L06 behavior rather than relying only on an implicit
post-lexical check.
Docs/Archive/wflpkg/wflpkg-open-decisions-resolved.md (1)

50-53: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Remove null from the resolved syntax description.

This document says the subset admits string/number/boolean/null/list/record literals, while the frozen grammar explicitly rejects nothing, missing, and undefined. Update the resolution text to match the grammar, or clearly identify this sentence as superseded design.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Docs/Archive/wflpkg/wflpkg-open-decisions-resolved.md` around lines 50 - 53,
Update the resolved syntax description near “The right answer” to remove null
from the permitted literal types, matching the frozen grammar’s rejection of
nothing, missing, and undefined. Keep the remaining string, number, boolean,
list, and record literal description unchanged.
tests/package_protocol_removed_test.rs (1)

219-240: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Add a positive --test compatibility assertion.

The test states that wfl --test <file> remains supported, but only checks removed aliases. Execute wfl --test main.wfl and assert successful execution so deleting shared dispatch cannot silently break the retained flag.

Proposed test addition
     for alias in ["run", "test"] {
         // existing negative assertions
     }
+
+    let (stdout, stderr, code) = run_in(dir.path(), &["--test", "main.wfl"]);
+    let combined = format!("{stdout}{stderr}");
+    assert_eq!(code, Some(0), "`wfl --test main.wfl` should remain supported; got:\n{combined}");
+    assert!(stdout.contains("hello from wfl"), "supported test mode must execute the file; got:\n{combined}");
 }

As per coding guidelines, R3 compatibility work requires risk-triggered tests for retained and failure-path behavior.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

/// The `wfl run <file>` and `wfl test <file>` positional aliases lived inside
/// the package-subcommand dispatch block and went with it. Only `wfl <file>`
/// and `wfl --test <file>` remain.
#[test]
fn run_and_test_positional_aliases_are_removed() {
    let dir = TempDir::new().expect("tempdir");
    fs::write(dir.path().join("main.wfl"), "display \"hello from wfl\"\n").expect("write main.wfl");

    for alias in ["run", "test"] {
        let (stdout, stderr, code) = run_in(dir.path(), &[alias, "main.wfl"]);
        let combined = format!("{stdout}{stderr}");
        assert_ne!(
            code,
            Some(0),
            "`wfl {alias} main.wfl` should no longer be accepted; got:\n{combined}"
        );
        assert!(
            !stdout.contains("hello from wfl"),
            "`wfl {alias} main.wfl` must not execute the program; got:\n{combined}"
        );
    }

    let (stdout, stderr, code) = run_in(dir.path(), &["--test", "main.wfl"]);
    let combined = format!("{stdout}{stderr}");
    assert_eq!(
        code,
        Some(0),
        "`wfl --test main.wfl` should remain supported; got:\n{combined}"
    );
    assert!(
        stdout.contains("hello from wfl"),
        "supported test mode must execute the file; got:\n{combined}"
    );
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/package_protocol_removed_test.rs` around lines 219 - 240, Extend
run_and_test_positional_aliases_are_removed with a positive compatibility check
for wfl --test main.wfl: invoke run_in with the --test flag, assert a successful
exit, and verify the program output is produced. Keep the existing assertions
for the removed run and test positional aliases unchanged.

Source: Coding guidelines

@logbie
logbie merged commit 7937a53 into main Jul 26, 2026
27 checks passed
@logbie
logbie deleted the claude/remove-wflpkg-system-lzvr8g branch July 26, 2026 15:27
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.

3 participants