Security and history

Reading time 7 min

Admin’s System areas show Security, Activity and Publishes. They inspect the actual private editor server, not a remote reader host. Security is read-only policy reporting plus your own password form; Activity is bounded local history; Publishes combines recorded outcomes with current publisher state.

Areas and page sizes

Area View
Security Live policy summary
Activity Exact filters, 50 records
Publishes Job records, 25 plus status
User Activity Target events, up to 50
Audit API Cursor and filters, 1-100

These are different views over local state. Activity’s initial 50does not mean publish history initially 50. An absent record is not proof an operation never happened: rotation, write failures, wrong runtime and pre-history operations can limit evidence.

Security display

Label Read as
Session limits Actual idle and absolute minutes
Session cookie Configured cookie/flags, secure or local HTTP mode
Raw HTML Server permission to render editor preview HTML
Access Server-side sections, admin management and CSRF
History storage warning Last audit append failed; inspect actual action
Limit group rows Threshold/window/pause and blocked group count
Rate-limit state Memory/reset/familiar-address limits

Reload refreshes the current summary. It does not alter thresholds, clear a limiter, enable TLS, change trusted proxies or configure reader access. Secure-cookie configuration describes what cookies require, not proof the public connection actually has valid TLS.

A summary without warning is not a full security assessment. Compare the actual host/listener/proxy/cookie/session settings with your deployment and test denied paths. The raw HTML setting concerns editor preview; build-time Markdown rendering is a separate configuration path.

Group Failures
Account + address 5
Client address 30
Account across addresses 20

All default windows and pauses are 15 minutes.

The implementation counts within a window beginning with the first tracked failure, not a continuously sliding window of every attempt. A threshold starts a block from that failure. Successful login clears its account/address pair; it does not clear all address/account-wide failures. Up to five previously successful addresses can remain familiar for the account-wide pause, without bypassing pair/address blocks.

Counts, familiar addresses and limiter state reset on server restart. The summary exposes counts/policy, not keys, passwords or client addresses. An empty summary after restart says nothing about all earlier attempts. Do not repeatedly retry 429or restart production solely to clear a warning. See Security and privacy for exact request/host/CSRF/proxy gates.

Change your own password

  1. Verify intended private editor/session and account.
  2. Enter current password, different new password and matching confirmation.
  3. Submit once and wait for result.
  4. On success, fields clear, other sessions end and this session/CSRF is replaced.
  5. Recheck expected sign-in/session behavior privately.
State UI/result
Mismatched new fields “New passwords do not match”; no request
Saving Fields and button disabled, leaving gated
Bad current password Server denies; no completed change
Policy/other failure “Not changed”; inspect error and actual state
Success Fields clear; current session renewed
Unsaved leaving Discard decision; no password draft storage

Password policy is 12-256 JavaScript string characters and a fixed exact weak-password list, with NFKC normalization for scrypt hashing. It does not require a character-class mix or query all leaked passwords. Never store passwords in Markdown, screenshot, URL or shared support report.

The form changes the signed-in administrator’s password. It is not an arbitrary user’s reset. Editor-account browser reset and administrator shell recovery have different forced-change/enable behavior, documented in Accounts and access.

A lost response creates uncertainty, not permission to repeat blindly. Inspect current session/login outcome through the private workflow. Clearing password fields does not delete server documents or browser Markdown recovery drafts.

Activity filters and pagination

Activity offers event dropdown plus actor/target fields. Filter values are exact matches, not substring/full-text search. Actor/target text is trimmed by the UI; case-sensitive stored values still matter. Use Filter to replace the list; Load more appends from the returned opaque record-ID cursor.

Event family Typical meaning
login / login-failed / login-blocked / logout Session sign-in/failure/pause/end
password-changed / password-reset Own change versus editor reset
user-created / user-disabled / user-enabled Account creation/state
sections-changed / sessions-ended Grants or global user-session invalidation
section-renamed / section-settings-saved Top folder assignment update or metadata
links-saved / site-settings-saved Global source configuration
publish-started / publish-done / publish-failed Local shared publication lifecycle

The fixed dropdown reflects these recorded event names. A section-settings target is section name; section-rename target is old folder name. Global settings/link records can target acting username. Do not assume every target means a person or every event includes all changed fields.

Records show time, event and Actor / target. Missing actor is labeled Unauthenticated or system. Failed login/block records do not verify the typed account owner’s authorship; do not blame that person from the target string. Records omit passwords, tokens, CSRF, client addresses, request bodies and arbitrary build error text.

Load more uses record ID rather than timestamp, preserving records with equal timestamps. Retention can remove the cursor; a missing cursor yields no older page. Re-filter/reload current retained history instead of treating that as a backend guarantee of no previous records. Local insertion order is newest-first, not a global/off-host chronology.

Publishes and current state

Display Meaning
Actor / target Recorded initiator/target, not host deploy identity
Pages Done / total stored from job summary
Started / finished Recorded job timestamps
Failed stage Bounded recorded stage when present
State Current process’s shared publisher state
Saved changes Source metadata fingerprint versus last editor marker
Current error Current job report; details in Publish Changes

Reload fetches history and current publisher status. Load more uses its own 25-record cursor. History only includes records carrying a publish summary; there is no automatic grouping/deduplication of started/completed entries into one transaction card. A crash can leave started without done/failed.

The empty message says “No completed publish history yet” when no records were returned. Treat it as view text, not proof that no start occurred or every prior job completed. Stored records can outlive the in-memory current job; restart changes live publisher/session state without deleting valid retained files.

Publish Changes uses the shared staged publisher. System’s publish action refuses while unsaved access/content/site/password edits remain. Closing progress does not cancel a job. Other administrators can observe the same active job. History does not retry, restore output, roll back or prove remote deployment.

The saved-changes marker fingerprints selected source metadata, not cryptographic content integrity. Equal size/timestamp edits can evade that comparison; local CLI build does not automatically refresh the editor marker. Inspect actual saved source/output/reader before concluding “matches” means complete/current/correct.

Detailed errors remain in the current progress dialog, not arbitrary persisted audit error dumps. A post-output marker/history failure can follow successful output replacement. Reconcile source, staging/backup/output and returned stage before another publish. See Publishing stages and Health and diagnostics.

Retention, storage and integrity

Property Actual bound
Current file audit.jsonl in selected private runtime
Rotation threshold At least 1 MiB checked before next append
Archives Three retained rotated files
Approximate storage Current plus three archives, with record overshoot
Retention time Not fixed; depends on event rate
Integrity Operator-editable local JSONL; not tamper-proof
Parse failures Malformed retained lines skipped

Rotation is size-based, not a guaranteed daily/monthly schedule or exact four-MiB quota. Append can exceed threshold; next append rotates. The store reads retained files, skips invalid JSON/required-field records and cannot prove missing/mutated lines. File mode on creation is private 0600; existing parent/file permissions still require operator inspection.

A failed append sets History storage warning without reversing the completed account/source/publication action. Later successful append clears that warning, not the historical gap. Inspect actual state, free space and selected runtime permissions before repeating. Backup protected runtime; do not copy it into public output.

If your organization requires off-host retention, immutable evidence, alerts or compliance exports, provide an external process. V2 does not supply those services. Audit events also are not full document revisions, per-read tracking, device identity or durable sessions.

A safe investigation sequence

After Recheck
Account or grant Current user, grants, version and sessions
Source or settings save Current saved bytes, settings and conflict state
Publish Output contents, resources, search, host and job stage
Missing history Correct runtime, retained files and cursor and storage warning
Suspected incident Preserve private evidence, restrict through approved operator plan

Record non-secret event type/time, synthetic reproducer and observed state. Keep passwords, tokens, private source, users hashes and raw client details out of public reports. Reproduce on disposable content where possible and state what remains untested.

This handbook verified isolated engine tests and local browser behavior; it does not certify production audit retention, TLS, account restoration, organizational policy or external monitoring. Validation limits defines those boundaries.