Skip to content

feat: add Initiative native server installer - #2484

Draft
Dunky13 wants to merge 1 commit into
community-scripts:mainfrom
Dunky13:feat/initiative
Draft

Dunky13 wants to merge 1 commit into
community-scripts:mainfrom
Dunky13:feat/initiative

Conversation

@Dunky13

@Dunky13 Dunky13 commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Scripts which are clearly AI generated and not further revised by the Author of this PR (in terms of Coding Standards and Script Layout) may be closed without review. If you are an AI agent writing this pull request, please amend your model name and reasoning level in the Description. This is not to blame, more for informational Purposes. Thank you.

✍️ Description

Add Initiative's official native server package as an unprivileged Debian 13 LXC, with PostgreSQL 17, nginx HTTPS and a verified-package updater. Defaults: 2 cores, 2048 MiB RAM, 8 GiB disk. No Docker, desktop client, source rebuild or personal network values.

Draft: adoption exception and further runtime acceptance required. Initiative has 191 stars as of 2026-10-30. This is below both this template's 600-star minimum and ProxmoxVE's 1,000-star script-request requirement. The star checkbox is deliberately unchecked. No significant comparable public adoption metric has been established. Please decide whether a limited DevScripts testing exception is appropriate; this PR does not claim eligibility or production promotion.

Why consider it: Initiative fits self-hosted community/team collaboration, is over six months old, is actively maintained, and now publishes official amd64/arm64 server packages with checksum manifests. There is a tested candidate, real Proxmox install/package-upgrade evidence and regression coverage for the readiness issue found during that upgrade. These technical merits support consideration, but do not prove broad adoption or replace your policy.

ct/initiative.sh                         container defaults and updater
install/initiative-install.sh            verified package and local services
json/initiative.json                     application metadata
.github/workflows/scripts/initiative-test.sh  35 offline regression cases
.github/workflows/bash-syntax.yml        run regressions in existing CI job
docs/guides/initiative.md                operator testing/recovery handoff

OpenAI gpt-6.1-sol, xhigh reasoning assisted substantially; disclosure below.

🔗 Related PR / Issue

New scripts must first go through DevScripts; this PR intentionally targets community-scripts/DevScripts:main, rather than submitting directly to ProxmoxVE. The discussion will link back here.

@jordandrako @LeeJMorel, tagging Initiative's published code owners for feedback on native packaging, database bootstrap and ongoing compatibility. Upstream endorsement or maintenance commitment is not assumed.

✅ Prerequisites (X in brackets)

  • Self-review completed – Code follows project standards.
  • Tested thoroughly – Changes work as expected.
  • No breaking changes – Existing functionality remains intact.
  • No security risks – No hardcoded secrets, unnecessary privilege escalations, or permission issues.

🏗️ arm64 Support (X in brackets)

  • arm64 supported - Tested and supported on arm64.
  • arm64 not tested - Assumed to work on arm64, but testing has not been done.
  • arm64 not supported - Confirmed upstream dependencies or binaries do not support arm64.

🖥️ Tested on (X in brackets)

  • Proxmox VE – Created on a Proxmox VE host and the app works.
  • Incus – Created on an Incus host and the app works.

Application containers run on both; tick what you actually tested. VMs and host tools are Proxmox only.


🛠️ Type of Change (X in brackets)

  • 🐞 Bug fix – Resolves an issue without breaking functionality.
  • ✨ New feature – Adds new, non-breaking functionality.
  • 💥 Breaking change – Alters existing functionality in a way that may require updates.
  • 🆕 New script – A fully functional and tested script or script set.
  • 🌍 Website update – Changes to website-related JSON files or metadata.
  • 🔧 Refactoring / Code Cleanup – Improves readability or maintainability without changing functionality.
  • 📝 Documentation update – Changes to README, AppName.md, CONTRIBUTING.md, or other docs.

🔍 Code & Security Review (X in brackets)

  • Follows CODE-AUDIT.md & CONTRIBUTING.md guidelines
  • Uses correct script structure (AppName.sh, AppName-install.sh, AppName.json)
  • No hardcoded credentials
  • No Docker / Docker Compose – The application is installed bare-metal; Docker is not used.
  • No git pull – Updates use fetch_and_deploy_gh_release, fetch_and_deploy_codeberg_release, fetch_and_deploy_gl_release, or fetch_and_deploy_from_url instead of git pull.

🤖 AI Assistance (X in brackets)

