<feed xmlns='http://www.w3.org/2005/Atom'>
<title>website, branch ops/real-404</title>
<subtitle>The site of tala.run: a Vue frontend and an ASP.NET Core API.</subtitle>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/website/'/>
<entry>
<title>Update vite and launch-editor for the npm audit and format the route test</title>
<updated>2026-10-23T03:07:01+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-23T03:07:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/website/commit/?id=1a82704248753633d1d546e59a21efda9d07e96b'/>
<id>1a82704248753633d1d546e59a21efda9d07e96b</id>
<content type='text'>
npm audit fix moves the development dependencies vite to 7.3.7 and
launch-editor past GHSA-698v-4r3x-3vcv, GHSA-r825-w8mm-5pxw and
GHSA-587h-7wmj-h5pm; the frontend audit gate failed on them. Prettier
formats tests/site-integrity.test.mjs, which the format check flagged.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
npm audit fix moves the development dependencies vite to 7.3.7 and
launch-editor past GHSA-698v-4r3x-3vcv, GHSA-r825-w8mm-5pxw and
GHSA-587h-7wmj-h5pm; the frontend audit gate failed on them. Prettier
formats tests/site-integrity.test.mjs, which the format check flagged.
</pre>
</div>
</content>
</entry>
<entry>
<title>Answer unknown paths of the tala.run sites with 404</title>
<updated>2026-10-23T00:26:55+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-23T00:26:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/website/commit/?id=c2787446c019458d635a152e113dc0f265c31f52'/>
<id>c2787446c019458d635a152e113dc0f265c31f52</id>
<content type='text'>
Nginx sent every path that is not a file to index.html with 200, so
probes such as /wp-admin/install.php, xmlrpc.php and phpinfo.php were
answered as pages: scanners take that for a hit, and search engines
index soft 404s.

The three server blocks now fall back to @application, which serves
the app shell only for the routes of the application, / and
/docs/&lt;page&gt;, and answers every other path with 404. error_page keeps
index.html as the body of the 404, so a visitor still reaches the
landing page through the router.

A test reads the three sitemaps and requires every listed page to
match the accepted routes, and scanner paths, /docs and nested paths
not to; it also requires the same route rule in all three blocks.
OPERATIONS.md describes the expected 404s, and asks for
--no-same-owner, chown -R root:root and LF line endings when files are
copied from a developer machine: the 2026-10-18 release had left the
frontend owned by a Windows user ID.

Applied on the server with the owner's approval and verified: nginx -t
is clean; /, /docs/overview, talac /docs/command-line, tazel
/docs/commands, robots.txt and /api/v1/site answer 200;
/wp-admin/install.php, /no-such-page and /docs answer 404. npm test
passes, 45 tests.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Nginx sent every path that is not a file to index.html with 200, so
probes such as /wp-admin/install.php, xmlrpc.php and phpinfo.php were
answered as pages: scanners take that for a hit, and search engines
index soft 404s.

The three server blocks now fall back to @application, which serves
the app shell only for the routes of the application, / and
/docs/&lt;page&gt;, and answers every other path with 404. error_page keeps
index.html as the body of the 404, so a visitor still reaches the
landing page through the router.

A test reads the three sitemaps and requires every listed page to
match the accepted routes, and scanner paths, /docs and nested paths
not to; it also requires the same route rule in all three blocks.
OPERATIONS.md describes the expected 404s, and asks for
--no-same-owner, chown -R root:root and LF line endings when files are
copied from a developer machine: the 2026-10-18 release had left the
frontend owned by a Windows user ID.

