Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,10 @@ jobs:
fi
echo "panic=abort correctly rejected by the compile_error gate"

# Run tests across the WHOLE workspace (root package + wflpkg + wfl-lsp),
# so the CI aggregate is a true full-workspace baseline. Previously this
# was `cargo test` (root package only), which silently skipped wflpkg's
# tests. (integration tests have access to the release binary)
# Run tests across the WHOLE workspace (root package + wfl-lsp), so the CI
# aggregate is a true full-workspace baseline. Previously this was
# `cargo test` (root package only), which silently skipped the other
# members' tests. (integration tests have access to the release binary)
- name: Run Tests
run: cargo test --workspace --verbose

Expand Down
1 change: 0 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ When changing contribution workflow, community rules, or project authority, upda
- `scripts/`: Utilities (`run_integration_tests.ps1|.sh`, `configure_lsp.ps1`, `sync-branch.sh`).
- `Tools/`: Helper tools (Python scripts, WFL tools).
- `Nexus/`: Experimental WFL test programs.
- `wflpkg/`: Package Manager design documents.
- `wix/`: Windows Installer (MSI) configuration.
- `.cursor/rules/`: Cursor IDE rules and guidelines (`wfl-rules.mdc`).

Expand Down
64 changes: 33 additions & 31 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,37 +13,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
longer echoes request or response bodies into diagnostic logs.
- Unsupported database URL errors no longer echo the full connection URL,
preventing embedded credentials from being disclosed in diagnostics.
- Package filesystem operations now enforce the manifest's package-name rules,
reject symlinked cache/install roots and targets, verify canonical directory
containment before recursive deletion, and prevent archive extraction through
pre-existing symlink ancestors.
- **WFL package publishing now keeps credentials registry-scoped.** A
project-controlled `registry` setting can no longer redirect a saved token to
another origin; registry URLs are canonicalized and must use HTTPS without
userinfo, paths, queries, or fragments.
- **Package archives are created in private external temporary files** and
cleaned up automatically. Archive creation refuses existing output paths, so
a project-supplied symlink can no longer redirect `wfl share` into truncating
another file.
- **Published packages now honor root and nested `.gitignore` rules.** Ignored
logs, debug reports, `.env` files, and other local-only content are excluded
from both the archive and its checksum instead of being uploaded silently.
- **Registry credentials are written atomically with private permissions.** On
Unix, the auth directory is mode `0700` and the token file is mode `0600`
before any secret bytes are written.
- **Package integrity checks now use an explicitly versioned
`wflhash:v2:` transcript.** File records include domain, path, and content
lengths; paths use portable `/` separators; verification hashes every
extracted regular file; and publishing derives the digest from the completed
archive instead of re-reading a mutable source tree.
- **Package publishing now fails closed on unsafe inputs and resource abuse.**
Manifests and entry points must be in-project regular files, unsupported
filesystem objects and ambiguous `.gitignore` patterns are rejected, package
traversal is bounded, archives upload as bounded streams, and registry
response bodies are capped at 1 MiB.
- **Registry login supports an explicit registry address.** `wfl login
[registry]` scopes a token to that HTTPS origin, mismatched logins are
rejected, and `wfl logout` can recover malformed or incomplete credentials.
- **Cyclic values no longer abort the interpreter during display, diagnostics,
or isolated-module cloning.** List/object formatting now detects cycles and
caps nesting depth, while deep clones preserve cycles and shared references
Expand Down Expand Up @@ -111,6 +80,39 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
`No such file or directory`

### Removed
- **The `wflpkg` package manager has been removed in its entirety.** The
`crates/wflpkg` crate and its standalone `wflpkg` binary are gone, along with
everything they reached into WFL:
- The positional `wfl` subcommands `create`, `add`, `remove`, `update`,
`build`, `run`, `share`, `search`, `info`, `login`, `logout`, and `check`,
and the `PACKAGE MANAGEMENT` section of `wfl --help`.
- The `package:` import protocol. `load module from "package:my-lib"` no
longer resolves through a `packages/` directory; the string is now an
ordinary relative path and fails as one.
- The `project.wfl` / `project.lock` / `workspace.wfl` manifest formats, the
`.wflpkg` archive format, the `wflhash:v2:` package-integrity transcript,
the download cache, and the `wflhub.org` registry client and credential
store. The corresponding `[Unreleased] Security` entries have been dropped,
since they described code that never shipped a release.
- **Impact on the WFL language: none**, with one exception. The file-based
module system — `load module from "path.wfl"`, `include from "path.wfl"`,
and `export` — is untouched and fully supported. Only the `package:` prefix
is withdrawn, and no released WFL program could depend on it in practice:
resolving it required an installed `packages/` tree that only the removed
`wfl add` could produce.
- **Impact on tooling:** `wfl run <file.wfl>` and `wfl test <file.wfl>` were
handled inside the same subcommand dispatch and go with it. Use the
documented spellings `wfl <file.wfl>` and `wfl --test <file.wfl>`; neither
alias was ever listed in `wfl --help` or in `Docs/`.
- **Rationale:** the package manager is being redesigned from scratch. Its
supply-chain and trust-root decisions are the hardest in the project to walk
back once published, so it was withdrawn before the first release candidate
rather than shipped and then revised. The design documents are archived,
unimplemented, under `Docs/Archive/wflpkg/`.
- **Governance (`GOVERNANCE.md` §2.2, §8):** package and registry design is a
Maintainer-only decision area. The Maintainer directed this removal and
accepted the immediate withdrawal. Recorded here so the decision is
auditable rather than implicit.
- **The WFL to JavaScript transpiler has been sunset.** The `wfl --transpile`
command and its `--target`, `--no-runtime`, and `--es-modules` options are gone,
along with the `wfl::transpiler` library module (`JavaScriptTranspiler`,
Expand Down
1 change: 0 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ Apply it as a test on every language, docs, or tooling change: if a beginner lea
- `scripts/`: Utilities (`run_integration_tests.ps1|.sh`, `configure_lsp.ps1`, `sync-branch.sh`).
- `Tools/`: Helper tools (Python scripts, WFL tools).
- `Nexus/`: Experimental WFL test programs.
- `wflpkg/`: Package Manager design documents.
- `wix/`: Windows Installer (MSI) configuration.
- `.cursor/rules/`: Cursor IDE rules and guidelines (`wfl-rules.mdc`).

Expand Down
148 changes: 0 additions & 148 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 1 addition & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ executable = "wfl"
[workspace]
members = [
".",
"wfl-lsp",
"crates/wflpkg"
"wfl-lsp"
]
# `fuzz/` is a standalone cargo-fuzz workspace (nightly + libFuzzer only); keep
# it out of the stable-toolchain root build/test.
Expand All @@ -50,7 +49,6 @@ maintainer-scripts = "debian/"
conf-files = ["/etc/wfl/wfl.cfg"]

[dependencies]
wflpkg = { path = "crates/wflpkg" }
logos = "0.16.1"
rand = "0.10.2"
regex = "1.13.0"
Expand Down
Loading
Loading