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
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## 0.1.2

- Corrected project licensing metadata and license files to The Unlicense.

## 0.1.1

- Switched `doublets-web` to the stable `doublets = 0.3.0` crate from `doublets-rs`.
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

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

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "doublets-web"
version = "0.1.1"
version = "0.1.2"
authors = [
"uselessgoddess",
"Linksplatform Team <linksplatformtechnologies@gmail.com>",
Expand All @@ -10,7 +10,7 @@ rust-version = "1.85"
description = "WebAssembly bindings for the LinksPlatform Doublets associative storage library."
readme = "README.md"
repository = "https://github.com/linksplatform/doublets-web"
license = "MIT OR Apache-2.0"
license = "Unlicense"
keywords = ["associative", "doublets", "linksplatform", "wasm", "webassembly"]
categories = ["api-bindings", "data-structures", "wasm"]

Expand Down
24 changes: 24 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.

In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.

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 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.

For more information, please refer to <https://unlicense.org/>
176 changes: 0 additions & 176 deletions LICENSE_APACHE

This file was deleted.

25 changes: 0 additions & 25 deletions LICENSE_MIT

This file was deleted.

7 changes: 2 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[![CI/CD Pipeline](https://github.com/linksplatform/doublets-web/actions/workflows/release.yml/badge.svg?branch=master)](https://github.com/linksplatform/doublets-web/actions/workflows/release.yml?query=branch%3Amaster)
[![npm package](https://img.shields.io/npm/v/doublets-web.svg)](https://www.npmjs.com/package/doublets-web)
[![GitHub Release](https://img.shields.io/github/v/release/linksplatform/doublets-web.svg)](https://github.com/linksplatform/doublets-web/releases)
[![License](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](https://github.com/linksplatform/doublets-web#license)
[![License](https://img.shields.io/badge/license-Unlicense-blue.svg)](https://github.com/linksplatform/doublets-web#license)

WebAssembly bindings for the LinksPlatform [doublets](https://github.com/linksplatform/doublets-rs) associative storage library.

Expand Down Expand Up @@ -56,7 +56,4 @@ The workflow uses GitHub Actions OIDC (`id-token: write`) and `npm publish` from

## License

Licensed under either of:

- Apache License, Version 2.0 ([LICENSE_APACHE](LICENSE_APACHE))
- MIT license ([LICENSE_MIT](LICENSE_MIT))
Released into the public domain under [The Unlicense](LICENSE).
87 changes: 87 additions & 0 deletions docs/case-studies/issue-7/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Issue 7 Case Study: Correct Project License to The Unlicense

Date: 2026-05-01

Issue: https://github.com/linksplatform/doublets-web/issues/7
Pull request: https://github.com/linksplatform/doublets-web/pull/8

## Goal

Correct every repository-owned license surface from the previous MIT OR Apache-2.0 metadata to The Unlicense, preserve the supporting evidence under `docs/case-studies/issue-7`, and add a regression check that keeps the public metadata aligned.

## Evidence Collected

- Issue 7 metadata and comments are saved under `evidence/issue-7.json` and `evidence/issue-7-comments.json`.
- Pull request 8 metadata, comments, reviews, and review comments are saved under `evidence/pr-8*.json`.
- The SPDX record for `Unlicense` is saved in `evidence/spdx-unlicense.json`.
- The canonical Unlicense text is saved in `evidence/UNLICENSE.txt`.
- npm package metadata guidance was saved in `evidence/npm-package-json.html`.

## Timeline

- 2021-12-09: `linksplatform/doublets-web` was created. GitHub API metadata reported the repository license as Apache-2.0 before this fix.
- 2026-05-01 05:28 UTC: PR 6 merged the CI/CD revival and left the crate metadata, README badge, README license section, and test app metadata on MIT OR Apache-2.0.
- 2026-05-01 09:01 UTC: Issue 7 was opened requesting that the license be corrected to Unlicense/Public Domain in all places.
- 2026-05-01 09:01 UTC: Draft PR 8 was created for the issue.
- 2026-05-01: This investigation found no issue comments, PR comments, reviews, or review comments requiring additional constraints.

## Requirements

- Change the main crate metadata to the SPDX identifier `Unlicense`.
- Replace root MIT/Apache license files with the Unlicense text.
- Update README badge and license section.
- Update the `testapp` metadata and license files because they are tracked repository content.
- Preserve raw issue/PR/evidence data under `docs/case-studies/issue-7`.
- Include a repeatable check that fails when old license markers come back.
- Bump the package version so the release workflow has a new npm package version to publish.

## Root Cause

The repository still contained the dual-license setup from earlier project scaffolding and CI modernization work:

- `Cargo.toml` declared `license = "MIT OR Apache-2.0"`.
- `README.md` advertised an MIT/Apache badge and linked `LICENSE_MIT` and `LICENSE_APACHE`.
- Root and `testapp` license files contained MIT and Apache-2.0 texts.
- `testapp/package.json` and `testapp/package-lock.json` declared `(MIT OR Apache-2.0)`.

Because these surfaces are maintained independently, changing only one file would leave package metadata, GitHub license detection, or documentation inconsistent.

## External Facts

SPDX lists the short license identifier as `Unlicense`, with the full name "The Unlicense"; its metadata marks the license as OSI approved and FSF libre. npm package metadata uses SPDX license expressions in the `license` field, so `Unlicense` is the appropriate package string.

## Implemented

- Added root `LICENSE` with the canonical Unlicense text.
- Added `testapp/LICENSE` with the same text.
- Removed root `LICENSE_MIT` and `LICENSE_APACHE`.
- Removed `testapp/LICENSE-MIT` and `testapp/LICENSE-APACHE`.
- Updated `Cargo.toml` to `license = "Unlicense"` and version `0.1.2`.
- Updated `Cargo.lock` for the new crate version.
- Updated README license badge and license section.
- Updated `testapp/package.json` and `testapp/package-lock.json` to `Unlicense`.
- Added `tests/license_metadata.rs` to assert the expected license metadata and absence of old license markers.
- Removed the auto-generated `.gitkeep` placeholder from the draft PR.

## Solution Plan for Similar Repositories

- Treat license changes as release metadata changes, not only documentation edits.
- Use the SPDX identifier in package manager metadata.
- Keep one canonical license file at the package root whenever possible.
- Add a lightweight test or lint that scans maintained metadata files for expected license values.
- Verify generated package output with `wasm-pack build` and `npm pack --dry-run` so published artifacts include the corrected license.

## Verification

Local verification completed successfully:

- `cargo fmt --all -- --check`
- `cargo check --locked --tests --all-features`
- `cargo test --locked --lib --target "$(rustc -vV | sed -n 's/^host: //p')"`
- `cargo test --locked --test license_metadata`
- `cargo clippy --locked --tests --all-features -- -D warnings`
- `wasm-pack build --release --target bundler --out-dir pkg`
- `wasm-pack test --node`
- `npm pack --dry-run` from `pkg/`

The generated npm package metadata was confirmed as `doublets-web@0.1.2` with `license: Unlicense`, and the dry-run tarball includes a single `LICENSE` file. Logs are saved under `logs/`.
Loading