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
40 changes: 21 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,17 @@ The package has no runtime code and no dependencies. It ships the config files,

## ✨ What's New

### Latest: v1.2.3 (October 2026)
### Latest: v1.2.4 (October 2026)

- **Headers restamped under fix-headers 2.1.4** β€” the repository's own header pass now runs on `@cldmv/fix-headers` 2.1.4 and restamped 37 internal files: dates are written in ISO 8601 form, 23 `@Date` timestamps that did not match their written date (the Dependabot config and 22 workflows copied from the `CLDMV/.github` templates) were corrected, and each header gained the empty frame line inside its opening and closing. The published `fix-headers.json` and every shipped setting are unchanged (#12).
- [View full v1.2.3 Changelog](https://github.com/CLDMV/configs/blob/master/docs/changelog/v1/v1.2.3.md)
- **`@Last modified by` follows real edits** β€” the shared `fix-headers.json` sets `forceLastModifiedAuthorUpdate` to `false`. With fix-headers 2.2.0, a run that only rewrites a header (date format, spacing, a corrected `@Date`) updates `@Last modified time` but keeps `@Last modified by`, which now changes only when a file's content was edited. Together with v1.2.3's `forceAuthorUpdate: false`, no fix-headers run rewrites anyone's authorship. Upgrade extending repositories to fix-headers 2.2.0 or later (#20).
- [View full v1.2.4 Changelog](https://github.com/CLDMV/configs/blob/master/docs/changelog/v1/v1.2.4.md)

### Recent Releases

- **v1.2.3** (October 2026) β€” the shared `fix-headers.json` keeps an existing `@Author` (`forceAuthorUpdate: false`, #16), and the repository's own headers are restamped under fix-headers 2.1.4 (#12) ([Changelog](https://github.com/CLDMV/configs/blob/master/docs/changelog/v1/v1.2.3.md))
- **v1.2.2** (October 2026) β€” the CI `βœ… Required PR Check` mirror job runs on every path instead of being skipped on in-repo PRs (#10) ([Changelog](https://github.com/CLDMV/configs/blob/master/docs/changelog/v1/v1.2.2.md))
- **v1.2.1** (October 2026) β€” a skipped PR run no longer satisfies the `βœ… Required PR Check` ruleset (#8) ([Changelog](https://github.com/CLDMV/configs/blob/master/docs/changelog/v1/v1.2.1.md))
- **v1.2.0** (October 2026) β€” the shared `fix-headers.json` sets `margin: 1`, so fix-headers and Prettier agree on one blank line after a header; this changes fix-headers 2.1+ output for extending repositories (#7) ([Changelog](https://github.com/CLDMV/configs/blob/master/docs/changelog/v1/v1.2.0.md))
- **v1.1.1** (September 2026) β€” the README is rewritten in the CLDMV package style (#3) ([Changelog](https://github.com/CLDMV/configs/blob/master/docs/changelog/v1/v1.1.1.md))

πŸ“š **For complete version history, see [docs/changelog/](https://github.com/CLDMV/configs/tree/master/docs/changelog/) and the [GitHub Releases](https://github.com/CLDMV/configs/releases).**

Expand All @@ -44,7 +44,7 @@ The package has no runtime code and no dependencies. It ships the config files,

### Requirements

- A tool that can extend a shared config. For fix-headers that is **v2.0.0 or later**: `extends` arrives in [CLDMV/fix-headers#88](https://github.com/CLDMV/fix-headers/pull/88), and several of the options this config sets (`fixCreatedDate`, `normalizeDateFormat`, `strictCreatedDate`) in [CLDMV/fix-headers#67](https://github.com/CLDMV/fix-headers/pull/67). Older releases cannot resolve `extends` and ignore those options.
- A tool that can extend a shared config. For fix-headers that is **v2.0.0 or later**: `extends` arrives in [CLDMV/fix-headers#88](https://github.com/CLDMV/fix-headers/pull/88), and several of the options this config sets (`fixCreatedDate`, `normalizeDateFormat`, `strictCreatedDate`) in [CLDMV/fix-headers#67](https://github.com/CLDMV/fix-headers/pull/67). Older releases cannot resolve `extends` and ignore those options. Use **v2.2.0 or later** for the author rules: from 2.2.0, `@Last modified by` changes only when a file's content was edited ([CLDMV/fix-headers#128](https://github.com/CLDMV/fix-headers/pull/128)).

### Install

Expand Down Expand Up @@ -107,30 +107,32 @@ Each file is exposed through `package.json` `exports`, so it resolves by its spe
"companyName": "Catalyzed Motivation Inc.",
"copyrightStartYear": 2013,
"forceAuthorUpdate": false,
"forceLastModifiedAuthorUpdate": true,
"forceLastModifiedAuthorUpdate": false,
"fixCreatedDate": true,
"normalizeDateFormat": true,
"strictCreatedDate": true,
"margin": 1
}
```

| Option | Value | Effect |
| ------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `includeFolders` | `["."]` | Scan the whole project; ignore files (`.gitignore` and everything else git honours) still exclude what they list |
| `useGpgSignerAuthor` | `true` | Take the `@Author` name from the user ID of the OpenPGP key git signs commits with |
| `company` | `"CLDMV"` | Write `@Author` as `Name <CLDMV>` |
| `companyName` | `"Catalyzed Motivation Inc."` | The copyright holder in `@Copyright`. fix-headers v2 has no built-in holder and otherwise reads it from the manifest author (`CLDMV`) |
| `copyrightStartYear` | `2013` | The first year of the `@Copyright` range, for every file |
| `forceAuthorUpdate` | `false` | Never rewrite an existing `@Author` / `@Email`; they record who created the file. A missing value is still filled in |
| `forceLastModifiedAuthorUpdate` | `true` | Always rewrite `@Last modified by` to the detected values |
| `fixCreatedDate` | `true` | Move an existing `@Date` back to the oldest of itself, the file's first git commit and its filesystem creation time |
| `normalizeDateFormat` | `true` | Write every header date in the git `%aI` form (`2026-03-01T17:59:32-08:00`) |
| `strictCreatedDate` | `true` | With `--check`, fail on an `@Date` later than the file's first commit or creation time instead of only warning |
| `margin` | `1` | One blank line between the header and the file's next content. The fix-headers default is two, which prettier collapses to one |
| Option | Value | Effect |
| ------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `includeFolders` | `["."]` | Scan the whole project; ignore files (`.gitignore` and everything else git honours) still exclude what they list |
| `useGpgSignerAuthor` | `true` | Take the `@Author` name from the user ID of the OpenPGP key git signs commits with |
| `company` | `"CLDMV"` | Write `@Author` as `Name <CLDMV>` |
| `companyName` | `"Catalyzed Motivation Inc."` | The copyright holder in `@Copyright`. fix-headers v2 has no built-in holder and otherwise reads it from the manifest author (`CLDMV`) |
| `copyrightStartYear` | `2013` | The first year of the `@Copyright` range, for every file |
| `forceAuthorUpdate` | `false` | Never rewrite an existing `@Author` / `@Email`; they record who created the file. A missing value is still filled in |
| `forceLastModifiedAuthorUpdate` | `false` | `@Last modified by` follows real edits: it changes only when a file's content was edited, not when fix-headers only rewrites the header (fix-headers 2.2.0+) |
| `fixCreatedDate` | `true` | Move an existing `@Date` back to the oldest of itself, the file's first git commit and its filesystem creation time |
| `normalizeDateFormat` | `true` | Write every header date in the git `%aI` form (`2026-03-01T17:59:32-08:00`) |
| `strictCreatedDate` | `true` | With `--check`, fail on an `@Date` later than the file's first commit or creation time instead of only warning |
| `margin` | `1` | One blank line between the header and the file's next content. The fix-headers default is two, which prettier collapses to one |

An existing `@Author` is never rewritten: it records who created the file, and this config sets `forceAuthorUpdate` to `false` explicitly so the decision is visible and wins over anything earlier in an `extends` chain. A repository can turn it on in its own config for a one-off migration of old author names.

`@Last modified by` records the last person to edit the file. With fix-headers 2.2.0 or later it changes only when the file's content was edited; a run that only rewrites the header (date format, spacing, a corrected `@Date`) updates `@Last modified time` but keeps `@Last modified by`. This config therefore sets `forceLastModifiedAuthorUpdate` to `false` as well. With fix-headers before 2.2.0 that setting keeps the existing `@Last modified by` on every run, so upgrade fix-headers alongside this config.

The full description of every option is in the [fix-headers README](https://github.com/CLDMV/fix-headers#readme).

### Using it by URL
Expand Down
12 changes: 10 additions & 2 deletions docs/changelog/v1/v1.2.3.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@

## Overview

`@cldmv/fix-headers` moves to 2.1.4, and re-running the header pass with the repository's own `fix-headers.json` restamped the headers of 37 files β€” the first full pass under fix-headers 2.x since the repository moved to it in [v1.2.0](./v1.2.0.md). Only header comments in repository-internal files changed (the ESLint and vitest configs, the pre-commit installer, Dependabot config, every workflow and the tests). The published files β€” `fix-headers.json`, `README.md` and `LICENSE` β€” and every shipped setting are unchanged.
`@cldmv/fix-headers` moves to 2.1.4, and re-running the header pass with the repository's own `fix-headers.json` restamped the headers of 37 files β€” the first full pass under fix-headers 2.x since the repository moved to it in [v1.2.0](./v1.2.0.md). Only header comments in repository-internal files changed (the ESLint and vitest configs, the pre-commit installer, Dependabot config, every workflow and the tests). Only those internal headers came from the restamp.

> **Correction:** this release also changed a published setting. [#16](https://github.com/CLDMV/configs/pull/16) merged into `next` before the release and shipped with it: `fix-headers.json` now sets `forceAuthorUpdate` to `false`, so fix-headers keeps an existing `@Author` instead of rewriting it to whoever runs the tool ([#15](https://github.com/CLDMV/configs/issues/15)). These notes originally said `fix-headers.json` was unchanged.

---

Expand All @@ -24,6 +26,12 @@ The 37 restamped headers changed in three ways:

`@Last modified time` was updated on every restamped file, as `forceLastModifiedAuthorUpdate` asks.

## πŸ› Bug Fixes

### Existing `@Author` is never rewritten ([#16](https://github.com/CLDMV/configs/pull/16))

`forceAuthorUpdate` was `true`, so together with `useGpgSignerAuthor` every fix-headers run in an extending repository replaced every file's `@Author` with the name of whoever ran it. `@Author` records who created a file, so the shared config now sets the option to `false` explicitly; a repository can still turn it on in its own config for a one-off migration.

## πŸ“š Documentation

- **NEW:** [docs/changelog/v1/v1.2.3.md](./v1.2.3.md) β€” this changelog, plus backfilled changelog files for [v1.1.0](./v1.1.0.md), [v1.1.1](./v1.1.1.md), [v1.2.0](./v1.2.0.md), [v1.2.1](./v1.2.1.md) and [v1.2.2](./v1.2.2.md).
Expand All @@ -37,4 +45,4 @@ The 37 restamped headers changed in three ways:

## Upgrade notes

- No changes to `fix-headers.json` or any other published file β€” drop-in for v1.2.2.
- `fix-headers.json` sets `forceAuthorUpdate: false` ([#16](https://github.com/CLDMV/configs/pull/16)): an existing `@Author` is kept rather than rewritten to the person running fix-headers. Repositories that relied on the force to migrate old author names can set it to `true` in their own config for that run. Otherwise drop-in for v1.2.2.
49 changes: 49 additions & 0 deletions docs/changelog/v1/v1.2.4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# @cldmv/configs v1.2.4 Changelog

**Release Date**: October 2026
**Release Type**: Patch
**Branch**: `release/1.2.4`

---

## Overview

The shared `fix-headers.json` stops forcing `@Last modified by`. Until now every fix-headers run in an extending repository stamped whoever ran it as the last modifier of every file it touched, even when the only change was a header rewrite such as a new date format. With `forceLastModifiedAuthorUpdate` set to `false` and fix-headers 2.2.0, `@Last modified by` now records the last person who actually edited a file's content, while `@Last modified time` still moves whenever fix-headers rewrites a header.

Together with `forceAuthorUpdate: false`, which shipped in v1.2.3, the shared config no longer rewrites anyone's authorship: `@Author` keeps the file's creator, and `@Last modified by` follows real edits. Extending repositories should upgrade to `@cldmv/fix-headers` 2.2.0 or later alongside this release.

---

## πŸ› Bug Fixes

### `@Last modified by` follows real edits ([#20](https://github.com/CLDMV/configs/pull/20))

`forceLastModifiedAuthorUpdate` was `true`, so every run rewrote `@Last modified by` to the identity running fix-headers (the name on their signing key, or `git config user.name` without one) on every file it changed. A contributor who ran `npm run fix:headers` therefore became the last modifier of every restamped file, even files they never opened ([#15](https://github.com/CLDMV/configs/issues/15)).

The option is now `false`. From fix-headers 2.2.0 ([CLDMV/fix-headers#128](https://github.com/CLDMV/fix-headers/pull/128)) the field changes only when a file's content, everything outside the header, differs from the last commit, or when the file is new:

| What changed in a file | `@Last modified time` | `@Last modified by` | `@Author` |
| ------------------------------------------------------------------- | --------------------- | ------------------------------ | --------- |
| Nothing | unchanged | unchanged | unchanged |
| Only the header (date format, epoch, `@Date`, spacing, filename, …) | updated | unchanged | unchanged |
| Content edited, or a new file | updated | the person running fix-headers | unchanged |

On fix-headers releases before 2.2.0 the same setting keeps the existing `@Last modified by` on every run, real edits included, so the upgrade matters.

## πŸ”§ Dependencies

- `@cldmv/fix-headers` `^2.1.4` β†’ `^2.2.0` ([#20](https://github.com/CLDMV/configs/pull/20)), dev-only. The repository's own header pass ran under 2.2.0 and changed no files.
- `vitest` and `@vitest/coverage-v8` `^5.0.2` β†’ `^5.0.3`, and `globals` `^17.12.0` β†’ `^17.13.0` ([#21](https://github.com/CLDMV/configs/pull/21)), dev-only. The coverage and globals bumps first merged as [#18](https://github.com/CLDMV/configs/pull/18) and [#19](https://github.com/CLDMV/configs/pull/19), two minutes after the v1.2.3 release, and were lost when `next` was reset after that release ([CLDMV/.github#360](https://github.com/CLDMV/.github/issues/360)). #21 re-applies them, together with the vitest bump from [#17](https://github.com/CLDMV/configs/pull/17).

## πŸ“š Documentation

- **NEW:** [docs/changelog/v1/v1.2.4.md](./v1.2.4.md) β€” this changelog.
- README: the `fix-headers.json` table and notes explain both author settings, and the requirements now name fix-headers 2.2.0 as the version the author rules need.
- [v1.2.3](./v1.2.3.md) changelog corrected: that release also shipped `forceAuthorUpdate: false`, which its notes left out.

---

## Upgrade notes

- **Upgrade `@cldmv/fix-headers` to 2.2.0 or later** in every repository that extends this config. On older fix-headers, `@Last modified by` would no longer update even when a file is edited.
- The first fix-headers run after upgrading leaves existing `@Last modified by` values alone and only changes them on files whose content was edited since the last commit. No repository-wide restamp of authors.
2 changes: 1 addition & 1 deletion fix-headers.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"companyName": "Catalyzed Motivation Inc.",
"copyrightStartYear": 2013,
"forceAuthorUpdate": false,
"forceLastModifiedAuthorUpdate": true,
"forceLastModifiedAuthorUpdate": false,
"fixCreatedDate": true,
"normalizeDateFormat": true,
"strictCreatedDate": true,
Expand Down
Loading
Loading