A time in no particular zone, and a preview missing what it previews
The first audit pass: everything from 0.8.1 to 0.9.8 read as a whole rather than one feature at a time, starting with what a model is actually told. Four of these had shipped as correct. The date line carried a timezone variable that resolves to nothing until somebody chooses one -- so every default account was told times were "in unless they say otherwise", while two comments asserted the line disappeared instead. The prompt preview built its variables without a chat, which is what eleven fragments are gated on, so the whole agent surface was absent from it whatever was ticked. Plan mode was instructed to keep its plan current with a tool that mode withdraws. And knowledge_get returned a document whole where every sibling reader caps and says so, its description promising exactly that. The subagent guidance was wrong in both directions at once: it denied a documented parameter and named seven of twenty-three allowed commands. Both halves are pinned by tests against the real list and the real schema now, because prose and a constant drift the moment one is edited alone. docs/notes/audit-0.9.md carries the findings that are not fixed here, with why -- the ones whose fix would change what a feature does are the user's call, not this pass's. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -415,6 +415,56 @@ async def test_a_failed_fetch_does_not_kill_the_reply(monkeypatch):
|
||||
assert "not reachable" in outcome.content
|
||||
|
||||
|
||||
async def test_a_long_knowledge_document_is_cut_and_the_model_told(db, user_id):
|
||||
"""It was the one reader with no bound at all. `fetch` caps and says so,
|
||||
`file_read` caps and says so, the memories block, the skill index and the
|
||||
project listing all carry budgets -- and `knowledge_get` returned
|
||||
`extracted_text` whole. Its description said "in full", which is why this
|
||||
read as correct: the tool did exactly what it claimed, and what it claimed
|
||||
was one call away from filling the window with nothing reporting it.
|
||||
"""
|
||||
from lembas.db.models import User
|
||||
from lembas.services.library import documents as documents_service
|
||||
|
||||
owner = db.get(User, user_id)
|
||||
base = documents_service.create_base(db, owner=owner, name="Long")
|
||||
document = documents_service.store_upload(
|
||||
db, owner=owner, payload=b"x" * 90_000, filename="big.txt",
|
||||
title="Big", base=base,
|
||||
)
|
||||
|
||||
outcome = await tools_service.run_tool(
|
||||
tools_service.ToolContext(owner_id=user_id),
|
||||
"knowledge_get",
|
||||
json.dumps({"id": document.id}),
|
||||
)
|
||||
assert len(outcome.content) < tools_service.MAX_DOCUMENT_CHARS + 500
|
||||
assert "Cut off here" in outcome.content
|
||||
assert outcome.event["truncated"] is True
|
||||
|
||||
|
||||
async def test_a_short_knowledge_document_is_returned_whole(db, user_id):
|
||||
"""The cap must not become a truncation notice on ordinary documents."""
|
||||
from lembas.db.models import User
|
||||
from lembas.services.library import documents as documents_service
|
||||
|
||||
owner = db.get(User, user_id)
|
||||
base = documents_service.create_base(db, owner=owner, name="Short")
|
||||
document = documents_service.store_upload(
|
||||
db, owner=owner, payload=b"The mallorn is golden.", filename="a.txt",
|
||||
title="Mallorn", base=base,
|
||||
)
|
||||
|
||||
outcome = await tools_service.run_tool(
|
||||
tools_service.ToolContext(owner_id=user_id),
|
||||
"knowledge_get",
|
||||
json.dumps({"id": document.id}),
|
||||
)
|
||||
assert "The mallorn is golden." in outcome.content
|
||||
assert "Cut off here" not in outcome.content
|
||||
assert "truncated" not in outcome.event
|
||||
|
||||
|
||||
async def test_a_long_page_is_cut_and_the_model_told(monkeypatch):
|
||||
"""120_000 characters is roughly thirty thousand tokens. One call would fill
|
||||
an ordinary window and spend an agent chat's whole output budget."""
|
||||
|
||||
Reference in New Issue
Block a user