<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pantograph.git/docs/archive, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>https://code.tjp.lol/pantograph.git/atom?h=main</id>
<link rel='self' href='https://code.tjp.lol/pantograph.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/'/>
<updated>2026-07-01T21:37:04Z</updated>
<entry>
<title>Load extensions via unified policy, entry/activate, rocks and paths</title>
<updated>2026-07-01T21:37:04Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-07-01T21:36:20Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=800b2c4b6115845f6bf15d90484b3e80e81a606f'/>
<id>urn:sha1:800b2c4b6115845f6bf15d90484b3e80e81a606f</id>
<content type='text'>
Replace the split [tools]/[extensions] config sections and the two-stage
load gate with a single model:

- [extensions] is now one policy resolved across all layers. Rules from
  every layer are kept (not clobbered) and resolved by last-match-wins
  after sorting by (layer, glob specificity, deny-last), so a base layer
  can carve one name out of an otherwise-denied group and a higher layer's
  broad rule still wins. Default is allow; whitelist via deny=["**"].
- Registration is deferred: a source returns an entry {name, activate}
  (or a list, or the sugar tool table), is always eval'd side-effect-free,
  and only permitted names get activate()d. Identity is the declared name,
  not the filename. Collapses the old pre/post-load two-stage gate.
- The loader runs two passes (eval -&gt; shadow -&gt; filter -&gt; activate) with
  precedence project&gt;user&gt;base and, within a layer, rocks&lt;paths&lt;dir.
- extensions.paths adds extra scan dirs; extensions.rocks loads luarocks
  packages as extension sources (require-as-entries). Startup installs
  only missing rocks (no per-launch network hit); panto update force-
  (re)installs every configured rock.

deny is a feature toggle, not a security boundary: rocks is where registry
code enters, so the pin list is the trust boundary. Rock integrity
(first-party GPG signing + --verify) is designed but not yet wired; until
then rocks pins which version, not which bytes.

Breaking: [tools] is removed; extensions must return entries. Built-in
tools and the wc example keep working via the sugar tool form.
</content>
</entry>
<entry>
<title>anthropic thinking</title>
<updated>2026-06-09T17:56:35Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-09T17:56:15Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=a7fe265365ba5e8bfbd0e65c827d38c038be7b0f'/>
<id>urn:sha1:a7fe265365ba5e8bfbd0e65c827d38c038be7b0f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>archive the tui refactor doc</title>
<updated>2026-06-09T16:14:06Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-09T16:13:57Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=1cef19b12d59147ec32e4c0cd6a4828384b16417'/>
<id>urn:sha1:1cef19b12d59147ec32e4c0cd6a4828384b16417</id>
<content type='text'>
</content>
</entry>
<entry>
<title>tui plan</title>
<updated>2026-06-08T18:25:55Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-08T04:36:06Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=a5881243f9bb4642f90fa94179f7a5bff23e4657'/>
<id>urn:sha1:a5881243f9bb4642f90fa94179f7a5bff23e4657</id>
<content type='text'>
</content>
</entry>
<entry>
<title>archive the session-store doc</title>
<updated>2026-06-05T18:21:57Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-05T18:21:49Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=6dbde15c1a08906f26443311a0d5fbd84d0523f0'/>
<id>urn:sha1:6dbde15c1a08906f26443311a0d5fbd84d0523f0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs</title>
<updated>2026-06-05T16:39:02Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-05T16:38:54Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=003908344336cc13e74618291aa9f3af137f030f'/>
<id>urn:sha1:003908344336cc13e74618291aa9f3af137f030f</id>
<content type='text'>
* note on the claude subscription provider plan that this is an
  extension, not panto core, not to be published
* archive that old "overview" doc
* new doc: pluggable session stores
* new doc: libpanto C wrappers, FFI wrappers for python and go
</content>
</entry>
<entry>
<title>failure retries scheme</title>
<updated>2026-06-04T18:09:09Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-04T15:46:49Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=3f1ace16afc7877b0bfad374cb286d4d84140960'/>
<id>urn:sha1:3f1ace16afc7877b0bfad374cb286d4d84140960</id>
<content type='text'>
</content>
</entry>
<entry>
<title>image uploads</title>
<updated>2026-06-03T18:34:13Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-03T15:11:36Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=ac5c4898dfa0a9e57424336774893dfc72b132e9'/>
<id>urn:sha1:ac5c4898dfa0a9e57424336774893dfc72b132e9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>compaction</title>
<updated>2026-06-02T22:37:32Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-02T21:00:44Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=8b88b886346460b1ab29edb03ad85bc3bb565a45'/>
<id>urn:sha1:8b88b886346460b1ab29edb03ad85bc3bb565a45</id>
<content type='text'>
</content>
</entry>
<entry>
<title>system prompt building and logging</title>
<updated>2026-06-02T15:49:18Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-02T15:02:49Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=9c64a7d4462a11674e2dea481b037b5f5d9c62fc'/>
<id>urn:sha1:9c64a7d4462a11674e2dea481b037b5f5d9c62fc</id>
<content type='text'>
</content>
</entry>
</feed>
