vdelta 0.10.0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/adapters/vitest/adapter.js +13 -8
- package/dist/adapters/vitest/adapter.js.map +1 -1
- package/dist/adapters/vitest/capture.d.ts +6 -0
- package/dist/adapters/vitest/reporter.js +10 -2
- package/dist/adapters/vitest/reporter.js.map +1 -1
- package/dist/tree-digest.js +99 -14
- package/dist/tree-digest.js.map +1 -1
- package/package.json +2 -2
- package/spec/veridelta-1.md +13 -6
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ agent (or a CI gate reviewing an agent's PR) "you fixed one thing and broke
|
|
|
15
15
|
another" — a verification delta can, and when two runs are not comparable it
|
|
16
16
|
**abstains instead of guessing**.
|
|
17
17
|
|
|
18
|
-
- Runner support (MVP): **vitest v4** (native reporter, structured channel only)
|
|
18
|
+
- Runner support (MVP): **vitest v4 / v5** (native reporter, structured channel only)
|
|
19
19
|
- Zero runtime dependencies; Node ≥ 22
|
|
20
20
|
- Machine-verified against the [conformance suite](conformance/) —
|
|
21
21
|
46 fixtures covering the spec's invariants, adversarial inputs, and a
|
|
@@ -55,12 +55,13 @@ function findVitestToken(cmd) {
|
|
|
55
55
|
return null;
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
58
|
-
* vitest 4.x CLI flags that always take their value as a *separate*
|
|
59
|
-
* token (`--flag value`), never combined into the flag token itself.
|
|
60
|
-
* by {@link splitCommandSelector} to recognize `--flag value` pairs and
|
|
61
|
-
* them into a single `--flag=value` canonical token so that
|
|
62
|
-
* and `=`-joined invocations normalize to the same command
|
|
63
|
-
* therefore the same stream key — see `streamKey` in
|
|
58
|
+
* vitest 4.x / 5.x CLI flags that always take their value as a *separate*
|
|
59
|
+
* argv token (`--flag value`), never combined into the flag token itself.
|
|
60
|
+
* Used by {@link splitCommandSelector} to recognize `--flag value` pairs and
|
|
61
|
+
* fold them into a single `--flag=value` canonical token so that
|
|
62
|
+
* space-separated and `=`-joined invocations normalize to the same command
|
|
63
|
+
* array (and therefore the same stream key — see `streamKey` in
|
|
64
|
+
* src/compare.ts).
|
|
64
65
|
*
|
|
65
66
|
* Deliberately excludes flags whose value is *optional*
|
|
66
67
|
* (`--changed`, `--silent`, `--coverage`, `--browser`, `--inspect`, etc.):
|
|
@@ -72,8 +73,12 @@ function findVitestToken(cmd) {
|
|
|
72
73
|
* splitting and an abstain (`comparability: 'none'`) rather than a
|
|
73
74
|
* false-positive comparison.
|
|
74
75
|
*
|
|
75
|
-
* Maintenance: this list targets vitest 4.x
|
|
76
|
-
* vitest
|
|
76
|
+
* Maintenance: this list targets vitest 4.x and 5.x; re-checked against
|
|
77
|
+
* vitest 5.0.0's CLI option table (dist/chunks/cac.*.js) on 2026-09-14 —
|
|
78
|
+
* every value-taking flag listed here is still defined with the same arity
|
|
79
|
+
* (`--minWorkers` / `--workspace` were already absent from 4.1.10's table
|
|
80
|
+
* and are kept for records made by older vitest). Revisit again when
|
|
81
|
+
* bumping past vitest 5.x (see issue #15 Open Question — no automated
|
|
77
82
|
* mechanism keeps this in sync with vitest's own CLI surface).
|
|
78
83
|
*/
|
|
79
84
|
const VITEST_VALUE_FLAGS = new Set([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/vitest/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAEL,mBAAmB,GAKpB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,eAAe,CAAA;AAEtB;;;;;GAKG;AACH,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B;;;;GAIG;AACH,SAAS,kBAAkB;IACzB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,qBAAqB,CAAA;AAE9C,SAAS,UAAU,CAAC,OAAuB;IACzC,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,CAAA;AAC7C,CAAC;AAED,8EAA8E;AAC9E,SAAS,WAAW,CAAC,OAAuB;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY,CAAA;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,SAAS,eAAe,CAAC,GAAsB;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAE,CAAA;QACrB,IAAI,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ;YACnE,OAAO,CAAC,CAAA;IACZ,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/vitest/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -69,6 +69,12 @@ export interface Capture {
|
|
|
69
69
|
sequencer: string | null;
|
|
70
70
|
shuffle_tests: boolean;
|
|
71
71
|
concurrent: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Numeric only when tests shuffle (`shuffle`) is enabled, or the
|
|
74
|
+
* resolved sequencer is `RandomSequencer`. Otherwise `null`, even if
|
|
75
|
+
* vitest itself holds a seed value (vitest 5 unconditionally backfills
|
|
76
|
+
* `sequence.seed ??= Date.now()` in `resolveConfig`, issue #78).
|
|
77
|
+
*/
|
|
72
78
|
seed: number | null;
|
|
73
79
|
};
|
|
74
80
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* vitest v4 Reporter (Reported Tasks API) — the vdelta capture side of the
|
|
2
|
+
* vitest v4 / v5 Reporter (Reported Tasks API) — the vdelta capture side of the
|
|
3
3
|
* adapter. Structured-first (§12): consumes only the runner's structured
|
|
4
4
|
* channel (TestCase results, options, locations, console callbacks), never
|
|
5
5
|
* rendered output. Writes a Capture dump to $VDELTA_CAPTURE_FILE at run end;
|
|
@@ -29,6 +29,14 @@ export function captureRunnerConfig(config) {
|
|
|
29
29
|
: 0;
|
|
30
30
|
const sequence = c?.sequence;
|
|
31
31
|
const sequencer = sequence?.sequencer;
|
|
32
|
+
// vitest's own `Vitest#getSeed()` semantics: the seed only shapes execution
|
|
33
|
+
// order (and therefore evidence) when tests or files are shuffled. vitest 4
|
|
34
|
+
// resolveConfig sets `seed ??= Date.now()` only under that condition
|
|
35
|
+
// (coverage.*.js:481); vitest 5 sets it unconditionally (index.*.js), so
|
|
36
|
+
// an unconditional capture would make config_digest unique per run and
|
|
37
|
+
// every compare abstain with baseline-missing (issue #78).
|
|
38
|
+
const shuffled = sequence?.shuffle === true ||
|
|
39
|
+
(typeof sequencer === 'function' && sequencer.name === 'RandomSequencer');
|
|
32
40
|
return {
|
|
33
41
|
include_task_location: c?.includeTaskLocation === true,
|
|
34
42
|
truncate_threshold: chaiConfig?.truncateThreshold ?? null,
|
|
@@ -44,7 +52,7 @@ export function captureRunnerConfig(config) {
|
|
|
44
52
|
sequencer: typeof sequencer === 'function' ? sequencer.name : null,
|
|
45
53
|
shuffle_tests: sequence?.shuffle === true,
|
|
46
54
|
concurrent: sequence?.concurrent === true,
|
|
47
|
-
seed: typeof sequence?.seed === 'number' ? sequence.seed : null,
|
|
55
|
+
seed: shuffled && typeof sequence?.seed === 'number' ? sequence.seed : null,
|
|
48
56
|
},
|
|
49
57
|
};
|
|
50
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../src/adapters/vitest/reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAQvC,OAAO,EACL,eAAe,GAIhB,MAAM,cAAc,CAAA;AA4BrB;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAe;IACjD,MAAM,CAAC,GAAG,MAAwC,CAAA;IAClD,MAAM,UAAU,GAAG,CAAC,EAAE,UAAU,CAAA;IAEhC,MAAM,KAAK,GAAG,CAAC,EAAE,KAAK,CAAA;IACtB,MAAM,UAAU,GACd,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,KAAK,KAAK,IAAI;YACZ,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAQ,KAA6B,CAAC,KAAK,KAAK,QAAQ;YAC1D,CAAC,CAAE,KAA2B,CAAC,KAAK;YACpC,CAAC,CAAC,CAAC,CAAA;IAET,MAAM,QAAQ,GAAG,CAAC,EAAE,QAAQ,CAAA;IAC5B,MAAM,SAAS,GAAG,QAAQ,EAAE,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../src/adapters/vitest/reporter.ts"],"names":[],"mappings":"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"}
|
package/dist/tree-digest.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* claudedocs/2026-07-16-expA-tree-digest.md, ported verbatim):
|
|
4
4
|
* a git tree object id over tracked+staged+unstaged+untracked files,
|
|
5
5
|
* excluding committed-gitignore'd paths, computed against a dedicated
|
|
6
|
-
* throwaway index
|
|
6
|
+
* throwaway index, with host-dependent git settings pinned.
|
|
7
7
|
* Rendered as a bare 40-hex OID (documented deviation from sha256:).
|
|
8
8
|
*
|
|
9
9
|
* treeDigest() is read-only with respect to the observed repo: all git
|
|
@@ -13,10 +13,51 @@
|
|
|
13
13
|
* handles linked worktrees whose objects live in the common dir) are made
|
|
14
14
|
* available for reads through GIT_ALTERNATE_OBJECT_DIRECTORIES. The
|
|
15
15
|
* throwaway directory is removed again once the digest has been computed.
|
|
16
|
+
*
|
|
17
|
+
* The throwaway index (GIT_INDEX_FILE) is seeded from a byte copy of the
|
|
18
|
+
* repository's real index file (resolved via `--git-path index`, which
|
|
19
|
+
* yields the per-worktree index for linked worktrees) with its mtime
|
|
20
|
+
* preserved, so git's stat cache is honoured and `add -A` re-hashes only
|
|
21
|
+
* files whose stat data changed, keeping cost proportional to dirty files
|
|
22
|
+
* instead of tracked files. `add -A` + `write-tree` reconcile the index
|
|
23
|
+
* with the working tree so the resulting tree id is independent of the
|
|
24
|
+
* seed (verified for the S1-S17 scenarios of issue #81 and enforced by
|
|
25
|
+
* tests/unit/tree-digest-parity.test.ts).
|
|
26
|
+
*
|
|
27
|
+
* (1) racy-git: correctness of the stat-cache shortcut rests on git's
|
|
28
|
+
* racy-git handling (entries whose mtime is not older than the index
|
|
29
|
+
* file's mtime are re-read rather than trusted, and racily-clean entries
|
|
30
|
+
* are size-smudged at write time); the copy preserves the real index's
|
|
31
|
+
* mtime so these semantics are identical to git's own; the issue's 20/20
|
|
32
|
+
* same-size-same-second sample is evidence, not proof; environments that
|
|
33
|
+
* rewrite file stat data behind git's back (tools that restore mtimes,
|
|
34
|
+
* some sync/backup agents) can break this premise -- when in doubt such
|
|
35
|
+
* environments should be treated as unverified.
|
|
36
|
+
*
|
|
37
|
+
* (2) split-index / extensions: an index with the `link` extension
|
|
38
|
+
* (core.splitIndex) still resolves `sharedindex.*` from the real git dir,
|
|
39
|
+
* so a copied index works (S14 in #81); however core.untrackedCache,
|
|
40
|
+
* core.fsmonitor and index.sparse were all unset in every repo the change
|
|
41
|
+
* was validated against, and behaviour with those enabled is UNVERIFIED.
|
|
42
|
+
* assume-unchanged (CE_VALID) and skip-worktree (sparse-checkout) entries
|
|
43
|
+
* are handled explicitly: `add -A` skips them via ie_match_stat without
|
|
44
|
+
* stat'ing the working tree, so a copied index carrying either flag on a
|
|
45
|
+
* changed file would silently keep the stale HEAD content. After copying,
|
|
46
|
+
* `git ls-files -v` is run against the throwaway index and, if any entry
|
|
47
|
+
* reports a lowercase tag (assume-unchanged) or an `S`/`s` tag
|
|
48
|
+
* (skip-worktree), the copy is discarded and seeding falls back to
|
|
49
|
+
* `read-tree` (note 3) instead, which always re-stats every path via
|
|
50
|
+
* `add -A`. Covered by S16 (assume-unchanged) and S17 (skip-worktree) in
|
|
51
|
+
* tests/unit/tree-digest-parity.test.ts.
|
|
52
|
+
*
|
|
53
|
+
* (3) fallback: when the real index file does not exist (fresh `git
|
|
54
|
+
* init`, checkout from bare, `rm .git/index`) or cannot be copied, the
|
|
55
|
+
* index is seeded with `git read-tree HEAD` (or `read-tree --empty` for
|
|
56
|
+
* an unborn HEAD) exactly as before; this fallback MUST be kept.
|
|
16
57
|
*/
|
|
17
58
|
import { execFile } from 'node:child_process';
|
|
18
59
|
import { randomUUID } from 'node:crypto';
|
|
19
|
-
import { mkdir, rm } from 'node:fs/promises';
|
|
60
|
+
import { copyFile, mkdir, rm, stat, utimes } from 'node:fs/promises';
|
|
20
61
|
import { tmpdir } from 'node:os';
|
|
21
62
|
import { delimiter, join } from 'node:path';
|
|
22
63
|
import { promisify } from 'node:util';
|
|
@@ -38,17 +79,59 @@ async function git(worktree, args, env) {
|
|
|
38
79
|
});
|
|
39
80
|
return stdout.trim();
|
|
40
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Seed the throwaway index by copying the repository's real index file
|
|
84
|
+
* byte-for-byte, preserving its mtime (see header note 1: preserving
|
|
85
|
+
* mtime keeps racy-git behaviour identical to git's own handling of the
|
|
86
|
+
* real index). Returns false when the real index does not exist or the
|
|
87
|
+
* copy cannot be completed, in which case any partial copy is removed and
|
|
88
|
+
* the caller MUST fall back to `read-tree` (header note 3).
|
|
89
|
+
*/
|
|
90
|
+
async function seedFromRealIndex(realIndex, idx) {
|
|
91
|
+
try {
|
|
92
|
+
const st = await stat(realIndex);
|
|
93
|
+
if (!st.isFile())
|
|
94
|
+
return false;
|
|
95
|
+
await copyFile(realIndex, idx);
|
|
96
|
+
await utimes(idx, st.atime, st.mtime);
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
await rm(idx, { force: true });
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* `git ls-files -v` tags each entry H (cached), S (skip-worktree), M
|
|
106
|
+
* (unmerged), R (removed), C (modified/changed) or K (to be killed); the
|
|
107
|
+
* tag is lowercased when the entry also has the assume-unchanged
|
|
108
|
+
* (CE_VALID) bit set. `add -A` reconciles the index against the working
|
|
109
|
+
* tree via ie_match_stat, which treats both assume-unchanged and
|
|
110
|
+
* skip-worktree entries as trusted and skips re-stat'ing them -- so a
|
|
111
|
+
* copied real index carrying either flag on a changed file would leave the
|
|
112
|
+
* throwaway index (and therefore the resulting tree) pinned to the stale
|
|
113
|
+
* content. Detect that here so the caller can fall back to a `read-tree`
|
|
114
|
+
* seed, which re-stats every path.
|
|
115
|
+
*/
|
|
116
|
+
function hasUntrustworthyIndexFlags(lsFilesOutput) {
|
|
117
|
+
return lsFilesOutput
|
|
118
|
+
.split('\n')
|
|
119
|
+
.some((line) => line !== '' && /^[a-z]|^[Ss]/.test(line));
|
|
120
|
+
}
|
|
41
121
|
export async function treeDigest(worktree) {
|
|
42
122
|
const idx = join(tmpdir(), `vd-idx-${randomUUID()}`);
|
|
43
123
|
const objDir = join(tmpdir(), `vd-obj-${randomUUID()}`);
|
|
44
124
|
try {
|
|
45
125
|
await mkdir(objDir, { recursive: true });
|
|
46
|
-
const
|
|
126
|
+
const paths = await git(worktree, [
|
|
47
127
|
'rev-parse',
|
|
48
128
|
'--path-format=absolute',
|
|
49
129
|
'--git-path',
|
|
50
130
|
'objects',
|
|
131
|
+
'--git-path',
|
|
132
|
+
'index',
|
|
51
133
|
]);
|
|
134
|
+
const [realObjects = '', realIndex = ''] = paths.split(/\r?\n/);
|
|
52
135
|
const existingAlternates = process.env.GIT_ALTERNATE_OBJECT_DIRECTORIES;
|
|
53
136
|
const alternates = existingAlternates
|
|
54
137
|
? `${realObjects}${delimiter}${existingAlternates}`
|
|
@@ -58,18 +141,20 @@ export async function treeDigest(worktree) {
|
|
|
58
141
|
GIT_OBJECT_DIRECTORY: objDir,
|
|
59
142
|
GIT_ALTERNATE_OBJECT_DIRECTORIES: alternates,
|
|
60
143
|
};
|
|
61
|
-
let
|
|
62
|
-
|
|
63
|
-
await git(worktree, ['
|
|
64
|
-
|
|
65
|
-
catch {
|
|
66
|
-
hasHead = false;
|
|
67
|
-
}
|
|
68
|
-
if (hasHead) {
|
|
69
|
-
await git(worktree, ['read-tree', 'HEAD'], env);
|
|
144
|
+
let seeded = await seedFromRealIndex(realIndex, idx);
|
|
145
|
+
if (seeded &&
|
|
146
|
+
hasUntrustworthyIndexFlags(await git(worktree, ['ls-files', '-v'], env))) {
|
|
147
|
+
seeded = false;
|
|
70
148
|
}
|
|
71
|
-
|
|
72
|
-
|
|
149
|
+
if (!seeded) {
|
|
150
|
+
let hasHead = true;
|
|
151
|
+
try {
|
|
152
|
+
await git(worktree, ['rev-parse', '--verify', '-q', 'HEAD']);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
hasHead = false;
|
|
156
|
+
}
|
|
157
|
+
await git(worktree, ['read-tree', hasHead ? 'HEAD' : '--empty'], env);
|
|
73
158
|
}
|
|
74
159
|
await git(worktree, ['add', '-A'], env);
|
|
75
160
|
return await git(worktree, ['write-tree'], env);
|
package/dist/tree-digest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-digest.js","sourceRoot":"","sources":["../src/tree-digest.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tree-digest.js","sourceRoot":"","sources":["../src/tree-digest.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vdelta",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.2",
|
|
4
4
|
"description": "Reference implementation of veridelta/1 — proof-carrying verification deltas for coding-agent development loops",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -54,6 +54,6 @@
|
|
|
54
54
|
"@playwright/test": "1.49.1",
|
|
55
55
|
"@types/node": "^24.0.0",
|
|
56
56
|
"typescript": "^5.9.0",
|
|
57
|
-
"vitest": "^4.0.0"
|
|
57
|
+
"vitest": "^4.0.0 || ^5.0.0"
|
|
58
58
|
}
|
|
59
59
|
}
|
package/spec/veridelta-1.md
CHANGED
|
@@ -199,12 +199,19 @@ full digest.
|
|
|
199
199
|
git tree object id over the union of tracked, staged, unstaged, and untracked
|
|
200
200
|
files, excluding paths ignored by committed `.gitignore`/`.gitattributes`
|
|
201
201
|
rules. Implementations MUST compute it against a dedicated, throwaway index
|
|
202
|
-
(`GIT_INDEX_FILE`)
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
tree
|
|
206
|
-
|
|
207
|
-
|
|
202
|
+
(`GIT_INDEX_FILE`), followed by `git add -A` and `git write-tree`, so that the
|
|
203
|
+
operation never mutates the repository's real index or working tree. The
|
|
204
|
+
throwaway index MAY be seeded from `HEAD` (`git read-tree HEAD`, or
|
|
205
|
+
`read-tree --empty` for an unborn `HEAD`) or from a byte copy of the
|
|
206
|
+
repository's real index file (which carries git's stat cache and avoids
|
|
207
|
+
re-hashing unchanged tracked files); because `git add -A` reconciles the
|
|
208
|
+
index with the working tree before `write-tree`, the resulting id MUST NOT
|
|
209
|
+
depend on which seed was used. To keep the digest deterministic and
|
|
210
|
+
independent of host and time, the computation MUST pin
|
|
211
|
+
`core.autocrlf=false`, `core.eol=lf`, and `core.excludesFile=/dev/null`, and
|
|
212
|
+
MUST NOT depend on file mtimes (an implementation MAY consult git's stat
|
|
213
|
+
cache to skip re-hashing, relying on git's racy-git detection, provided the
|
|
214
|
+
resulting id equals that of a full re-hash). For a clean
|
|
208
215
|
checkout the resulting id is identical to `git rev-parse HEAD^{tree}`, which a
|
|
209
216
|
verifier MAY use directly as the canonical form (subject to the conditions of
|
|
210
217
|
§11.3). The digest records submodules solely by their gitlink commit id; it
|