fix(issue-26): review - an unreadable env file is an error, NUL lines are skipped, integers are ASCII in every locale, empty flags are refused
Merge-workspace review of PR #43 (codex R1-R4, claude R1/R2).
- R1: envfile.parse raises EnvFileError when the file exists but cannot be
read or decoded as a whole; `--shell` prints the cause and exits 1, so the
wrapper stops (rc 1, as before #26) instead of running on defaults, and
mqtt_common's entry points stop on the same error. A bad single line is
still a warning. The wrapper's message no longer claims a read failure
when the cause is elsewhere ("cannot load ... see the line above").
- R2: lib.sh mam_int spells out the ASCII blanks and digits instead of
[[:space:]]/[0-9], which follow the locale: U+2003 30 U+2003 was 30 in the
wrapper and invalid in the runner under en_US.UTF-8. The test oracle
_expected uses the same ASCII rule.
- R3: an integer flag given explicitly with an empty value is refused like
any other invalid value; only an absent flag keeps its default.
- R4: a line holding a NUL byte is skipped with a warning by both loaders;
before, the wrapper read "leftright" and the Python loader died.
- .mam.env.example states the format: no expansion, `export` and bash's own
variables skipped, a trailing `# ...` is part of the value, the environment
wins, an unreadable file is an error.
Tests: unreadable (0000) and invalid-UTF-8 files stop the wrapper and the
Python loader; a NUL line is skipped by both; Unicode blanks/digits are
invalid for mam_int, _positive_int, the wrapper and the runner under C and
en_US.UTF-8; explicit empty values for the five integer flags are refused.
All of them fail on b58edac.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
This commit is contained in:
1 parent
b58edace11
commit
0eec795cd1
7 files changed
+128
-19
No files matched your search
@@ -11,6 +11,19 @@
|
||||
# (shown after each `#default:` line), so an unset/commented variable just keeps
|
||||
# the built-in behaviour. Uncomment + edit only the ones you want to override.
|
||||
#
|
||||
# FORMAT (Issue #26 - one parser, lib_py/delegation/envfile.py, for the
|
||||
# delegate-job wrapper and the Python tools alike; the file is never `source`d):
|
||||
# - one KEY=VALUE per line; blank lines and lines starting with `#` are skipped;
|
||||
# - spaces around the key and the value are removed, and one pair of matching
|
||||
# quotes around the value is removed ("a b" -> a b);
|
||||
# - nothing is expanded: `$HOME`, `${X}`, `$(cmd)` and backticks stay literal,
|
||||
# so write absolute paths; a trailing `# ...` is part of the value;
|
||||
# - `export KEY=...`, a key that is not [A-Za-z_][A-Za-z0-9_]*, a line
|
||||
# without `=`, a line with a NUL byte, and bash's own variables (IFS, PS4,
|
||||
# RANDOM, BASH_*, ...) are skipped with a warning naming the line number;
|
||||
# - a variable already set in the environment wins over this file;
|
||||
# - a file that exists but cannot be read is an error (the wrapper exits 1).
|
||||
#
|
||||
# SECURITY: never put real secrets in this template. Secret-bearing vars use a
|
||||
# `replace_me` placeholder — fill them in only in your local `.mam.env`.
|
||||
# SECURITY NOTE:
|
||||
|
||||
Reference in new issue
Block a user