<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Go on Alwaldend</title>
		<link>https://www-staging.alwaldend.com/languages/go/</link>
		<description>Recent content in Go on Alwaldend</description>
		<generator>Hugo</generator>
		<language>en</language>
		
		
		
		
			<atom:link href="https://www-staging.alwaldend.com/languages/go/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Al</title>
				<link>https://www-staging.alwaldend.com/docs/projects/al/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/projects/al/</guid>
				<description>&lt;p&gt;AL is a command runner that prepares credentials and environment variables&#xA;through plugins, runs your command, and cleans up afterward. Its Bazel rules&#xA;package commands with their configuration and required plugins.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;al tool&lt;/code&gt; runs tools declared in AL configuration from a source-keyed executable&#xA;cache. With no &lt;code&gt;--config&lt;/code&gt;, it uses the repository-root &lt;code&gt;al.lua&lt;/code&gt;; explicit&#xA;&lt;code&gt;--config&lt;/code&gt; paths replace that default. Cache misses build the tool&amp;rsquo;s configured&#xA;Bazel label and publish the selected executable under&#xA;&lt;code&gt;$XDG_CACHE_HOME/al/tools&lt;/code&gt;. &lt;code&gt;AL_TOOL_CACHE&lt;/code&gt; or &lt;code&gt;tool --cache-root PATH&lt;/code&gt; selects&#xA;an alternate cache root.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Al</title>
				<link>https://www-staging.alwaldend.com/projects/al/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/projects/al/</guid>
				<description>&lt;p&gt;AL is a command runner that prepares credentials and environment&#xA;variables through plugins, runs your command, and cleans up afterward. Its Bazel&#xA;rules package commands together with the configuration and plugins they need.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#features&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Plugin-based credential and environment preparation around any command&lt;/li&gt;&#xA;&lt;li&gt;Bazel rules that package a command with its configuration and plugins&lt;/li&gt;&#xA;&lt;li&gt;A source-keyed executable cache for running declared tools&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Backup</title>
				<link>https://www-staging.alwaldend.com/docs/tools/vault/backup/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/vault/backup/</guid>
				<description></description>
			</item>
			<item>
				<title>Bazel agent</title>
				<link>https://www-staging.alwaldend.com/docs/projects/bazel_agent/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/projects/bazel_agent/</guid>
				<description>&lt;p&gt;&lt;code&gt;bazel_agent&lt;/code&gt; is the repository Bazel entry point for agents. It keeps the&#xA;Bazel invocation behind a validated subcommand while consistently applying the&#xA;agent configuration:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel_agent bazel test //path/to/package:all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel test --config=agent //path/to/package:all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;bazel&lt;/code&gt; is the only Bazel entry point, and it is a validated subcommand. The&#xA;runner accepts a known Bazel command after the &lt;code&gt;bazel&lt;/code&gt; keyword, rejects&#xA;arbitrary leading arguments, and places &lt;code&gt;--config=agent&lt;/code&gt; after the command.&#xA;Targets, command options, and arguments after the &lt;code&gt;--&lt;/code&gt; separator of a&#xA;&lt;code&gt;bazel run&lt;/code&gt; invocation pass through unchanged. Later options therefore retain&#xA;Bazel&amp;rsquo;s normal precedence and can override settings supplied by the agent&#xA;configuration. The runner resolves &lt;code&gt;bazel&lt;/code&gt; from &lt;code&gt;PATH&lt;/code&gt; and replaces itself&#xA;with that process, so signals and the final exit status are not mediated by&#xA;another wrapper process. Uses of the persistent Bazel server follow the host&#xA;Codex network policy; the &lt;code&gt;host-bot&lt;/code&gt; profile allows loopback so the&#xA;client-server connection is not blocked.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Bazel agent</title>
				<link>https://www-staging.alwaldend.com/projects/bazel_agent/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/projects/bazel_agent/</guid>
				<description>&lt;p&gt;&lt;code&gt;bazel_agent&lt;/code&gt; is the Bazel entry point for agents working in this&#xA;repository. It keeps Bazel behind a validated subcommand while consistently&#xA;applying the agent configuration.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#features&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Validated &lt;code&gt;bazel&lt;/code&gt; subcommand instead of arbitrary arguments&lt;/li&gt;&#xA;&lt;li&gt;Applies the agent configuration in the required position&lt;/li&gt;&#xA;&lt;li&gt;Preserves signals and exit status by replacing itself with the Bazel process&lt;/li&gt;&#xA;&lt;li&gt;Read-only &lt;code&gt;doctor&lt;/code&gt; diagnostics for runner and workspace state&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Bazel shell worker</title>
				<link>https://www-staging.alwaldend.com/docs/tools/shell_worker/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/shell_worker/</guid>
				<description></description>
			</item>
			<item>
				<title>Ci platform</title>
				<link>https://www-staging.alwaldend.com/docs/projects/ci_platform/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/projects/ci_platform/</guid>
				<description>&lt;p&gt;An abandoned continuous integration platform with a Go backend and a Vue&#xA;single-page frontend. The source retains its job, pipeline, and project&#xA;management components.&lt;/p&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#links&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Source code: &lt;a href=&#34;https://github.com/alwaldend/src/tree/master/projects/ci_platform&#34;&gt;https://github.com/alwaldend/src/tree/master/projects/ci_platform&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#features&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html&#34;&gt;Clean architecture&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Backend: Golang, Gorm, Fiber, Hcl, Postgresql&lt;/li&gt;&#xA;&lt;li&gt;Frontend: SPA, VueJS with PrimeVue&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;arch&#34;&gt;Arch&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#arch&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www-staging.alwaldend.com/docs/projects/ci_platform/arch.drawio.svg&#34; alt=&#34;Arch&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;layout&#34;&gt;Layout&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#layout&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ci_platform&#xA;├── api [Interface Adapters]&#xA;│   ├── controller&#xA;│   ├── middleware&#xA;│   └── presenter&#xA;├── cmd (CLI interface)&#xA;├── docs (OpenAPI Specification and other documentation)&#xA;│   └── diagrams&#xA;├── entity [Enterprise Business Rules]&#xA;├── infrastructure [Frameworks and Drivers]&#xA;│   ├── access&#xA;│   ├── branch&#xA;│   ├── config&#xA;│   ├── job&#xA;│   ├── jwt&#xA;│   ├── lifecycle&#xA;│   ├── pipeline&#xA;│   ├── pool&#xA;│   ├── project&#xA;│   ├── schedule&#xA;│   ├── session&#xA;│   └── user&#xA;├── pkg (Support packages)&#xA;│   └── error&#xA;└── usecase [Application Business Rules]&#xA;│   ├── access&#xA;│   ├── branch&#xA;│   ├── job&#xA;│   ├── jwt&#xA;│   ├── lifecycle&#xA;│   ├── pipeline&#xA;│   ├── pool&#xA;│   ├── project&#xA;│   ├── schedule&#xA;│   ├── session&#xA;│   └── user&#xA;└── web (Web interface)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;resources&#34;&gt;Resources&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#resources&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;architecture&lt;/p&gt;</description>
			</item>
			<item>
				<title>Ci platform</title>
				<link>https://www-staging.alwaldend.com/projects/ci_platform/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/projects/ci_platform/</guid>
				<description>&lt;p&gt;An abandoned continuous integration platform with a Go backend and a&#xA;Vue frontend. It is kept for reference and is not maintained.&lt;/p&gt;&#xA;&lt;h2 id=&#34;status&#34;&gt;Status&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#status&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This project is abandoned and receives no further work.&lt;/p&gt;</description>
			</item>
			<item>
				<title>File installer</title>
				<link>https://www-staging.alwaldend.com/docs/tools/file_installer/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/file_installer/</guid>
				<description></description>
			</item>
			<item>
				<title>Forgejo login</title>
				<link>https://www-staging.alwaldend.com/docs/tools/vault/forgejo_login/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/vault/forgejo_login/</guid>
				<description>&lt;p&gt;The plugin registers token removal before issuance, using a unique token name.&#xA;Startup failure and normal shutdown attempt removal through the authenticated&#xA;Forgejo browser session, including when creation did not return a usable token.&#xA;Cleanup parses the complete applications settings page and verifies token absence&#xA;after deletion. It then logs out the invocation&amp;rsquo;s browser session and verifies&#xA;that the retained original cookie no longer accesses authenticated settings.&#xA;Cleanup failures are reported.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Gen client cert</title>
				<link>https://www-staging.alwaldend.com/docs/tools/vault/gen_client_cert/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/vault/gen_client_cert/</guid>
				<description></description>
			</item>
			<item>
				<title>Gen gossip key</title>
				<link>https://www-staging.alwaldend.com/docs/tools/consul/gen_gossip_key/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/consul/gen_gossip_key/</guid>
				<description></description>
			</item>
			<item>
				<title>Gen root token</title>
				<link>https://www-staging.alwaldend.com/docs/tools/vault/gen_root_token/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/vault/gen_root_token/</guid>
				<description></description>
			</item>
			<item>
				<title>Git</title>
				<link>https://www-staging.alwaldend.com/docs/tools/git/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/git/</guid>
				<description></description>
			</item>
			<item>
				<title>Harbor login</title>
				<link>https://www-staging.alwaldend.com/docs/tools/vault/harbor_login/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/vault/harbor_login/</guid>
				<description>&lt;p&gt;The plugin destroys its Harbor session on normal shutdown and checks that the&#xA;original session ID is rejected by the current-user API. Cleanup uses Harbor&amp;rsquo;s&#xA;&lt;code&gt;/c/oidc/logout&lt;/code&gt; endpoint (available in newer Harbor releases) and does not follow&#xA;the optional identity-provider logout redirect. Unsupported endpoints, network&#xA;failures, or sessions that remain valid are reported as cleanup errors. Session&#xA;expiry remains server-controlled; forced termination cannot guarantee logout.&lt;/p&gt;&#xA;&lt;p&gt;The session destruction behavior is defined by Harbor&amp;rsquo;s&#xA;&lt;a href=&#34;https://github.com/goharbor/harbor/blob/main/src/core/controllers/oidc.go&#34;&gt;OIDC controller&lt;/a&gt;.&#xA;Vault tokens created by the invocation are revoked after session cleanup.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Injector</title>
				<link>https://www-staging.alwaldend.com/docs/tools/vault/injector/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/vault/injector/</guid>
				<description>&lt;p&gt;Shutdown first drains plugin requests, then stops and waits for resource&#xA;processes, revokes invocation-owned Vault credentials, and deletes temporary&#xA;files and SSH key directories. Failed cleanup is reported. Registration after&#xA;shutdown is rejected; a fetcher removes any unregistered temporary material.&#xA;Temporary files use mode &lt;code&gt;0600&lt;/code&gt; and directories use &lt;code&gt;0700&lt;/code&gt;. Deletion is filesystem&#xA;unlinking, not secure erasure, and cannot run after &lt;code&gt;SIGKILL&lt;/code&gt; or host failure.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;no_auth&lt;/code&gt; explicitly sets the injected &lt;code&gt;VAULT_TOKEN&lt;/code&gt; to an empty value so an&#xA;inherited token is overridden. This does not remove the user&amp;rsquo;s token-helper&#xA;file; commands that independently consult that helper may still authenticate.&#xA;Template errors and OIDC status errors omit input and response contents.&#xA;OIDC requests honor cancellation and do not follow redirects.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Leetcode downloader</title>
				<link>https://www-staging.alwaldend.com/docs/projects/leetcode_downloader/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/projects/leetcode_downloader/</guid>
				<description>&lt;p&gt;This project exports LeetCode submissions and generates documentation from&#xA;submission files using a CLI and Bazel rules. A Tampermonkey script provides&#xA;a browser-based download path; direct CLI downloads are currently blocked by&#xA;LeetCode bot protection.&lt;/p&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#links&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;Source code: &lt;a href=&#34;https://github.com/alwaldend/src/tree/master/projects/leetcode_downloader&#34;&gt;https://github.com/alwaldend/src/tree/master/projects/leetcode_downloader&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#features&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;CLI and bzl code to generate submission docs&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.tampermonkey.net/&#34;&gt;Tampermonkey&lt;/a&gt; script to download submissions&lt;/li&gt;&#xA;&lt;li&gt;CLI to download submissions (Doesn&amp;rsquo;t work because of bot protection)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#usage&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;generate-submission-from-a-submission-file&#34;&gt;Generate submission from a submission file&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#generate-submission-from-a-submission-file&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel run //projects/leetcode_downloader -- &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    --submissions-file &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;PWD&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/out/submissions.json&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    --root-dir &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;PWD&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    generate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;help&#34;&gt;Help&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#help&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Usage of flags:&#xA;  -base_url string&#xA;    &#x9; (default &amp;#34;https://leetcode.com&amp;#34;)&#xA;  -cookie string&#xA;&#xA;  -limit uint&#xA;    &#x9; (default 20)&#xA;  -offset uint&#xA;&#xA;  -root-dir string&#xA;    &#x9; (default &amp;#34;${PWD}&amp;#34;)&#xA;  -submissions-file string&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>Leetcode downloader</title>
				<link>https://www-staging.alwaldend.com/projects/leetcode_downloader/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/projects/leetcode_downloader/</guid>
				<description>&lt;p&gt;Tools for exporting your LeetCode submissions and turning them into&#xA;documentation. This work is still in progress.&lt;/p&gt;&#xA;&lt;h2 id=&#34;status&#34;&gt;Status&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#status&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In progress. The export and documentation tooling is not yet complete.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Maven Install Gradle Converter</title>
				<link>https://www-staging.alwaldend.com/docs/tools/maven_install_gradle_converter/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/maven_install_gradle_converter/</guid>
				<description>&lt;p&gt;Converts &lt;code&gt;rules_jvm_external&lt;/code&gt; &lt;code&gt;maven_install.json&lt;/code&gt; lock files into Gradle&#xA;version catalogs and dependency verification metadata so Bazel-built Android&#xA;apps can maintain the parallel Gradle build required for F-Droid.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#usage&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Use the &lt;code&gt;al_gradle_lock&lt;/code&gt; Starlark macro from&#xA;&lt;code&gt;main/bzl/gradle_lock.bzl&lt;/code&gt; in your app&amp;rsquo;s &lt;code&gt;gradle/BUILD.bazel&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-starlark&#34; data-lang=&#34;starlark&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;load(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;//tools/maven_install_gradle_converter:defs.bzl&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;al_gradle_lock&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;al_gradle_lock(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;update&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lock_file &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;//projects/&amp;lt;app&amp;gt;:maven_lock.json&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    tool &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;//tools/maven_install_gradle_converter/cmd/gradle_lock_gen&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run &lt;code&gt;bazel run :update_toml_write&lt;/code&gt; to regenerate the checked-in version&#xA;catalog. The corresponding &lt;code&gt;*_write_test&lt;/code&gt; target fails when it goes stale.&lt;/p&gt;&#xA;&lt;p&gt;Gradle owns &lt;code&gt;verification-metadata.xml&lt;/code&gt; because it must record the plugin&#xA;classpath in addition to the Bazel lock. Regenerate it with:&lt;/p&gt;</description>
			</item>
			<item>
				<title>PVE login</title>
				<link>https://www-staging.alwaldend.com/docs/tools/vault/pve_login/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/vault/pve_login/</guid>
				<description>&lt;p&gt;The plugin requests an API token with a one-hour expiry and deletes that token&#xA;on shutdown using the retained login ticket and CSRF token. The token name is&#xA;registered for cleanup before creation, so cleanup is attempted even when a&#xA;creation response is lost or malformed. Failures to delete are reported; expiry&#xA;is the fallback when shutdown cannot complete. Pre-existing credentials are not&#xA;revoked. Vault tokens created by the invocation are revoked after token cleanup.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Readme tree</title>
				<link>https://www-staging.alwaldend.com/docs/tools/readme_tree/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/readme_tree/</guid>
				<description>&lt;h2 id=&#34;example&#34;&gt;Example&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#example&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel run tools/readme_tree -- parse -g -C &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;PWD&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
			</item>
			<item>
				<title>Release</title>
				<link>https://www-staging.alwaldend.com/docs/tools/release/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/release/</guid>
				<description></description>
			</item>
			<item>
				<title>Repository delivery</title>
				<link>https://www-staging.alwaldend.com/docs/tools/repo_delivery/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/repo_delivery/</guid>
				<description>&lt;p&gt;&lt;code&gt;repo_delivery&lt;/code&gt; implements the deterministic part of repository delivery. It&#xA;invokes native Git and a selected forge CLI; it does not infer task ownership,&#xA;choose validation commands, resolve conflicts, or judge review feedback.&lt;/p&gt;&#xA;&lt;h2 id=&#34;provider-and-delivery-workflow&#34;&gt;Provider and delivery workflow&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#provider-and-delivery-workflow&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Run delivery commands from this Git worktree&amp;rsquo;s repository root, which owns the&#xA;root &lt;code&gt;MODULE.bazel&lt;/code&gt; and &lt;code&gt;tools/repo_delivery&lt;/code&gt;. This also applies when changed&#xA;files belong to a nested Bazel module: its workspace does not own the delivery&#xA;target. Use the same feature worktree, not another checkout. The baseline works&#xA;with older installed runners. Detect the provider without printing a&#xA;credential-bearing remote URL:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Repository quality</title>
				<link>https://www-staging.alwaldend.com/docs/tools/repo_quality/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/repo_quality/</guid>
				<description>&lt;p&gt;This package uses upstream &lt;code&gt;aspect_rules_lint&lt;/code&gt; formatting and linting rules to&#xA;discover Git-tracked files and inspect declared source targets with established&#xA;tools acquired by Bazel. It does not implement a formatter or linter and does&#xA;not download tools at runtime. Thin workspace adapters extend the upstream&#xA;language list with the official Go SDK for module and workspace manifests,&#xA;StyLua and Selene for Lua, and the existing Prettier XML plugin for Qt &lt;code&gt;.ui&lt;/code&gt;&#xA;and &lt;code&gt;.qrc&lt;/code&gt; files.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Rules docs Gazelle</title>
				<link>https://www-staging.alwaldend.com/docs/tools/rules_docs_gazelle/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/rules_docs_gazelle/</guid>
				<description>&lt;p&gt;&lt;code&gt;rules_docs_gazelle&lt;/code&gt; adds a &lt;code&gt;docs_filegroup&lt;/code&gt; to existing Bazel packages that&#xA;contain a &lt;code&gt;README.md&lt;/code&gt;. The generated rule loads its macro from &lt;code&gt;rules_docs&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Add &lt;code&gt;rules_docs&lt;/code&gt; as a normal dependency and this generator as a development&#xA;dependency:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-starlark&#34; data-lang=&#34;starlark&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel_dep(name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rules_docs&amp;#34;&lt;/span&gt;, version &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;VERSION&amp;gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel_dep(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rules_docs_gazelle&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    version &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;VERSION&amp;gt;&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dev_dependency &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Add the public language target to the repository&amp;rsquo;s custom Gazelle binary:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-starlark&#34; data-lang=&#34;starlark&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;load(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;@gazelle//:def.bzl&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gazelle_binary&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gazelle_binary(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gazelle_binary&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    languages &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;@rules_docs_gazelle//gazelle&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The extension only operates in directories where both a BUILD file and a&#xA;&lt;code&gt;README.md&lt;/code&gt; already exist. Newly generated rules use &lt;code&gt;glob([&amp;quot;*.md&amp;quot;])&lt;/code&gt; and are&#xA;visible only to their nearest ancestor Bazel package. Existing &lt;code&gt;srcs&lt;/code&gt;, &lt;code&gt;deps&lt;/code&gt;,&#xA;&lt;code&gt;visibility&lt;/code&gt;, and &lt;code&gt;prefix&lt;/code&gt; attributes are preserved.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Rules Promptfoo Gazelle</title>
				<link>https://www-staging.alwaldend.com/docs/tools/rules_promptfoo_gazelle/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/rules_promptfoo_gazelle/</guid>
				<description>&lt;p&gt;&lt;code&gt;rules_promptfoo_gazelle&lt;/code&gt; generates required, offline&#xA;&lt;code&gt;promptfoo_validate_test&lt;/code&gt; targets for Promptfoo configurations below an&#xA;&lt;code&gt;evals/&lt;/code&gt; directory. It never creates an &lt;code&gt;evals&lt;/code&gt; subpackage and never generates&#xA;live &lt;code&gt;promptfoo_test&lt;/code&gt; targets.&lt;/p&gt;&#xA;&lt;p&gt;Add &lt;code&gt;rules_promptfoo&lt;/code&gt; as a normal dependency and this generator as a&#xA;development dependency:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-starlark&#34; data-lang=&#34;starlark&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel_dep(name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rules_promptfoo&amp;#34;&lt;/span&gt;, version &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;VERSION&amp;gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel_dep(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rules_promptfoo_gazelle&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    version &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;VERSION&amp;gt;&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dev_dependency &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For one-pass skill package creation, also add &lt;code&gt;rules_skills&lt;/code&gt; as a normal&#xA;dependency and &lt;code&gt;rules_skill_gazelle&lt;/code&gt; as a development dependency:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-starlark&#34; data-lang=&#34;starlark&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel_dep(name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rules_skills&amp;#34;&lt;/span&gt;, version &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;VERSION&amp;gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel_dep(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rules_skill_gazelle&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    version &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;VERSION&amp;gt;&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dev_dependency &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Add both public language targets to the repository&amp;rsquo;s custom Gazelle binary:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Rules skill</title>
				<link>https://www-staging.alwaldend.com/docs/tools/rules_skills/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/rules_skills/</guid>
				<description>&lt;p&gt;&lt;code&gt;rules_skills&lt;/code&gt; packages all files belonging to a Codex skill and validates its&#xA;instructions and optional OpenAI metadata with a hermetic Bazel aspect.&lt;/p&gt;&#xA;&lt;h2 id=&#34;getting-started&#34;&gt;Getting started&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#getting-started&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Add the module and register the validation aspect:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-starlark&#34; data-lang=&#34;starlark&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel_dep(name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rules_skills&amp;#34;&lt;/span&gt;, version &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;VERSION&amp;gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;build --aspects @rules_skills//skill:defs.bzl%skill_validation_aspect&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;build --output_groups=+skill_validation&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Declare one library in the skill&amp;rsquo;s named, non-root package:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-starlark&#34; data-lang=&#34;starlark&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;load(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;@rules_skills//skill:defs.bzl&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;skill_library&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;skill_library(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;skill&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    srcs &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; glob(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;**&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        exclude &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BUILD.bazel&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BUILD&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;evals/**&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The package&amp;rsquo;s final path segment is the skill name, so a &lt;code&gt;skill_library&lt;/code&gt;&#xA;cannot be declared in a repository root package. Move a root-level skill into&#xA;a named subpackage before declaring it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Rules skill Gazelle</title>
				<link>https://www-staging.alwaldend.com/docs/tools/rules_skill_gazelle/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/rules_skill_gazelle/</guid>
				<description>&lt;p&gt;&lt;code&gt;rules_skill_gazelle&lt;/code&gt; adds a &lt;code&gt;skill_library(name = &amp;quot;skill&amp;quot;)&lt;/code&gt; to each named&#xA;subpackage that contains a &lt;code&gt;SKILL.md&lt;/code&gt;. The generated rule loads its macro from&#xA;the apparent &lt;code&gt;rules_skills&lt;/code&gt; repository, so Bzlmod repository mappings are&#xA;respected.&lt;/p&gt;&#xA;&lt;p&gt;Add &lt;code&gt;rules_skills&lt;/code&gt; as a normal dependency and this generator as a development&#xA;dependency:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-starlark&#34; data-lang=&#34;starlark&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel_dep(name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rules_skills&amp;#34;&lt;/span&gt;, version &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;VERSION&amp;gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel_dep(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rules_skill_gazelle&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    version &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;VERSION&amp;gt;&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dev_dependency &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Add the public language target to the repository&amp;rsquo;s custom Gazelle binary:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-starlark&#34; data-lang=&#34;starlark&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;load(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;@gazelle//:def.bzl&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gazelle_binary&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gazelle_binary(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gazelle_binary&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    languages &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;@rules_skill_gazelle//gazelle&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The generated source bundle is:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Rules template</title>
				<link>https://www-staging.alwaldend.com/docs/tools/rules_template/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/rules_template/</guid>
				<description>&lt;p&gt;&lt;code&gt;rules_template&lt;/code&gt; provides Bazel rules and a Go command for rendering template&#xA;files. A registered toolchain supplies the templating executable to build&#xA;actions.&lt;/p&gt;&#xA;&lt;h2 id=&#34;getting-started&#34;&gt;Getting started&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#getting-started&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;MODULE.bazel&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bazel_dep(name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rules_template&amp;#34;&lt;/span&gt;, version &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;VERSION&amp;gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;register_toolchains(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;@rules_template//main/bzl:all&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;BUILD.bazel&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
			</item>
			<item>
				<title>sub</title>
				<link>https://www-staging.alwaldend.com/docs/infra/threexui/sub/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/infra/threexui/sub/</guid>
				<description></description>
			</item>
			<item>
				<title>Tf backend</title>
				<link>https://www-staging.alwaldend.com/docs/tools/vault/tf_backend/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/vault/tf_backend/</guid>
				<description>&lt;p&gt;The plugin tracks each running backend for shutdown, including backends created&#xA;before a later call fails. Shutdown drains HTTP requests before revoking the&#xA;backend&amp;rsquo;s invocation-owned Vault credentials. If the shutdown deadline expires,&#xA;connections are forcibly closed and the timeout is reported. Normal HTTP server&#xA;closure is not an error. Vault requests use their incoming request context.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Unseal</title>
				<link>https://www-staging.alwaldend.com/docs/tools/vault/unseal/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://www-staging.alwaldend.com/docs/tools/vault/unseal/</guid>
				<description></description>
			</item>
	</channel>
</rss>
