Docs/skill review + usability fixes found while documenting - #99
Merged
Merged
Conversation
…uctured doc/ Re-applies the unmerged review of claude/fz-docs-skills-review-8xkpgw on top of #98 (doc/ restructuring) and P0-8 (sh:// path resolution), after re-checking every finding against current main by running fz: - doc/limitations.md (new): verified constraints and pitfalls; sh:// part updated for P0-8 (argument appending remains a trap) - fzr examples passing calculators as 4th positional argument (results_dir) - default delimiters (() for variables without delim), no ?var conversion - fzc per-case sub-directories, fzo on case dirs; skill ladder fixed - FZ_RUN_TIMEOUT=0, first Ctrl+C terminates running cases, cache://_ - os.environ after import -> reload_config(); fz.shell imports - funz:// UDP port, SSH auth/host keys, fz list and --global caveats - notebook 02: ?(name) needs varprefix '?' Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012GxLbauyVHBQPCeSow8hdh
3 of 4 tasks
- timeout=0 / FZ_RUN_TIMEOUT=0 mean no timeout (they timed every case out
immediately); negative timeout= raises ValueError
- a model without delim/var_delim recognizes both $(x) and ${x}; the CLI
without --model uses the same default (Python only knew $(x), the CLI
only ${x})
- fzr() raises ValueError when results_dir looks like a calculator URI
(calculator passed as 4th positional argument)
- fzl / fz list: aliases listed by file name with uri and path; --check
validates each command of an alias's models map (installed-wrapper
aliases no longer fail with 'Empty sh:// command'); project aliases
shadow global ones; fzl and fz list share their output code
- .fz/... paths of calculator aliases are resolved against the .fz/ they
were loaded from, so 'fz install --global' wrappers run anywhere
- empty .fz/tmp/fz_temp_* directories are removed after a run
Status of a case without parsable outputs stays 'done' (deliberate, see
test_examples_advanced.test_non_numeric_variables); documented as such.
Docs (doc/, skill, NEWS) updated; tests/test_usability_fixes.py added.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012GxLbauyVHBQPCeSow8hdh
yannrichet
pushed a commit
to Funz/fz.github.io
that referenced
this pull request
Oct 1, 2026
timeout 0, default delimiters, fzr results_dir guard, fz list output and checks, global-install runner paths, .fz/tmp cleanup; fz <= 1.2 behavior noted where users of the released version are affected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012GxLbauyVHBQPCeSow8hdh
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request
Description
Two commits:
03a5b6d), rebased on the doc/ restructuring of P0-8 sh:// path fix + P0-1/P0-3/P0-4/P0-5 follow-ups, README reduction (P1-5) #98 and thesh://fix P0-8. Every finding was checked by running fz on currentmain.086be68), with tests and docs.Related Issues
Relates to #98 (doc restructuring), P0-8 (
sh://path resolution).Type of Change
delimChanges Made
Code fixes (
086be68)main)timeout=0/FZ_RUN_TIMEOUT=0made every case time out immediately (only a model"timeout": 0disabled it)0means "no timeout" at every level (fz/runners/manager.py); a negativetimeout=raisesValueErrordelimonly recognized$(x)(${x}silently left in compiled files) while the CLI without--modelonly recognized${x}delim/var_delim, both$(x)and${x}are recognized (DEFAULT_VAR_DELIM = "(){}",get_var_delim(),_delim_pairs()infz/interpreter.py); the CLI default model no longer forces{}fzr(path, vars, model, "sh://bash run.sh")created a directory namedsh:/bash run.shand ran every case without calculatorfzr()raisesValueErrorwhenresults_dirlooks like a URIfz listshowed aliases byuriand--checkreported installed-wrapper aliases ({"uri": "sh://", "models": {...}}) as failed (Empty sh:// command); a global alias overwrote a project one with the same namepath/uri;--checkvalidates eachmodelscommand; project shadows global;fzlandfz listshare_print_fzl_result()fz install model X --globalwrappers failed outside the install directory (bash .fz/calculators/X.shresolved against the launch dir).fz/...paths of an alias are anchored to the.fz/it was loaded from (_anchor_fz_paths()infz/helpers.py).fz/tmp/fz_temp_*directory left per runNot changed on purpose: a case without parsable outputs keeps
status="done"(the reason is inerror). I first changed it tofailed, then reverted it:tests/test_examples_advanced.py::test_non_numeric_variablesstates this is deliberate ("do not expect failed, as it is a failure due to wrong input, not calculation failure"). The doc now says so explicitly.Behavior changes to note
delimnow also reads${...}as variables: a template containing other${...}text (shell snippets) with such a model will report those names. Models that setdelimare unchanged. Documented inNEWS.md.fz list --format json: calculator keys are alias names (previously URIs) and gainpath/uri.timeout=0/FZ_RUN_TIMEOUT=0change meaning from "immediate timeout" to "no timeout".Documentation (
03a5b6d, updated by086be68)doc/limitations.md: constraints and pitfalls checked by running fz.fz.fzr(...)examples indoc/andexamples/passed the calculator positionally; they now use keywords.?varconversion (notebook 02 fixed),fzcper-case sub-directories, first Ctrl+C terminates running cases,cache://_,sh://argument appending, SSH auth/host keys,funz://UDP port,fzdhas no--format, DataFrame designs Python-only, config read at import (reload_config()),fz.shellimports.skills/fz/,/fz:run,NEWS.mdupdated.Testing Performed
Automated Tests
tests/test_usability_fixes.py(14 tests: each fix, plus the explicit-delimand missing-output cases)ci.ymlignore list),FZ_SKILL_E2E=0: 1055 passed, 92 skipped, 5 failed — the same 5 fail onmainin this environment (permission tests run as root, localyqversion):test_fzi_with_permission_denied,test_install_model_with_permission_error,test_fzc_with_readonly_output_directory,test_evaluate_yq_scalar,test_evaluate_yq_prefix_detection_and_strippingtest_cli_commands.py,test_examples_*.py,test_interrupt_handling.py(-m "not slow"): 71 passed, 7 skipped (same asmain)flake8 fz/ --select=E9,F63,F7,F82: 0test_skill_e2e.pynot run on the branch (runs real Claude sessions)Manual Testing
--globalchecked with the real fz-Modelica wrapper installed into a separateHOMEAdditional Notes
The companion site PR is Funz/fz.github.io#3 (documents the fixed behavior, with notes for fz ≤ 1.2). It links to
doc/limitations.md, so this PR should be merged first.🤖 Generated with Claude Code
https://claude.ai/code/session_012GxLbauyVHBQPCeSow8hdh