Skip to content

Commit 38eb84b

Browse files
BeneODevclaude
andauthored
docs: the .env change was a fix, and two lists had gone stale (#21)
**The changelog entry moves from Changed to Fixed.** The larger half of it was a defect: `--env-file` has said "instead of looking for one" in its own help since the day it was added, and read the named file after everything the search found. A flag meant to make one client entry self-contained isolated nothing, because a setting the named file omitted was still answered by whatever was on the machine. The entry now says that, and separates it from the half that is a decision - the search taking the highest file rather than layering them, so both configuration files follow one rule. SPECS 6 gains the same split, since the reasoning is what that section is for. **SPECS 14.1 still said questions 2 and 3 need write calls against a test account.** Both were answered on 2026-08-20 and 21 and are struck through in section 16, which states two paragraphs later that nothing is left a test account could answer. The sentence now describes how the questions were actually closed. **The layout in these guidelines had lost two modules**: `articles` among the tool groups and `stamp` in the interface. Both are named in SPECS 4, so the two documents disagreed about what the tree contains. Checked and unchanged: twenty-five tools, a tool list of 52,221 characters, the longest description at 674, coverage 95.63% against a badge that says 96, every section reference resolving, and the README tables against the registry. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
1 parent b8f2749 commit 38eb84b

3 files changed

Lines changed: 40 additions & 22 deletions

File tree

CHANGELOG.md

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,23 @@ housekeeping are out of scope here — design decisions live in
1313

1414
## [Unreleased]
1515

16-
### Changed
16+
### Fixed
17+
18+
- **`--env-file` now reads that file and no other.** Its help has always said
19+
"instead of looking for one", and it did not: the named file was read
20+
*after* every file the search found, so a setting missing from it was still
21+
supplied by whatever else happened to be on the machine. Pointing at a file
22+
is now what it appears to be.
23+
24+
The search behind it follows the same rule: the highest-precedence `.env`
25+
that exists is the file, and the ones below it are not read. That half was
26+
deliberate before and is a decision rather than a defect - one rule for both
27+
configuration files, since `--tools-file` and the policy search never
28+
combined anything either.
1729

18-
- **One `.env` applies now, never several.** The settings files used to be
19-
merged key by key, so a value could arrive from a file you had not named and
20-
had no reason to look at. The highest-precedence file that exists is the
21-
file, and the ones below it are not read. `--env-file` names it and skips
22-
the search entirely, which is what `--tools-file` has always done for the
23-
policy file. A real environment variable still beats whatever the file says,
24-
so a container can pass its transport settings while the key lives in the
25-
mounted file.
30+
A real environment variable still beats whatever the file says, so a
31+
container can pass its transport settings while the key lives in the mounted
32+
file.
2633

2734
**This can change what your server reads.** If a setting of yours lives in a
2835
lower-precedence file - a per-user `.env` under a checkout that has its own,

CLAUDE.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,12 @@ src/benethos_lexware_office_mcp/
7979
transport.py # HTTP: the bearer guard, the host allowlist, the settings watch
8080
envfile.py # reading and writing a .env, comments left alone
8181
configui/ # the local configuration interface, `setup` serves it
82-
# render, state, cost, probe, profiles, transfer,
83-
# pages, app - never part of the MCP server process
82+
# render, state, cost, probe, stamp, profiles,
83+
# transfer, pages, app - never part of the server process
8484
tools/
8585
_base.py # registration helper, tidies the docstring first
8686
<group>.py # one module per resource group, thin tool definitions
87-
# built: diagnostics, contacts, vouchers,
87+
# built: diagnostics, contacts, vouchers, articles,
8888
# sales_documents, files, master_data
8989
tests/ # offline, httpx MockTransport
9090
smoke.py # read-only live check, run by hand, never collected

SPECS.md

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -690,14 +690,23 @@ still meets it.
690690
- **One `.env` applies, and the environment beats it.** A setting resolves as
691691
that one file, then the real environment, which has the last word - the
692692
order Docker and uvicorn use, and what lets a client override one value
693-
without rewriting a file. **The files themselves do not combine**, changed
694-
on 2026-08-23: they used to merge key by key, so a value could arrive from a
693+
without rewriting a file. **The files themselves do not combine**, since
694+
2026-08-23: they used to merge key by key, so a value could arrive from a
695695
file nobody had named and no page could sensibly report where it came from.
696-
Naming one with `--env-file` now replaces the search, exactly as
697-
`--tools-file` always did, and the search itself takes the highest candidate
698-
that exists rather than layering them. The environment stays a separate
699-
layer because the container depends on it: the transport settings arrive as
700-
real variables while the key lives in the mounted file.
696+
697+
**Half of that was a defect rather than a decision.** `--env-file` was
698+
documented as naming the file "instead of looking for one" from the day it
699+
was added, in its own help text, in the epilog and in the table below, and
700+
the code read it *after* every file the search found. So a flag whose whole
701+
purpose was to make one client entry self-contained did not isolate
702+
anything: a setting the named file omitted was still answered by the
703+
machine. It now replaces the search, exactly as `--tools-file` always did.
704+
705+
The other half is a decision: the search takes the highest candidate that
706+
exists rather than layering them, so both configuration files follow one
707+
rule and "which file is this value from" has one answer. The environment
708+
stays a separate layer because the container depends on it: the transport
709+
settings arrive as real variables while the key lives in the mounted file.
701710
`--log-level` and `--tools-file` are the two flags that outrank the
702711
environment, because each is a decision about this one run. `--tools` and
703712
`--version` are actions rather than settings and have no equivalent at all.
@@ -1825,9 +1834,11 @@ The consequences are the point of writing this down.
18251834
shapes. Only a live run catches that, and only someone holding an account
18261835
can perform one. This is why statements about the API in this document carry
18271836
**(to verify)** until a live call has confirmed them.
1828-
- **The open questions below cannot be closed by CI.** Questions 2 and 3 need
1829-
write calls against a disposable test account, see section 11.1. That is a
1830-
deliberate act by the account owner, not something automation initiates.
1837+
- **The open questions below could not be closed by CI**, and none of them was.
1838+
Each was answered by a live call, or in one case by a decision not to make
1839+
one: a question about write behaviour needs write calls against a disposable
1840+
test account, see section 11.1, which is a deliberate act by the account
1841+
owner rather than something automation initiates.
18311842

18321843
## 15. Conventions
18331844

0 commit comments

Comments
 (0)