# Contributor handoff — iamkun/dayjs

> Canonical page: https://codevetter.com/unpack/dayjs/agent-handoff

# Contributor handoff — iamkun/dayjs

Scanned commit 436bde0bcded312781cbe45dc2b0ef079a36d8e3 (2026-09-15). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

Begin with the factory, utilities, constants, and the implementation/declaration/test trio for the target API. Preserve immutable defaults, calendar-versus-elapsed arithmetic, and plugin delegation order. Tests and CI were inspected, not executed, and any later validation must distinguish configured checks from observed results. This brief is a bounded source investigation; it neither establishes exhaustive coverage nor authorizes build, installation, or release actions.
- For core changes, read dayjs construction, parseDate, init, wrapper, and prettyUnit first; these determine accepted inputs, cached state, metadata propagation, and case-sensitive shorthand such as M versus m. — [src/index.js#L39-L108](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/src/index.js#L39-L108) [src/utils.js#L30-L43](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/src/utils.js#L30-L43) [src/constant.js#L13-L24](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/src/constant.js#L13-L24)
- Preserve ES6 and the repository's ESLint conventions: no statement semicolons or trailing commas, extensionless imports, and existing allowance for parameter reassignment; CONTRIBUTING recommends lint and semantic commit messages. — [CONTRIBUTING.md#L7-L11](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/CONTRIBUTING.md#L7-L11) [.eslintrc.json#L13-L24](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/.eslintrc.json#L13-L24) [.eslintrc.json#L39-L42](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/.eslintrc.json#L39-L42)
- Keep default immutability and month-end clamping intact; regression cases already compare January 31 month changes and leap-day year changes with Moment, while badMutable deliberately has different semantics. — [src/index.js#L209-L222](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/src/index.js#L209-L222) [test/manipulate.test.js#L45-L64](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/test/manipulate.test.js#L45-L64) [src/plugin/badMutable/index.js#L8-L23](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/src/plugin/badMutable/index.js#L8-L23)
- Before changing plugin composition, inspect both issue2027 installation-order suites and the captured old-method chains; a plugin's $i marker prevents installing that same function again with different options. — [test/issues/issue2027.correct-order.test.js#L3-L24](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/test/issues/issue2027.correct-order.test.js#L3-L24) [test/issues/issue2027.swapped-order.test.js#L3-L24](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/test/issues/issue2027.swapped-order.test.js#L3-L24) [src/plugin/objectSupport/index.js#L41-L73](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/src/plugin/objectSupport/index.js#L41-L73) [src/index.js#L448-L453](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/src/index.js#L448-L453)
- Treat timezone and UTC as one edit boundary: tests install UTC first, offset-adjusted valueOf governs instant identity, and regression cases separate host DST from target DST. Do not extrapolate conversion coverage to all calendar arithmetic. — [test/plugin/timezone.test.js#L3-L10](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/test/plugin/timezone.test.js#L3-L10) [src/plugin/utc/index.js#L119-L122](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/src/plugin/utc/index.js#L119-L122) [test/plugin/timezone.test.js#L374-L397](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/test/plugin/timezone.test.js#L374-L397) [test/plugin/timezone.test.js#L480-L481](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/test/plugin/timezone.test.js#L480-L481)
- Update matching declarations for public API changes and preserve locale header/name conventions; declaration tests check existence only, and runtime locale callbacks can be richer than the string-only relativeTime declaration fields. — [test/plugin/declarations.test.js#L7-L12](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/test/plugin/declarations.test.js#L7-L12) [test/locale/keys.test.js#L37-L42](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/test/locale/keys.test.js#L37-L42) [types/locale/types.d.ts#L18-L32](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/types/locale/types.d.ts#L18-L32) [src/locale/sl.js#L87-L101](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/src/locale/sl.js#L87-L101)
- Under a later execution-authorized task, start with test-tz or test-tz-plugin for timezone changes, then broaden to npm test and lint; distribution changes also have build/babel and size checks. None of these commands was executed during this investigation. — [package.json#L8-L17](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/package.json#L8-L17) [package.json#L22-L38](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/package.json#L22-L38) [.github/workflows/lint-test.yml#L18-L23](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/.github/workflows/lint-test.yml#L18-L23) [CONTRIBUTING.md#L20-L24](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/CONTRIBUTING.md#L20-L24)
- Edit source and declaration inputs rather than generated distribution files, inspect build filesystem operations before running them, and use README/source/tests for local onboarding because the English detailed docs are relocation notices; publishing is controlled by the separate master release workflow. — [build/index.js#L40-L68](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/build/index.js#L40-L68) [build/esm.js#L29-L38](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/build/esm.js#L29-L38) [README.md#L54-L98](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/README.md#L54-L98) [docs/en/API-reference.md#L1-L3](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/docs/en/API-reference.md#L1-L3) [docs/en/Plugin.md#L1-L3](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/docs/en/Plugin.md#L1-L3) [.github/workflows/release.yml#L1-L12](https://github.com/iamkun/dayjs/blob/436bde0bcded312781cbe45dc2b0ef079a36d8e3/.github/workflows/release.yml#L1-L12)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
