Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
8f2e89e
docs: add Cursor Cloud specific instructions to AGENTS.md
cursoragent Feb 25, 2026
c7fb9d8
fix(irc): exempt Docker network from DNSBL and connect-flood bans
cursoragent Feb 26, 2026
70353a4
fix(bridge): patch cfg.irc_relaymsg_clean_nicks in RELAYMSG test
cursoragent Feb 26, 2026
feef203
Add comprehensive UnrealIRCd configuration audit report
cursoragent Feb 26, 2026
7a32788
Add comprehensive Atheme config audit report
cursoragent Feb 26, 2026
1fe0212
fix(irc): address critical and warning findings from config audit
cursoragent Feb 26, 2026
28d0d83
fix(atheme): address critical and warning findings from config audit
cursoragent Feb 26, 2026
c5ccb83
fix(irc): apply findings from deep wiki documentation review
cursoragent Feb 26, 2026
26143f6
fix(prosody): address critical findings from docs cross-reference audit
cursoragent Feb 26, 2026
03c1ebc
docs: exhaustive env var audit across atl.chat monorepo
cursoragent Feb 26, 2026
9a6705a
refactor(env): 12-factor cleanup of .env.example
cursoragent Feb 26, 2026
9f4bf66
fix: address dev/prod lifecycle gaps from audit
cursoragent Feb 26, 2026
f8ba7e9
feat: add two-server deployment guide and proxy trust config
cursoragent Feb 26, 2026
49d96f5
fix(irc): migrate webirc to proxy block syntax, use x-forwarded for NPM
cursoragent Feb 26, 2026
0239b22
feat(xmpp): add mod_http_oauth2 for Bearer token auth
cursoragent Feb 27, 2026
dee34b9
refactor(bridge): rename atl-bridge identifiers to bridge for consist…
kzndotsh Feb 27, 2026
32481fd
chore(prosody): harden oauth2 config and update feeds
kzndotsh Feb 27, 2026
57ebc44
chore(atheme): fix stale line reference in config template
kzndotsh Feb 27, 2026
4664ed5
refactor(justfile): remove staging targets and harden prod flow
kzndotsh Feb 27, 2026
4c38989
refactor(scripts): remove staging logic and improve env safety
kzndotsh Feb 27, 2026
5036273
docs: remove staging env and add SRA bootstrap guide
kzndotsh Feb 27, 2026
f3bcf9d
docs(deployment): remove staging and harden just installation
kzndotsh Feb 27, 2026
fcf5df4
docs(irc): remove staging references from config guide
kzndotsh Feb 27, 2026
80beca5
docs(irc): simplify CI/CD to production only
kzndotsh Feb 27, 2026
01d47cd
docs: remove staging targets from root AGENTS.md
kzndotsh Feb 27, 2026
b19ef35
chore(env): remove staging and add secure registration key placeholder
kzndotsh Feb 27, 2026
e608f3f
docs(audit): update lifecycle audit for staging removal
kzndotsh Feb 27, 2026
f7a1131
docs(cursor): remove staging from database migration guide
kzndotsh Feb 27, 2026
3a865fe
chore(cursor): remove staging env from ignore file
kzndotsh Feb 27, 2026
0031651
fix(bridge.yaml): update healthcheck command to use pgrep for process…
kzndotsh Feb 27, 2026
5df7a67
chore(nginx): add shellcheck directive to ignore SC2016 warning
kzndotsh Feb 27, 2026
e2d8b54
feat(docs): add apps/docs Fumadocs site and migrate legacy docs
kzndotsh Feb 28, 2026
7385d66
feat(scripts): add script to download IRC/XMPP service documentation
kzndotsh Feb 28, 2026
0b1abe6
chore(env): update .env.example with new sections and placeholders
kzndotsh Feb 28, 2026
60e7992
feat(package.json): add scripts for managing documentation lifecycle
kzndotsh Feb 28, 2026
e99d6b8
chore(gitignore): update .gitignore to exclude additional config and …
kzndotsh Feb 28, 2026
ec80285
docs(AGENTS.md): update Docker access instructions for security
kzndotsh Feb 28, 2026
0e9b758
chore(env): update .env.example with security warnings and placeholders
kzndotsh Feb 28, 2026
cb659bf
feat(config): enhance security and flexibility in atheme.conf.template
kzndotsh Feb 28, 2026
c9cbf61
feat(prosody.cfg.lua): add support for XMPP_DOMAIN environment variable
kzndotsh Feb 28, 2026
fe23d7b
fix(mermaid.tsx): change securityLevel from 'loose' to 'strict' for e…
kzndotsh Feb 28, 2026
c65396f
feat(justfile): add SRA bootstrap process for initial setup of Servic…
kzndotsh Feb 28, 2026
560a3bd
fix(prepare-config.sh): export DOLLAR variable for use in configurati…
kzndotsh Feb 28, 2026
d811955
refactor(unrealircd): update operator configuration for clarity and f…
kzndotsh Feb 28, 2026
4523ed4
chore(atheme): remove outdated AUDIT_REPORT.md file
kzndotsh Feb 28, 2026
bfd4e12
chore(logging): migrate IRC and XMPP services to stdout
kzndotsh Mar 2, 2026
08db944
chore(config): clean up comments in Prosody and UnrealIRCd templates
kzndotsh Mar 2, 2026
865ddec
docs: update documentation for stdout logging migration
kzndotsh Mar 2, 2026
759df06
chore(containers): optimize Containerfiles for correctness and security
kzndotsh Mar 2, 2026
27d29d0
chore(compose): harden all services with cap_drop and healthchecks
kzndotsh Mar 2, 2026
b2610f0
chore(env): document log rotation variables in .env.example
kzndotsh Mar 2, 2026
4c4ab4b
docs(agents): sync AGENTS.md across all apps and infra
kzndotsh Mar 2, 2026
b2355a5
chore(containers): add OCI labels, healthcheck, and layer fixes to at…
kzndotsh Mar 2, 2026
ba22995
chore(workflows): update actions to specific commit hashes and add ti…
kzndotsh Mar 2, 2026
e0d21bc
build(pyproject.toml): add hypothesis to test dependencies and ruff t…
kzndotsh Mar 2, 2026
a92d902
chore(renovate): add renovate configuration for automated dependency …
kzndotsh Mar 2, 2026
0697894
chore(deps): add ruff and hypothesis
kzndotsh Mar 2, 2026
e3c03ee
chore(webpanel): remove nginx configuration file
kzndotsh Mar 2, 2026
ea571bf
docs(AGENTS.md): remove references to deprecated 'docs-old' directory
kzndotsh Mar 2, 2026
96e82ce
fix(Containerfile): update HEALTHCHECK command to match new process name
kzndotsh Mar 2, 2026
af0d540
docs(monitoring.mdx): clarify logging behavior for The Lounge service
kzndotsh Mar 2, 2026
9169172
ci(lint.yml): update shell lint action to use pre-commit/action for i…
kzndotsh Mar 2, 2026
d5af1ef
ci(lint.yml): separate shellcheck and shfmt into distinct steps for c…
kzndotsh Mar 2, 2026
1f71598
ci(lint.yml): add setup-python action for shell language linting
kzndotsh Mar 2, 2026
6ac31fd
fix(workflow): use --entrypoint to ensure echo command runs in smoke …
kzndotsh Mar 2, 2026
e3559ca
chore(web): add .gitignore file for web app to exclude unnecessary files
kzndotsh Mar 2, 2026
b826c2b
style: convert indentation to tabs for consistency
kzndotsh Mar 2, 2026
cbb2942
ci(security.yml): add GITLEAKS_LICENSE environment variable for gitle…
kzndotsh Mar 2, 2026
d130679
ci(workflows): inherit secrets in security workflow for enhanced secu…
kzndotsh Mar 2, 2026
922ac9a
docs(architecture): update XMPP component port in architecture diagram
kzndotsh Mar 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .cursor/commands/database-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Help create and manage database migrations, generating complete migration files
- Consider zero-downtime deployment strategies
4. **Testing Strategy**
- Create test data scenarios
- Verify migration on staging environment
- Verify migration on production copy/dev environment
- Plan rollback procedures and testing
- Document deployment steps and timing