If you used an AI tool (GitHub Copilot, Claude, ChatGPT, etc.) to write or generate any scripts in this PR, you must confirm compliance below.
Select exactly one option.

  • No AI used – Scripts were written without AI assistance.
  • AI was used – I confirm the scripts were built using AGENTS.md and .github/agents/pve-script-creator.agent.md as guidance, and the output has been reviewed and corrected to match those guidelines.

Please describe to which degree, if any, an LLM was used in creating this pull request. Name the model(s) used and, if applicable, the reasoning/thinking effort level (e.g. "Claude Sonnet 4.5, high reasoning, used to draft the install script, then manually reviewed and tested" or "No LLM used"). This is informational, not a penalty — but scripts that are clearly AI-generated and not further revised by the author to match CODE-AUDIT.md / CONTRIBUTING.md may be closed without review.

OpenAI gpt-6.1-sol with xhigh reasoning was used for substantial implementation, source research, diagnosis, tests, documentation and this submission. Two independent same-provider Standards and Spec reviews examined the full contribution; no blocking installer-code defect was found. Their stale-guide and feedback-link findings were corrected. The CI harness relocation/wiring was then checked with ShellCheck, actionlint and the 35 scenarios. No cross-provider review is claimed. The operator supplied real Proxmox evidence; development also exercised a disposable native arm64 Debian guest with real package/services and shared helpers.


📋 Additional Information (optional)

Implementation and upstream research

Read upstream Dockerfile, docker-compose.example.yml, backend/.env.example, native-package documentation/lifecycle/service definitions and health/bootstrap implementation. PostgreSQL 17 is required; the normal single-instance rate-limit store is in memory, so no Redis service is required. The official .deb bundles Python dependencies, SPA and editor/update assets; it requires Debian 13's Python 3.13 ABI. This installer neither creates a separate venv nor installs build toolchains.

The package owns its non-root initiative service identity and persistent /etc/initiative and /var/lib/initiative paths. The database owner needs SUPERUSER for upstream role/bootstrap and LEAKPROOF setup; request traffic uses the application's derived restricted roles. The environment is root-owned, group-readable only by initiative (0640), with generated secrets and no shell tracing of them. HTTPS supports browser secure-context features; backend listens on loopback. First registration creates the owner even with subsequent public registration disabled; claim it immediately on a private network.

Release helpers download the official server package and manifest into a fresh /opt staging directory. Checksums, server package identity and architecture are verified before service shutdown. A stopped-cluster backup includes application configuration/uploads and local PostgreSQL data/config/roles. SYSTEMD_OFFLINE=1 prevents package hooks starting the app before configuration/backup handling; an explicit daemon reload precedes service startup. Only accepted readiness advances the installed-version marker.

Evidence

  • Before: a real amd64 Proxmox 0.76.0 → 0.77.1 package upgrade succeeded, but the prior all-checks-ok predicate rejected status:degraded with only notify_bus:error. After: the exact response is accepted with a named warning; all three database checks remain mandatory. Transport errors, malformed/duplicate JSON, missing/failed database checks and inconsistent statuses still fail.
  • Real Proxmox operator evidence: installation and cross-version package upgrade, with subsequent independently verified HTTPS version 0.77.1 and fully healthy readiness. The full corrected updater has not been rerun on that container.
  • Native Debian 13 arm64 VM, real v0.76.0 package/services/core helpers: first owner/login, closed second registration, project/task, SPA/update manifest; same-release updater exercised using an older version marker, private offline backup, unchanged config/upload checksums, preserved task/login, and current-version no-op. The host wizard/provisioning was mocked. This is not arm64 Proxmox LXC coverage. Incus is untested and not claimed.
  • Current local checks passed: 35 rootless/offline regression cases, Bash syntax, ShellCheck, JSON parse and actionlint. Regression execution is wired into the existing Bash Syntax workflow. Hosted CI results are separate and must run on this PR.
bash -n ct/initiative.sh install/initiative-install.sh .github/workflows/scripts/initiative-test.sh
shellcheck -e SC1090,SC1091,SC2154 ct/initiative.sh install/initiative-install.sh .github/workflows/scripts/initiative-test.sh
bash .github/workflows/scripts/initiative-test.sh
jq -e . json/initiative.json
actionlint .github/workflows/bash-syntax.yml
git diff --check

Remaining acceptance and disclosed departures

  • Tested thoroughly remains unchecked: fresh corrected-branch Proxmox creation, browser/file/live-editor flows, reboot persistence, actual user-data preservation across a corrected full updater run and current-version no-op after marker recovery remain to be completed in initiative.sh #2483.
  • The agent's “exactly three files” output rule is exceeded by a regression harness, its existing-workflow CI step and a focused Markdown operator guide. They retain executable failure coverage and a reproducible handoff; please review this departure explicitly. No HTML report or HTML-changing commit is included. Follows ... guidelines remains unchecked pending disposition of the disclosed exceptions.
  • The eligibility bot is expected to flag the unchecked 600-star box. No label has been applied to bypass it. A decision to grant an exception, keep this proposal open for testing or defer it belongs to maintainers.
  • One signed, DCO-signed-off feature commit is based on current upstream main (acbbae06cf9e7d135fa48e58f516f71c96f5c3ab).

