Action link syntax (open a firewall port, view server users, etc. from an HTML page) is now documented right in the Workshop editor when editing an .html file, instead of only existing in an external doc.
A new editor= option in ~/.config/blackdoor.conf (simple or nano) - nano mode adds a real Ctrl+X: prompts "Save modified buffer?" if you've got unsaved changes (Y or N then Enter to confirm, Esc cancels), or exits straight away if there's nothing to save. Defaults to simple, today's Ctrl+S/Esc behavior.
Ctrl+D now disconnects from a server, same as typing disconnect.
Ctrl+R searches command history, same as a real terminal - press it again for older matches, Enter to load one into the line, Esc to cancel.
"Import from Workshop" always said there was nothing to import, even for content you'd genuinely published yourself. Fixed - anything already published self-heals automatically the next time you check.
A new Workshop mission defaulted its "posted by" attribution to a random story NPC or "anon" instead of you, and the field to change it was hidden unless SIDE MISSION was toggled on. Now defaults to your own handle and is always visible and editable.
cmd_inject_vulnerable routes never actually triggered from a real form submission, only when a script called cmd_inject() directly.
The procedural Full Audit/daily/weekly contract generator's corporate "reply" job hinted at the wrong form to inject. Now has a real checkpoint objective and a corrected hint pointing at the right one.
Ctrl+Enter in the code editor could only quick-run a script sitting directly in ~/scripts/, not in a subfolder.
scan() used to halt a script entirely on an unreachable host - it now returns a normal, checkable result with reachable: false instead, matching how connect() already handles the same case.
The Workshop server editor's [+ add user] button never actually added the new user to /etc/passwd or /etc/shadow.
A few "DM the answer" mission objectives were too strict about exact wording. These now accept more varied phrasing of the same correct answer.
save()/write_local(), write_file(), touch(), and touch_local() silently did nothing when the parent directory didn't exist. The write functions now return {success, path, error}; the touch functions return false.
local_mv()/local_cp() had the same silent-failure gap - now they auto-create missing directories instead, matching the terminal's own mv/cp and upload(). local_mv() on a directory now moves its contents with it too.
Workshop-authored "reply"/mail_sent objectives could be unreachable or fail to complete under some authoring conditions. Fixed.
- Static