Expand All @@ -36,5 +36,5 @@ Help create and manage database migrations, generating complete migration files
- [ ] Ensured migrations are atomic and reversible
- [ ] Added error handling and validation
- [ ] Created test data scenarios
- [ ] Verified migration on staging environment
- [ ] Verified migration on local/dev environment
- [ ] Documented deployment steps and timing
2 changes: 1 addition & 1 deletion .cursor/plans/agents.md_audit_plan_0e4a4132.plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ flowchart LR
| [infra/compose/networks.yaml](infra/compose/networks.yaml) | atl-chat network | — |
| [infra/compose/irc.yaml](infra/compose/irc.yaml) | atl-irc-server, atl-irc-services, atl-irc-webpanel | — |
| [infra/compose/xmpp.yaml](infra/compose/xmpp.yaml) | atl-xmpp-server, xmpp-postgres | — |
| [infra/compose/bridge.yaml](infra/compose/bridge.yaml) | atl-bridge | — |
| [infra/compose/bridge.yaml](infra/compose/bridge.yaml) | bridge | — |
| [infra/compose/cert-manager.yaml](infra/compose/cert-manager.yaml) | cert-manager | — |
| [compose.yaml](compose.yaml) | dozzle | dev |

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ Without it, PROXY protocol from NPM will break XMPP C2S/S2S when NPM is in front