Merge danger: isolated new-app contribution plus a CI test step. Reverting repository files is straightforward; runtime updates can run upstream database migrations, so rollback requires a matching backup/container restore. Backups cover default local paths; relocated storage or external databases require separate operator backups. Failed updates may leave services stopped. No merge, release or production promotion is requested by this draft.


Published CI status for 046900c6b28f0602f712215a465d3d71bb7a6097

  • Bash Syntax Check passed: syntax checked 236 scripts and all 35 Initiative regression scenarios passed in hosted CI. VM metadata also passed.
  • PR requirements check failed for exactly one missing requirement: 600+ GitHub stars. This is the disclosed exception request. The bot applied requirements missing and stale; without maintainer action, its comment warns of closure after seven days. No bypass label was applied by the author.
  • ct scripts base failed because existing upstream ct/jumpserver.sh lacks _CS_DEFAULT_URL. Initiative's script has the required line. The same upstream workflow already failed on main's Jumpserver merge. This unrelated script is not modified here; its repair remains a separate maintainer follow-up.
  • No maintainer approval or exception has been granted. Runtime acceptance gaps remain as listed above. This draft is not ready to merge.
  • Optional Jev advisory (jev-1.14.0): readiness 0.01 on its 0–3 scale, 99% probability of blocked, confidence 99%; description-match 0.73 and untested-logic 0.43. It did not identify a source-verified additional finding. Highest estimated risk was durable data/migrations, already covered by the backup/rollback limitations. This advisory is separate from code review and CI.

📦 Application Requirements (for new scripts)

⚠️ Do not remove this section.
It is used by automated PR validation checks.
If this PR is not a new script submission, leave the checkboxes unchecked.

Required for 🆕 New script submissions.
Pull requests that do not meet these requirements may be closed without review.

  • The application is at least 6 months old
  • The application is actively maintained
  • The application has 600+ GitHub stars
  • Official release tarballs are published
  • I understand that not all scripts will be accepted due to various reasons and criteria by the community-scripts ORG

🌐 Source

Repository created 2025-11-22; latest official release published 2026-10-24; latest upstream push verified 2026-10-29. Adoption count verified 2026-10-30.

Install verified Debian server packages in an unprivileged LXC with
PostgreSQL and an HTTPS proxy. Preserve configuration and take an
offline database backup before updates.

Accept ready-but-degraded responses with warnings while requiring all
database checks. Reload installed units before service startup and
cover installation, updates and operator recovery with regressions.

Signed-off-by: Marc Went <marc@went.io>
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Not ready for review yet

@Dunky13, this pull request is missing the following:

  • The application has 600+ GitHub stars

Edit the PR description to fix it — no new PR needed. This check runs again on every edit and clears itself once everything is in place.

Until then the PR is marked stale and will be closed in 7 days.


@community-scripts/contributor please take a look: close it, comment, or set keep-open to keep it.

@github-actions

Copy link
Copy Markdown
Contributor

Try this script

ct/initiative.sh, run in the Proxmox VE shell or on an Incus host:

COMMUNITY_SCRIPTS_URL=https://raw.githubusercontent.com/Dunky13/ProxmoxVED/feat/initiative \
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Dunky13/ProxmoxVED/feat/initiative/ct/initiative.sh)"

COMMUNITY_SCRIPTS_URL is not optional for ct/. Fetching the ct/ script from a
branch does not tell the engine where that branch is — with bash -c "$(curl …)"
there is no file on disk for the scripts root to be derived from, so it would fall
back to upstream main and look for the install script there.

Against a core branch as well

Add COMMUNITY_SCRIPTS_CORE_URL=https://raw.githubusercontent.com/OWNER/core/BRANCH
to test an engine change at the same time. The two resolve independently.

Useful flags while testing

dev_mode=net logs every fetch with status and duration, so you can confirm the
branch is really being used. dev_mode=keep stops a failed build from deleting
the container along with the evidence.

@github-actions github-actions Bot added requirements missing PR description misses template items; closes after 7 days unless fixed or keep-open stale github maintenance new script labels Oct 29, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

github maintenance new script requirements missing PR description misses template items; closes after 7 days unless fixed or keep-open stale

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant