<feed xmlns='http://www.w3.org/2005/Atom'>
<title>progmaweb, branch feature/five-part-versions</title>
<subtitle>The site and account service of Progmasoft: a Next.js frontend and an ASP.NET Core API.</subtitle>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/'/>
<entry>
<title>Accept plugin versions of up to five numbers</title>
<updated>2026-11-01T17:16:35+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-01T17:16:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=e85e2b2359518f83354c09f9f4a101b7779e6e9c'/>
<id>e85e2b2359518f83354c09f9f4a101b7779e6e9c</id>
<content type='text'>
Tazel takes A.B.C, then .D, .E and -METADATA if needed, so the descriptor
check follows it.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Tazel takes A.B.C, then .D, .E and -METADATA if needed, so the descriptor
check follows it.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #52 from Progmasoft/feature/four-part-versions</title>
<updated>2026-11-01T15:43:38+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-11-01T15:43:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=8323e428c021642aaf898bfdefe3b3f4f8f1824b'/>
<id>8323e428c021642aaf898bfdefe3b3f4f8f1824b</id>
<content type='text'>
Accept plugin versions of four numbers</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Accept plugin versions of four numbers</pre>
</div>
</content>
</entry>
<entry>
<title>Accept plugin versions of four numbers</title>
<updated>2026-11-01T13:09:24+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-01T13:09:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=02662c79c1f2bcda974da9e1b0ed8c5ac92ee127'/>
<id>02662c79c1f2bcda974da9e1b0ed8c5ac92ee127</id>
<content type='text'>
Progmasoft's releases move to four numbers, and the plugins publish here.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Progmasoft's releases move to four numbers, and the plugins publish here.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #51 from Progmasoft/feature/site-icons</title>
<updated>2026-10-29T15:56:15+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-29T15:56:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=1d99f81ec96e05337e474dc84555def3a1bcf954'/>
<id>1d99f81ec96e05337e474dc84555def3a1bcf954</id>
<content type='text'>
Serve the Progmasoft mark as the site icon</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Serve the Progmasoft mark as the site icon</pre>
</div>
</content>
</entry>
<entry>
<title>Serve the Progmasoft mark as the site icon</title>
<updated>2026-10-29T15:25:16+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-29T15:25:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=6a87306ec5b972cbf18d76836a6df5d7828575ea'/>
<id>6a87306ec5b972cbf18d76836a6df5d7828575ea</id>
<content type='text'>
The sites declared no icon and /favicon.ico answered 404, so search
engines and assistants that show a site's icon (DuckDuckGo, ChatGPT)
fell back to a gray placeholder; the only copy of the mark was the BIMI
logo for mail.

The app now has the Next.js icon files, so every page links them:

- app/icon.svg: the four squares of the BIMI logo, cropped to the mark
  so it fills a browser tab, on a transparent field.
- app/favicon.ico: the same mark at 16, 32 and 48 pixels (PNG entries),
  for clients that ask for /favicon.ico without reading the page.
- app/apple-icon.png: 180 pixels on the white field of the BIMI logo,
  since iOS fills transparency with black.

The proxy rewrites paths per host, which would send /icon.svg on the
account, ViGet and the other hosts into their own page trees; the
matcher now skips the two new files as it already skipped favicon.ico,
so every Progmasoft host serves the same icons.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The sites declared no icon and /favicon.ico answered 404, so search
engines and assistants that show a site's icon (DuckDuckGo, ChatGPT)
fell back to a gray placeholder; the only copy of the mark was the BIMI
logo for mail.

The app now has the Next.js icon files, so every page links them:

- app/icon.svg: the four squares of the BIMI logo, cropped to the mark
  so it fills a browser tab, on a transparent field.
- app/favicon.ico: the same mark at 16, 32 and 48 pixels (PNG entries),
  for clients that ask for /favicon.ico without reading the page.
- app/apple-icon.png: 180 pixels on the white field of the BIMI logo,
  since iOS fills transparency with black.

The proxy rewrites paths per host, which would send /icon.svg on the
account, ViGet and the other hosts into their own page trees; the
matcher now skips the two new files as it already skipped favicon.ico,
so every Progmasoft host serves the same icons.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #50 from Progmasoft/feature/provision-reserved-accounts</title>
<updated>2026-10-29T13:34:29+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-29T13:34:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=6b4e5e403875d3648be383395f1dad50f0d6503d'/>
<id>6b4e5e403875d3648be383395f1dad50f0d6503d</id>
<content type='text'>
Provision the reserved accounts on the server</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Provision the reserved accounts on the server</pre>
</div>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/main' into feature/provision-reserved-accounts</title>
<updated>2026-10-29T12:52:11+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-29T12:52:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=3749e30da561652a226017d9360b84e34a8b74fc'/>
<id>3749e30da561652a226017d9360b84e34a8b74fc</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #49 from Progmasoft/docs/viget-publish-command</title>
<updated>2026-10-29T12:51:39+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-29T12:51:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=0c0bbeab246a94035b572ce47d3502de997ac58a'/>
<id>0c0bbeab246a94035b572ce47d3502de997ac58a</id>
<content type='text'>
Publish ViGet plugins without putting the environment on a command line</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Publish ViGet plugins without putting the environment on a command line</pre>
</div>
</content>
</entry>
<entry>
<title>Provision the reserved accounts on the server</title>
<updated>2026-10-29T12:35:06+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-29T12:35:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=21b515565b73f86477afe436bb3588f3e5929443'/>
<id>21b515565b73f86477afe436bb3588f3e5929443</id>
<content type='text'>
Registration refuses the reserved names Progmasoft and Leitwolf, which are
meant to be created by trusted operations tooling only, and that tooling did
not exist: the Progmasoft account, the publisher of Progmasoft's Tazel
plugins on ViGet, could not be created at all.

- 'accounts provision-reserved &lt;Name&gt; &lt;email&gt;' runs with the configuration
  of the service, like the viget commands. It accepts only the reserved
  names, applies the rules of registration to the email address and the
  password, never replaces an existing account, and brings the account
  tables to the current schema first.
- The password is read from the terminal without echo, twice, or from one
  line of standard input when it is not a terminal; it never appears on a
  command line or in the output.
- AccountNamePolicy.TryNormalizeReserved checks a reserved name;
  TryNormalize, which registration uses, still refuses it.

Tests cover a reserved account created and signing in with its password,
a name that is not reserved, two different passwords, a weak password, an
existing account and the usage line. ops/README.md shows the command with
systemd-run --pty; docs/ACCOUNT-API.md points to it.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Registration refuses the reserved names Progmasoft and Leitwolf, which are
meant to be created by trusted operations tooling only, and that tooling did
not exist: the Progmasoft account, the publisher of Progmasoft's Tazel
plugins on ViGet, could not be created at all.

- 'accounts provision-reserved &lt;Name&gt; &lt;email&gt;' runs with the configuration
  of the service, like the viget commands. It accepts only the reserved
  names, applies the rules of registration to the email address and the
  password, never replaces an existing account, and brings the account
  tables to the current schema first.
- The password is read from the terminal without echo, twice, or from one
  line of standard input when it is not a terminal; it never appears on a
  command line or in the output.
- AccountNamePolicy.TryNormalizeReserved checks a reserved name;
  TryNormalize, which registration uses, still refuses it.

Tests cover a reserved account created and signing in with its password,
a name that is not reserved, two different passwords, a weak password, an
existing account and the usage line. ops/README.md shows the command with
systemd-run --pty; docs/ACCOUNT-API.md points to it.
</pre>
</div>
</content>
</entry>
<entry>
<title>Publish ViGet plugins without putting the environment on a command line</title>
<updated>2026-10-29T12:04:15+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-29T12:04:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/progmaweb/commit/?id=e644c9bb28ca59d93f09c2d732aa7f070ecdaf21'/>
<id>e644c9bb28ca59d93f09c2d732aa7f070ecdaf21</id>
<content type='text'>
The documented command passed the variables of account.env to env as
arguments, which shows them in the process list to every user while it
runs. systemd-run reads the environment file itself, runs as the service
user with the production environment, and the JAR goes through a private
incoming directory. The publisher must be an existing account.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The documented command passed the variables of account.env to env as
arguments, which shows them in the process list to every user while it
runs. systemd-run reads the environment file itself, runs as the service
user with the production environment, and the JAR goes through a private
incoming directory. The publisher must be an existing account.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