### 12. Bridge Compose

- [infra/compose/bridge.yaml](infra/compose/bridge.yaml) defines `atl-bridge` service using `ghcr.io/allthingslinux/bridge` image
- [infra/compose/bridge.yaml](infra/compose/bridge.yaml) defines `bridge` service using `ghcr.io/allthingslinux/bridge` image
Copy link

@cubic-dev-ai cubic-dev-ai bot Feb 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: The plan document now claims the bridge service is named bridge, but the compose file defines it as atl-bridge, so the guidance is incorrect.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .cursor/plans/atl.chat_codebase_architecture_audit_a6482578.plan.md, line 140:

<comment>The plan document now claims the bridge service is named `bridge`, but the compose file defines it as `atl-bridge`, so the guidance is incorrect.</comment>

<file context>
@@ -137,7 +137,7 @@ Without it, PROXY protocol from NPM will break XMPP C2S/S2S when NPM is in front
 ### 12. Bridge Compose
 
-- [infra/compose/bridge.yaml](infra/compose/bridge.yaml) defines `atl-bridge` service using `ghcr.io/allthingslinux/bridge` image
+- [infra/compose/bridge.yaml](infra/compose/bridge.yaml) defines `bridge` service using `ghcr.io/allthingslinux/bridge` image
 - Root [compose.yaml](compose.yaml) includes `infra/compose/bridge.yaml`
 
</file context>
Suggested change
- [infra/compose/bridge.yaml](infra/compose/bridge.yaml) defines `bridge` service using `ghcr.io/allthingslinux/bridge` image
- [infra/compose/bridge.yaml](infra/compose/bridge.yaml) defines `atl-bridge` service using `ghcr.io/allthingslinux/bridge` image
Fix with Cubic

- Root [compose.yaml](compose.yaml) includes `infra/compose/bridge.yaml`

### 13. E2E Test Fixture Assumptions
Expand Down Expand Up @@ -262,7 +262,7 @@ Root compose uses `dev`, `staging`, `prod`. Bridge sub-composes use `bridge` pro

### G. Bridge – Delete or Implement

Bridge is defined in `infra/compose/bridge.yaml` using the `atl-bridge` service.
Bridge is defined in `infra/compose/bridge.yaml` using the `bridge` service.

### H. Gamja (IRC Web Client)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ How the bridge fits into the monorepo and config flow:

| App | Config | Generation | Bridge Coupling |
| -------------- | ----------------------------------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| **UnrealIRCd** | `config/unrealircd.conf.template` → `unrealircd.conf` | `envsubst` via `prepare-config.sh` | `relaymsg` hostmask `bridge@${IRC_DOMAIN}`; oper `atl-bridge` with `BRIDGE_IRC_OPER_PASSWORD`; WebIRC for The Lounge |
| **UnrealIRCd** | `config/unrealircd.conf.template` → `unrealircd.conf` | `envsubst` via `prepare-config.sh` | `relaymsg` hostmask `bridge@${IRC_DOMAIN}`; oper `bridge` with `BRIDGE_IRC_OPER_PASSWORD`; WebIRC for The Lounge |
| **Atheme** | `config/atheme.conf.template` → `atheme.conf` | `envsubst` | No direct bridge coupling |
| **Prosody** | `config/prosody.cfg.lua` (Lua, no template) | Runtime `Lua.os.getenv()` | Component `bridge.${domain}` with `BRIDGE_XMPP_COMPONENT_SECRET`; MUC `general@muc.${PROSODY_DOMAIN}` |
| **Bridge** | `config.template.yaml` → `config.yaml` | `envsubst` | Consumes `IRC_BRIDGE_SERVER`, `PROSODY_DOMAIN`, `BRIDGE_DISCORD_CHANNEL_ID`, `IRC_TLS_VERIFY`, `XMPP_AVATAR_BASE_URL` |
Expand All @@ -229,7 +229,7 @@ How the bridge fits into the monorepo and config flow:
1. **Config schema** — Bridge `Config` class reads YAML produced by `prepare-config.sh`. Any `config/schema.py` must validate the same structure (mappings, irc.*, xmpp_*, etc.) that the template produces.
2. **Env vars** — Bridge also reads env at runtime (`BRIDGE_DISCORD_TOKEN`, `BRIDGE_PORTAL_*`, `BRIDGE_XMPP_*`, etc.). Config cleanup should document which keys come from YAML vs env.
3. **Compose** — Bridge container mounts `config.yaml:ro`; depends on `atl-irc-server` and `atl-xmpp-server`. No shared volume with other apps.
4. **Naming** — UnrealIRCd uses `atl-bridge` oper nick; Prosody uses `bridge.${domain}` component JID. Bridge should not hardcode these; they come from config/env.
4. **Naming** — UnrealIRCd uses `bridge` oper nick; Prosody uses `bridge.${domain}` component JID. Bridge should not hardcode these; they come from config/env.
5. **Consistency** — Other apps use `config/` dir. Bridge uses `config.yaml` at app root. Proposed `config/` package is internal Python layout; the YAML file stays at `apps/bridge/config.yaml` (or `config/config.yaml` if desired).

### 2.H Portal Audit (`~/dev/allthingslinux/portal`)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ Dev dependencies. Install latest (no version pins). **Core:** `types-pyyaml`, `t

## Integration with atl.chat

- Deploy as a bridge service under [atl.chat/apps/bridge](~/dev/allthingslinux/atl.chat/apps/bridge/) (e.g. `atl-bridge/`); compose in existing `bridge` profile; use `atl-network`; connect to IRC and XMPP by hostname per [atl.chat networking](~/dev/allthingslinux/atl.chat/docs/infra/networking.md).
- Deploy as a bridge service under [atl.chat/apps/bridge](~/dev/allthingslinux/atl.chat/apps/bridge/) (e.g. `bridge/`); compose in existing `bridge` profile; use `atl-network`; connect to IRC and XMPP by hostname per [atl.chat networking](~/dev/allthingslinux/atl.chat/docs/infra/networking.md).
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Replace local ~/dev/... links with repo-relative or absolute URLs.

The Markdown links in this line use local filesystem-style paths, which are not portable and will be broken for other contributors/readers.

Suggested doc-only fix
-- Deploy as a bridge service under [atl.chat/apps/bridge](~/dev/allthingslinux/atl.chat/apps/bridge/) (e.g. `bridge/`); compose in existing `bridge` profile; use `atl-network`; connect to IRC and XMPP by hostname per [atl.chat networking](~/dev/allthingslinux/atl.chat/docs/infra/networking.md).
+- Deploy as a bridge service under `atl.chat/apps/bridge` (e.g. `bridge/`); compose in existing `bridge` profile; use `atl-network`; connect to IRC and XMPP by hostname per [atl.chat networking](https://github.com/allthingslinux/atl.chat/blob/main/docs/infra/networking.md).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Deploy as a bridge service under [atl.chat/apps/bridge](~/dev/allthingslinux/atl.chat/apps/bridge/) (e.g. `bridge/`); compose in existing `bridge` profile; use `atl-network`; connect to IRC and XMPP by hostname per [atl.chat networking](~/dev/allthingslinux/atl.chat/docs/infra/networking.md).
- Deploy as a bridge service under `atl.chat/apps/bridge` (e.g. `bridge/`); compose in existing `bridge` profile; use `atl-network`; connect to IRC and XMPP by hostname per [atl.chat networking](https://github.com/allthingslinux/atl.chat/blob/main/docs/infra/networking.md).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.cursor/plans/custom_discord_irc_xmpp_bridge_0068eac0.plan.md at line 180,
The markdown uses local filesystem links (~/dev/allthingslinux/atl.chat/...)
which break for others; update the two links in the sentence that mentions
"Deploy as a bridge service under
[atl.chat/apps/bridge](~/dev/allthingslinux/atl.chat/apps/bridge/)" and
"atl.chat networking](~/dev/allthingslinux/atl.chat/docs/infra/networking.md)"
to either repo-relative paths (e.g. docs or apps folder paths within the
repository) or full absolute URLs (GitHub/GitLab blob/raw paths) so they resolve
for all readers; keep link text identical and only change the hrefs to the
correct repo-relative or absolute URLs.

- Secrets via env (same pattern as Biboumi/Matterbridge). Biboumi can remain for pure XMPP↔IRC; this bridge focuses on Discord↔IRC and Discord↔XMPP.

---
Expand Down
2 changes: 1 addition & 1 deletion .cursor/plans/the_lounge_integration_3ba6e863.plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ The `third/relaymsg` module (atl.chat fork) is installed and configured, enablin

- Module: `third/relaymsg` (atl.chat fork from contrib/relaymsg)
- Config: `relaymsg { hostmask "bridge@${IRC_DOMAIN}"; }`
- Permission: `relaymsg` granted to `bridge-oper` operclass (atl-bridge)
- Permission: `relaymsg` granted to `bridge-oper` operclass (bridge)

**Bridge integration (implemented):**
- Bridge requests `draft/relaymsg` and `overdrivenetworks.com/relaymsg` capabilities
Expand Down
2 changes: 0 additions & 2 deletions .cursorignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@
!.env.example
!.env.shared.example
!.env.dev
!.env.staging
!.env.prod
!.env.local
!.env.production
!.env.development
!.env.staging
!.env.production
!.env.*
!.env.dev.example
6 changes: 6 additions & 0 deletions .env.dev.example
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@ BRIDGE_PORTAL_BASE_URL=
# Disable IRC TLS cert verification (self-signed dev certs)
BRIDGE_IRC_TLS_VERIFY=false

# Relax Prosody TLS requirements for dev (self-signed certs can't pass s2s_secure_auth)
PROSODY_C2S_REQUIRE_ENCRYPTION=false
PROSODY_S2S_REQUIRE_ENCRYPTION=false
PROSODY_S2S_SECURE_AUTH=false
PROSODY_ALLOW_UNENCRYPTED_PLAIN_AUTH=true

# RELAYMSG: use clean nicks (no /d suffix) when UnrealIRCd relaymsg has require-separator no
BRIDGE_RELAYMSG_CLEAN_NICKS=true

Expand Down
Loading