Applied on the server with the owner's approval and verified: nginx -t
is clean; /, /docs/overview, talac /docs/command-line, tazel
/docs/commands, robots.txt and /api/v1/site answer 200;
/wp-admin/install.php, /no-such-page and /docs answer 404. npm test
passes, 45 tests.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #42 from Progmasoft/web/tazel-source-link</title>
<updated>2026-10-18T16:10:22+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-18T16:10:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/website/commit/?id=7dc24fbdf721bd9f504e96528f49453abd3f216b'/>
<id>7dc24fbdf721bd9f504e96528f49453abd3f216b</id>
<content type='text'>
Link the Tazel page to the Tazel repository</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Link the Tazel page to the Tazel repository</pre>
</div>
</content>
</entry>
<entry>
<title>Link the Tazel page to the Tazel repository</title>
<updated>2026-10-18T16:00:09+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-18T16:00:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/website/commit/?id=3d280554c1bb25dd83ea3e91f020dfb37641c3e2'/>
<id>3d280554c1bb25dd83ea3e91f020dfb37641c3e2</id>
<content type='text'>
Tazel moved out of Progmasoft/tala into Progmasoft/tazel (tala#93), so
the "Source" link at the end of the Tazel landing page pointed at a
directory that no longer exists. In all four languages it now opens
https://github.com/Progmasoft/tazel. The Tala and Talac pages keep
their links into Progmasoft/tala.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Tazel moved out of Progmasoft/tala into Progmasoft/tazel (tala#93), so
the "Source" link at the end of the Tazel landing page pointed at a
directory that no longer exists. In all four languages it now opens
https://github.com/Progmasoft/tazel. The Tala and Talac pages keep
their links into Progmasoft/tala.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #41 from Progmasoft/design/docs-layout</title>
<updated>2026-10-18T06:57:50+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-18T06:57:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/website/commit/?id=5877c2ec7f0f58eb4128c83e20d93fd74c90a47d'/>
<id>5877c2ec7f0f58eb4128c83e20d93fd74c90a47d</id>
<content type='text'>
Lay out the documentation like kotlinlang.org/docs</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Lay out the documentation like kotlinlang.org/docs</pre>
</div>
</content>
</entry>
<entry>
<title>Lay out the documentation like kotlinlang.org/docs</title>
<updated>2026-10-18T06:00:14+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-18T06:00:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/website/commit/?id=47ffd40c8b61aa9dd131e567bfb2ce78ec7f354c'/>
<id>47ffd40c8b61aa9dd131e567bfb2ce78ec7f354c</id>
<content type='text'>
The three documentation pages each drew their own sidebar. The two hand-built
pages listed different topics: Getting started had no link to Syntax. Each page
also opened with a capitalized section kicker.

DocShell now frames every documentation page:

- On the left, the topics of the site, with the current one marked. On a
  narrow screen they fold into a Contents button above the page.
- Above the page, a breadcrumb: site / Documentation / topic.
- The page in a column of at most 720 px.
- On the right, "On this page". It is read from the h2 headings of the
  rendered page, and each heading gets an id from its words in any script.
  It is hidden below 1100 px.
- Under the page, previous and next topic cards and an "Edit this page"
  link to the file the page is written in.

DocPage, OverviewPage and GettingStartedPage use it and drop their own
sidebars and kickers. The styles of the old layout are removed. The labels
are in all four languages.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The three documentation pages each drew their own sidebar. The two hand-built
pages listed different topics: Getting started had no link to Syntax. Each page
also opened with a capitalized section kicker.

DocShell now frames every documentation page:

- On the left, the topics of the site, with the current one marked. On a
  narrow screen they fold into a Contents button above the page.
- Above the page, a breadcrumb: site / Documentation / topic.
- The page in a column of at most 720 px.
- On the right, "On this page". It is read from the h2 headings of the
  rendered page, and each heading gets an id from its words in any script.
  It is hidden below 1100 px.
- Under the page, previous and next topic cards and an "Edit this page"
  link to the file the page is written in.

DocPage, OverviewPage and GettingStartedPage use it and drop their own
sidebars and kickers. The styles of the old layout are removed. The labels
are in all four languages.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #40 from Progmasoft/design/landing-pages</title>
<updated>2026-10-17T23:22:48+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-17T23:22:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/website/commit/?id=c2eb3d208b37826167496cfdf657ffca33fef703'/>
<id>c2eb3d208b37826167496cfdf657ffca33fef703</id>
<content type='text'>
Give each site a calm landing page with a "Why" section</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Give each site a calm landing page with a "Why" section</pre>
</div>
</content>
</entry>
<entry>
<title>Give each site a calm landing page with a "Why" section</title>
<updated>2026-10-17T22:45:32+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-17T22:45:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/website/commit/?id=43c431a793affe2fa41ead816268d6af760f72d0'/>
<id>43c431a793affe2fa41ead816268d6af760f72d0</id>
<content type='text'>
tala.run, talac.tala.run and tazel.tala.run now each open on a landing page
of their own. talac.tala.run and tazel.tala.run used to redirect "/" to
their first documentation topic. Every landing page has one headline, two
ways in, a "Why Tala?", "Why Talac?" or "Why Tazel?" section of tabs over
one code panel, and a short row of next links. The tabs follow the ARIA
tabs pattern: arrow keys, Home and End move between them. The code panel
stays left to right on the Hebrew pages and has a copy button.

Every sample is something that works today. The Tala tabs show
HelloWorld and PrimeNumbers, which are copies of Examples/ (a test compares
them), a small program that shows an argument evaluated by need, the
LLVM IR that talac -O2 made of the gcd loop of Examples/GCD, and a Tazel
project file. The Talac tabs show the terminal output of talac 0.6.0 for
one command, --emit=metadata, each --emit stage, the optimized IR and a
type error. The Tazel tabs show the project file, the everyday commands,
target selection, lock graph and a did-you-mean hint. Of the fifteen
programs in Examples/, talac 0.6.0 builds four (HelloWorld, GCD,
PrimeNumbers, CollatzTrace), so the classes, generators and pattern
matching of the others are not shown yet.

The old home page said in nearly every paragraph that the work was
unfinished, linked "Why Tala?" three times, and numbered its sections. It
is gone. The state of the project is said once, as a small badge beside
the name in the header. The header no longer repeats a Home link, since
the name leads home. On talac and tazel it lists their documentation
topics. Styles that only the old home page used are removed.

The titles and descriptions of "/" come from the landing content of each
site, and the talac and tazel sitemaps list "/". The tests follow:
siteHome is "/" everywhere, the tazel canonical path is "/", and the
example comparison reads the landing samples.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
tala.run, talac.tala.run and tazel.tala.run now each open on a landing page
of their own. talac.tala.run and tazel.tala.run used to redirect "/" to
their first documentation topic. Every landing page has one headline, two
ways in, a "Why Tala?", "Why Talac?" or "Why Tazel?" section of tabs over
one code panel, and a short row of next links. The tabs follow the ARIA
tabs pattern: arrow keys, Home and End move between them. The code panel
stays left to right on the Hebrew pages and has a copy button.

Every sample is something that works today. The Tala tabs show
HelloWorld and PrimeNumbers, which are copies of Examples/ (a test compares
them), a small program that shows an argument evaluated by need, the
LLVM IR that talac -O2 made of the gcd loop of Examples/GCD, and a Tazel
project file. The Talac tabs show the terminal output of talac 0.6.0 for
one command, --emit=metadata, each --emit stage, the optimized IR and a
type error. The Tazel tabs show the project file, the everyday commands,
target selection, lock graph and a did-you-mean hint. Of the fifteen
programs in Examples/, talac 0.6.0 builds four (HelloWorld, GCD,
PrimeNumbers, CollatzTrace), so the classes, generators and pattern
matching of the others are not shown yet.

The old home page said in nearly every paragraph that the work was
unfinished, linked "Why Tala?" three times, and numbered its sections. It
is gone. The state of the project is said once, as a small badge beside
the name in the header. The header no longer repeats a Home link, since
the name leads home. On talac and tazel it lists their documentation
topics. Styles that only the old home page used are removed.

The titles and descriptions of "/" come from the landing content of each
site, and the talac and tazel sitemaps list "/". The tests follow:
siteHome is "/" everywhere, the tazel canonical path is "/", and the
example comparison reads the landing samples.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #39 from Progmasoft/content/tazel-lock-graph</title>
<updated>2026-10-17T22:19:03+00:00</updated>
<author>
<name>Leitwolf</name>
</author>
<published>2026-10-17T22:19:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/website/commit/?id=7190d8a0911b4cea07cc502a1e471f0889b6d20b'/>
<id>7190d8a0911b4cea07cc502a1e471f0889b6d20b</id>
<content type='text'>
Document the lock commands and hints of Tazel</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Document the lock commands and hints of Tazel</pre>
</div>
</content>
</entry>
<entry>
<title>Document the lock commands and hints of Tazel</title>
<updated>2026-10-17T20:59:24+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-17T20:59:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/website/commit/?id=b070590df7e01963574e9efa313902c0ccfffb90'/>
<id>b070590df7e01963574e9efa313902c0ccfffb90</id>
<content type='text'>
Progmasoft/tala#86 added tazel lock create-dump --path, tazel lock graph,
tazel viget vipkg-desc and did-you-mean hints. The Tazel commands page now
covers them in all four languages:

- The command list names create-dump with [--path File] and says that the
  folder has to exist. It adds lock graph, and it lists viget vipkg-desc
  among the commands that wait for ViGet.
- A new section explains lock graph and its options, with a code example.
  --invert reads Publisher.Name, a path ending in .vipkg, or a project.name.
- A short section shows the hint a mistyped word gets.
- The Hebrew text keeps its direction marks before options and Latin names.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Progmasoft/tala#86 added tazel lock create-dump --path, tazel lock graph,
tazel viget vipkg-desc and did-you-mean hints. The Tazel commands page now
covers them in all four languages:

- The command list names create-dump with [--path File] and says that the
  folder has to exist. It adds lock graph, and it lists viget vipkg-desc
  among the commands that wait for ViGet.
- A new section explains lock graph and its options, with a code example.
  --invert reads Publisher.Name, a path ending in .vipkg, or a project.name.
- A short section shows the hint a mistyped word gets.
- The Hebrew text keeps its direction marks before options and Latin names.
</pre>
</div>
</content>
</entry>
</feed>
