fix(add): empty string is real data, not a missing field
validateAddParams() treated '' as falsy and rejected it with "Missing
required field 'data'" — so a legitimate empty file's first write always
failed. Only null/undefined data (with no vector either) is genuinely
absent; '' is real content. Fixed the check, plus the identical bug in
validateUpdateParams() (truncating a file to empty via overwrite hit the
same falsy check) and in update()/transact()'s update planner, where a
plain `Boolean(params.data)`/truthy check on the resolved vector would have
silently skipped both the deferred-embed marker and the eager re-embed for
an emptied value — a stale vector with no path to ever correct itself.
Verified end-to-end: vfs.writeFile('/empty.txt', '') now succeeds,
readFile() returns '', the file lists, and stat() reports size 0; the
existing "should reject empty string as data" tests (unit + integration)
asserted the old buggy behavior and are updated to assert the fixed
contract instead.
This commit is contained in:
parent
fc516da6eb
commit
258e9042af
6 changed files with 128 additions and 20 deletions
|
|
@ -149,7 +149,33 @@ describe('Zero-Config Parameter Validation', () => {
|
|||
type: NounType.Document
|
||||
} as AddParams)).toThrow('Invalid add() parameters: Missing required field \'data\'')
|
||||
})
|
||||
|
||||
|
||||
it('should accept an empty string as real data — only null/undefined is "missing"', () => {
|
||||
// A legitimate empty file's first write: '' is content, not absence.
|
||||
expect(() => validateAddParams({
|
||||
data: '',
|
||||
type: NounType.Document
|
||||
})).not.toThrow()
|
||||
|
||||
// null/undefined (with no vector) is still the genuine missing-field case.
|
||||
expect(() => validateAddParams({
|
||||
data: null as any,
|
||||
type: NounType.Document
|
||||
})).toThrow('Invalid add() parameters: Missing required field \'data\'')
|
||||
expect(() => validateAddParams({
|
||||
data: undefined,
|
||||
type: NounType.Document
|
||||
})).toThrow('Invalid add() parameters: Missing required field \'data\'')
|
||||
})
|
||||
|
||||
it('deferEmbedding accepts empty-string data (real content, not absence)', () => {
|
||||
expect(() => validateAddParams({
|
||||
data: '',
|
||||
type: NounType.Document,
|
||||
deferEmbedding: true
|
||||
} as AddParams)).not.toThrow()
|
||||
})
|
||||
|
||||
it('should validate NounType', () => {
|
||||
expect(() => validateAddParams({
|
||||
data: 'test',
|
||||
|
|
@ -190,7 +216,22 @@ describe('Zero-Config Parameter Validation', () => {
|
|||
id: 'test-id'
|
||||
})).toThrow('must specify at least one field to update')
|
||||
})
|
||||
|
||||
|
||||
it('empty-string data counts as a real field to update (truncating content)', () => {
|
||||
expect(() => validateUpdateParams({
|
||||
id: 'test-id',
|
||||
data: ''
|
||||
})).not.toThrow()
|
||||
})
|
||||
|
||||
it('deferEmbedding accepts empty-string data on update', () => {
|
||||
expect(() => validateUpdateParams({
|
||||
id: 'test-id',
|
||||
data: '',
|
||||
deferEmbedding: true
|
||||
} as UpdateParams)).not.toThrow()
|
||||
})
|
||||
|
||||
it('should validate NounType if changing', () => {
|
||||
expect(() => validateUpdateParams({
|
||||
id: 'test-id',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue