feat(consume): one call over a folder asks every bundle under it
`okf consume <folder>` is the server's `okf_ask` with no bundle named, byte for byte: no ranking of its own, every excerpt carrying its bundle id. `--bundle-id` asks one bundle under the folder. A flag that acts on one bundle's cut is refused by name over a folder rather than dropped, because the server takes none of them. A bundle path reads as before. v1.1 order F, part F2. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
df83c65e32
commit
718c064279
4 changed files with 194 additions and 4 deletions
|
|
@ -137,3 +137,80 @@ def test_a_broken_bundle_under_the_folder_is_reported(folder: Path, tmp_path: Pa
|
|||
assert overview["unreadable"] == [
|
||||
{"directory": "odelagt", "reason": "index.md declares no bundle_id"}
|
||||
]
|
||||
|
||||
|
||||
# --- F2: one call across the folder ------------------------------------------
|
||||
|
||||
|
||||
QUESTIONS = ("hvor lenge hever surdeigen", "hvor ofte vannes tomatene")
|
||||
|
||||
|
||||
def _ask(folder: Path, *extra: str) -> subprocess.CompletedProcess[str]:
|
||||
argv = ["consume", str(folder)]
|
||||
for question in QUESTIONS:
|
||||
argv += ["--question", question]
|
||||
return _okf(*argv, *extra)
|
||||
|
||||
|
||||
def test_one_call_over_a_folder_answers_from_every_bundle(folder: Path) -> None:
|
||||
run = _ask(folder)
|
||||
assert run.returncode == 0, run.stderr
|
||||
reply = json.loads(run.stdout)
|
||||
assert reply["asked"] == ["bakeri", "hage"]
|
||||
assert reply["questions"] == list(QUESTIONS)
|
||||
by_bundle = {answer["bundle_id"]: answer["payload"] for answer in reply["answers"]}
|
||||
assert set(by_bundle) == {"bakeri", "hage"}
|
||||
# Every excerpt names the bundle it came from, and it is the right one.
|
||||
for bundle_id, payload in by_bundle.items():
|
||||
assert payload["excerpts"], bundle_id
|
||||
assert {excerpt["bundle_id"] for excerpt in payload["excerpts"]} == {bundle_id}
|
||||
delivered = {
|
||||
answer["bundle_id"]: " ".join(excerpt["text"] for excerpt in answer["payload"]["excerpts"])
|
||||
for answer in reply["answers"]
|
||||
}
|
||||
assert "tolv timer" in delivered["bakeri"]
|
||||
assert "hver morgen" in delivered["hage"]
|
||||
|
||||
|
||||
def test_one_call_over_a_folder_is_the_servers_own_ask(folder: Path) -> None:
|
||||
"""No ranking of its own: the bytes are `okf_ask`'s with no bundle named."""
|
||||
reply = json.loads(_ask(folder).stdout)
|
||||
assert reply == mcp_server.call_ask(_surface(folder), {"questions": list(QUESTIONS)})
|
||||
|
||||
|
||||
def test_naming_one_bundle_under_the_folder_asks_only_that_one(folder: Path) -> None:
|
||||
reply = json.loads(_ask(folder, "--bundle-id", "hage").stdout)
|
||||
assert reply["asked"] == ["hage"]
|
||||
assert reply == mcp_server.call_ask(
|
||||
_surface(folder), {"questions": list(QUESTIONS), "bundle_id": "hage"}
|
||||
)
|
||||
|
||||
|
||||
def test_an_unknown_bundle_name_is_refused(folder: Path) -> None:
|
||||
run = _ask(folder, "--bundle-id", "finnes-ikke")
|
||||
assert run.returncode == 1
|
||||
assert "bundle_unknown" in run.stderr
|
||||
|
||||
|
||||
def test_a_reading_flag_the_server_does_not_take_is_refused_over_a_folder(folder: Path) -> None:
|
||||
"""A flag that would be silently dropped is refused: the folder door reads
|
||||
exactly as the server reads, and a flag it ignored would make the caller
|
||||
believe in a cut that never happened."""
|
||||
run = _ask(folder, "--no-source-quota")
|
||||
assert run.returncode == 2
|
||||
assert "--no-source-quota" in run.stderr
|
||||
|
||||
|
||||
def test_bundle_id_on_one_bundle_is_refused(folder: Path) -> None:
|
||||
run = _okf("consume", str(folder / "hage"), "--question", "vanning", "--bundle-id", "hage")
|
||||
assert run.returncode == 2
|
||||
assert "--bundle-id" in run.stderr
|
||||
|
||||
|
||||
def test_one_bundle_is_read_as_before(folder: Path) -> None:
|
||||
"""Pointed at one bundle, the payload is the single-bundle payload."""
|
||||
run = _okf("consume", str(folder / "hage"), "--question", "vanning")
|
||||
assert run.returncode == 0, run.stderr
|
||||
payload = json.loads(run.stdout)
|
||||
assert "answers" not in payload
|
||||
assert payload["bundle"]["bundle_id"] == "hage"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue