Skip to content

Release 0.11.0: sessions and sign-out, VLAN import, zones from the flows, a lighter 3D view - #68

Open
0b3l1X-SolidGeeks wants to merge 16 commits into
mainfrom
claude/vibrant-davinci-agxewm
Open

0b3l1X-SolidGeeks wants to merge 16 commits into
mainfrom
claude/vibrant-davinci-agxewm

Conversation

@0b3l1X-SolidGeeks

Copy link
Copy Markdown
Member

Strata 0.11.0. Full detail in the CHANGELOG section [0.11.0] - 2026-11-08.

Upgrading

  • HTTP Basic is gone. Local accounts sign in with the form and get a session cookie (SESSION_HOURS). Scripts must use an API token (Authorization: Bearer stk_…).
  • Sessions are kept in memory: a restart signs everyone out.

Added

  • Sessions and sign-out
    • Sign out in the title block, for every account.
    • Changing a password, or disabling or deleting an account, ends that account's other sessions.
  • Import VLANs (Edit › Import VLANs): from a CSV, a JSON list or a Strata export. Tick the VLANs to bring and choose the zone of each.
  • CSV VLANs module in the store (modules/csv-vlans, package in docs/modules).
  • Module API: modules can ask for a choice before an import.
    • file.pick in the manifest, a preview() function, ctx.picks in run.
    • POST /api/connectors/{id}/preview.
    • Modules without file.pick keep working as before.
  • Arrange VLANs: each zone laid out in a grid, ordered by flows.
  • Suggest zones from the flows: zones from distance to the Internet plus role, shown in a review window before applying.
  • Palo Alto builds the IS from a configuration: zones, VLANs, assets and the firewall.
  • On the map:
    • All / None VLANs per zone, and hide empty VLANs;
    • movable Internet cloud;
    • foldable title block;
    • loading bar for long requests;
    • compact overview of each IS.
  • Measured RAM/CPU needs in the README, and resource limits (commented out) in docker-compose.yml.

Changed / fixed

  • 3D view:
    • 8 to 15× fewer draw calls (1 569 → 208 on the Lyon demo);
    • drawn only when something changes;
    • Auto / Quality / Economy graphics modes;
    • flickering VLAN labels fixed.
  • Large IS can be saved again: the limit is now MAX_DOC_MB (8 MB by default).
  • History has a size cap: HISTORY_MAX_MB (200 MB by default).
  • Version 0.11.0 in package.json, docker-compose.yml, the interface and the website. README, CHANGELOG and the documentation site updated.

Tests

  • npm test: 109 passing.
  • npm run test:e2e: 4 passing.
  • The Docker review image (strata:review-62747d2) was checked and approved by the maintainer before this PR.

Generated by Claude Code

claude added 16 commits November 7, 2026 20:20
… everyone

HTTP Basic is no longer accepted: browsers use the sign-in form, scripts use
API tokens. Password changes, disabled and deleted accounts end the sessions
of that account. Tests sign in through the form.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
…movable Internet; Arrange VLANs on a grid

- All / None per zone and for the whole IS in the plate list
- Hide empty VLANs: plates without an asset leave the 3D model and the 2D diagram
- A loading bar for requests that last, with progress for batches of writes
- The Internet cloud can be dragged (Arrange plates in 3D, the 2D diagram); its place is saved on the IS
- Arrange VLANs puts each zone on rows and columns (a set number per row, or automatic),
  the VLANs that talk side by side

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
… and the zone of each

A Strata export also brings the assets of the chosen VLANs and the flows between them.
Zone headers of the VLAN list laid out with flex, so All / None never cover the first VLAN.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
…e new plate tools

- README section 1: measured server memory and CPU from an empty map to 30 000 assets, browser needs
- docker-compose.yml: resource limits, commented out
- README, docs, .env.example, CHANGELOG: the sign-in form, sessions, API tokens for scripts
- A malformed Origin on the sign-in form is refused (403), not an error

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
…, far fewer draw calls

- Drawn only when something changes; shadows redrawn only when the model changes; a lower
  resolution while the view moves, sharp again when it stops; dots animated at 30 frames a second
- Display › Graphics: Auto (Economy on a software renderer, or once moving the view is slow here),
  Quality, Economy (screen resolution, no shadows, no moving dots, fewer labels from afar);
  Animated flows on or off
- Each equipment type merged into shared geometries; every flow of an IS in one geometry with
  per-vertex colour and opacity; moving dots instanced; click tubes on a layer never drawn;
  shared label textures; unreadable labels not drawn; placards in two draw calls
- What the GPU held for a rebuilt model is freed
- Lyon demo: 1 569 draw calls a frame before, 208 now (Quality), 173 (Economy)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
The printed face of a plate's name sign sat half a millimetre in front of its box: on a GPU
with a 24-bit depth buffer the two fought for every pixel from the usual viewing distance. The
face now always wins the depth test (polygon offset). The view no longer drops below the
screen's own resolution while it moves, where text shimmered.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
- Module API (backward compatible): file.pick in the manifest, an optional preview(cfg, ctx)
  that lists what a file holds, ctx.picks in run() with what people chose and the zone of each,
  POST /api/connectors/{id}/preview, picks on POST /api/connectors/{id}/run
- The import window of such a module: tick, filter, choose a zone per item or for all the
  ticked ones (a zone of the IS, one named by the file, or a new one); the result is a proposal
- modules/csv-vlans in the store: VLANs from a CSV (number, name, range, any order, header or
  not), new ones ticked, those already in the IS updated when ticked
- MODULES.md, README, API reference, CHANGELOG; tests for the module and the manifest checks

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
Layout › Suggest zones: each VLAN on the floor of its distance from the Internet along the
flows (exposed, reached from the exposed zone, back end), the VLANs the Internet never reaches
below by the role of their assets (internal servers, users, industrial, network and
administration), empty VLANs left where they are. Existing zones holding most of the same VLANs
keep their name. A review window, top first: rename zones, move VLANs, then Apply (approvers)
or Propose (contributors: a draft proposal). StrataAnalysis.suggestZones, with tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
▴ in its corner: the IS name, the four key figures, back to the overview, sign out and the
incident band stay; the controls move up with it. Remembered by the browser; fits a phone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
The button was only in Layout, far down the controls; it is now next to Zones, contacts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
One document was limited to 512 KB, and an IS holds all its flows (about 300 bytes each):
an IS of some 1 800 flows, imported through a proposal, could no longer be edited from the
interface ("This item is too large to save"). The limit is now MAX_DOC_MB, 8 MB by default.

Each change keeps the edited document before and after it, in the history file and in memory:
about a megabyte a change for such an IS. The history now also stops at HISTORY_MAX_MB (200 MB
by default), the oldest changes first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
Each zone of the small model follows the rows and order saved by Arrange VLANs (or by plates
placed by hand); a zone never arranged keeps one row up to 8 VLANs, then wraps into a grid. The
assets of a plate wrap into lines, floors come closer past 5 zones, and the small models share
their geometries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
"Build the IS" on the file import: zones from the security zones, VLANs from the layer-3
(sub-)interfaces outside the Internet zones (tag, subnet, comment), assets from the host
address objects of private ranges (in the VLAN of their IP; the type from their name or
description, else the ports opened to them, else a workstation when they only open
connections) and the firewall itself, crossed by the flows that change VLAN; then the rules as
flows. What the map has is kept and the same file again changes nothing. An import that draws
nothing no longer opens an empty proposal. Tests for both; docs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
It shared 9400-9489 with the sign-in and Muster tests, which run at the same time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
Version 0.11.0 in package.json, docker-compose.yml, the interface and the
website; README section "New in v0.11" and roadmap row; CHANGELOG section
dated; the documentation site covers sign-in and sign-out, Import VLANs,
Arrange VLANs, Suggest zones, the Graphics setting, the folding title
block and the CSV VLANs module.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
Signed-off-by: Claude <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvKC5ZeSmwYQrWay8EM8mh
Signed-off-by: Claude <noreply@anthropic.com>
Comment thread server/server.js
if (sso.localLogin === 'admins' && own(users, name)?.role !== 'admin') return false;
const wait = Math.max(lockedFor('address', addr), name ? lockedFor('account', name) : 0);
if (wait) return { retryAfter: wait };
const key = crypto.createHash('sha256').update(`${name}:${pass}`).digest('hex');

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants