35eb90a58b
gates / consistency-and-conventions (push) Successful in 22s
User report: smb-client/nfs-client mountpoint step could only auto-suggest
candidates, or create a fresh dir behind a hidden 'n=new' key — no way to
type an arbitrary existing path as the mountpoint, so the manual option
was effectively invisible (candidates from /media etc. always populated
the picker, hiding the typing path entirely). Designer framing: capability
gap + discoverability gap; backend already handled arbitrary paths (CLI
cmd_mount + ensure_mountpoint), only the interactive menu blocked it.
Change (identical in bin/pos-share-smb-client and bin/pos-share-nfs-client):
- pick_mountpoint hint 'n=new' -> 't=type'; key arm n -> t
- ask_new_mountpoint generalized to ask_mountpoint: an existing
directory is now used AS-IS (no create, no confirm); a non-existent
path keeps the 'Create mountpoint?' confirm + sudo mkdir flow; existing
non-directory rejected ('has a file there'); shape checks and system-path
refusal unchanged; stream contract (display->stderr, path->stdout) kept
- menu_ask_mountpoint empty-candidate fall-through now routes through the
same ask_mountpoint validator (single source of truth)
Docs: DOC/howto/share.md NFS+SMB mountpoint sections updated from n=new to
t=type and describe existing-path-without-create behavior.
Scoped to the two client files + howto doc; persistence/automount units,
unmount/remove flows, cmd_* CLIs, share_folder_candidates, and
lib/menu-lib.sh untouched.
Verified: 9-scenario smoke matrix x2 files (~19 assertions each: existing
dir as-is, new-dir confirm+create, decline, relative/trailing-slash/system/
empty rejections, non-dir reject, mkdir-fail), make gen idempotent, make
check OK, make lint 0 FAIL/0 WARN, make test 17 files / 299 checks green,
bash -n clean, git diff --check clean. Designer ACCEPT framing+spec;
Reviewer ACCEPT after doc fix.
Documentation
Everything in this folder is reference material for the Linux_post_install project. The root README is the short intro + quick start; this folder holds the detail.
| Document | What it covers |
|---|---|
| HOWTO.md | Hands-on guides per category (ai, network, docker, media, system, ssh, share, communication, entertainment): flags, recipes, config, troubleshooting |
| SCRIPTS.md | Core installer scripts: install.sh, preinstall.sh, postinstall.sh, lib/common.sh, lib/flags.sh, lib/entertainment-lib.sh, features/autostart.sh, features/usb-automount.sh — purpose, how each works, configuration |
| POS.md | The pos CLI: dispatcher, every pos-* command, Docker Compose / ScaleTail config, legacy wrappers, flag CLIs |
| APPS.md | Optional apps: apps/install.sh picker, installer conventions, full app catalog |
| SYSTEMD.md | Systemd units (autostart.service, usb-automount.service, ssh-agent.service), feature-flag gating, bash completion |
| DEV.md | Developer guide: architecture, conventions, how to add tools/apps/features, commit guidelines |
| AGENT_Context_Project.md | Single-source context doc for AI agents working on the repo |
| algorithm.md | ASCII diagrams: install flow, pos dispatch, compose up, config cascade, logging, vbox lifecycle |
Quick navigation
- Just installed and want to use it? → POS.md
- Adding a package? → SCRIPTS.md → preinstall.sh
- Adding a CLI tool or app? → DEV.md
- First deploy of a self-hosted service? → POS.md → Docker Compose