Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
7842a43
fixes
Jul 28, 2026
4cad5d6
fix(codegen): conform flext-cli root artifacts
Jul 29, 2026
86e052f
Merge remote-tracking branch 'origin/0.12.0-dev' into 0.12.0-dev
Jul 29, 2026
644e197
fix(runtime): integrate process containment and conform artifacts
Jul 29, 2026
248bb41
fix(cli): remove duplicated project metadata from dependency-groups s…
Jul 29, 2026
ee31516
chore(codegen): regenerate lazy init maps and sync environment artifacts
Jul 29, 2026
84aba96
Merge remote-tracking branch 'origin/0.12.0-dev' into 0.12.0-dev
Jul 29, 2026
493ec76
fixes
Jul 30, 2026
99ef09d
Merge remote-tracking branch 'refs/remotes/origin/0.12.0-dev' into 0.…
Jul 30, 2026
892e5e0
fixes
Jul 30, 2026
9c834db
fixes
Jul 30, 2026
dd2887a
fixes
Jul 30, 2026
9fbfff1
fix(runtime): guard missing stdout and use unwrap in process execution
Jul 30, 2026
5dc7339
fix(xlsx): tighten snapshot typing and address handling
Jul 30, 2026
d40057d
fix(cli): lazy-map settings/config exports, TYPE_CHECKING office impo…
Jul 30, 2026
b5534d3
chore(codegen): regenerate managed project surfaces
Jul 30, 2026
cf643dc
Merge remote-tracking branch 'origin/main' into 0.12.0-dev
Jul 30, 2026
6fb3366
chore(codegen): regenerate managed surfaces for flext-cli
Jul 31, 2026
30ca048
chore(codegen): adopt regenerated conform projections
Jul 31, 2026
b572c7b
Merge remote-tracking branch 'origin/0.12.0-dev' into 0.12.0-dev
Jul 31, 2026
894043a
fix(codegen): restore the schema-v61 beads pin in regenerated surfaces
Jul 31, 2026
7deed23
fix(pipeline): fail closed when a check stage raises
Jul 31, 2026
acc8abe
fix(typing): annotate the canonical facade alias p as type[FlextCliPr…
Jul 31, 2026
70e0db0
Merge pull request #49 from flext-sh/bugfix/pipeline-fail-closed
marlon-costa-dc Jul 31, 2026
9bbc15e
fix(typing): usa alias de classe nos facades lazy do TYPE_CHECKING
Jul 31, 2026
1ff7026
Merge pull request #50 from flext-sh/bugfix/typed-facade-alias
marlon-costa-dc Jul 31, 2026
aaa894d
fix(codegen): refresh direnv activation
Aug 1, 2026
26977fa
perf(pipeline): execute independent DAG stages in ready waves
Aug 2, 2026
5aa5a9f
fixes
Aug 2, 2026
efcd383
fixes
Aug 2, 2026
58e196e
fix(models): call computed_field without empty parentheses
Aug 2, 2026
4956f25
chore(codegen): adopt regenerated managed surfaces (ci, gitignore, pr…
Aug 2, 2026
bb4602a
style: apply make fmt APPLY=Y formatting
Aug 2, 2026
a11b4b7
chore(workspace): regenerate managed surfaces from canonical SSOT
Aug 2, 2026
efa3d5b
chore(deps): converge pyproject managed markers to fixed point
Aug 3, 2026
829bb94
chore(codegen): converge pyproject to the generator fixed point
Aug 3, 2026
6454edc
fix(codegen): restore the generator fixed point for [MANAGED] markers
Aug 3, 2026
6838d5e
fixes
Aug 3, 2026
922ebee
chore: regenerate Makefile and pyproject from workspace conform
Aug 3, 2026
be013e0
fix(settings): route cli Field declarations through m facade
Aug 3, 2026
32190df
Merge pull request #62 from flext-sh/bugfix/pydantic-settings-facade-…
marlon-costa-dc Aug 3, 2026
7897780
chore(gen): adopt regenerated Makefile, pyproject, and scope AGENTS
Aug 3, 2026
23a2267
merge: integrate origin/0.12.0-dev with local adopt commits
Aug 3, 2026
e9b4a0c
refactor: transition from pydantic to flext_core.m facade for validation
Aug 3, 2026
86bba85
refactor(ci): move Dockerfiles under tests/fixtures/ci/docker
Aug 3, 2026
6fb2c2b
chore(ci): expand blocking CI push branches to shared integration names
Aug 3, 2026
6c2a1c3
fix(deps): exclude standalone uv cycle
Aug 3, 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
1 change: 0 additions & 1 deletion .agents/INSTRUCTION_SURFACE.md

This file was deleted.

23 changes: 23 additions & 0 deletions .beads/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# @flext-managed: continuous
# @flext-regenerate: make gen WHAT=apply APPLY=Y
# @flext-ssot: config/workspace.yaml (ledger_id) + flext-infra config/codegen.yaml (toolchain.beads.server)
# @flext-maintenance: do not edit generated projections; edit the SSOT and regenerate
# Generated by `flext-infra gen conform`.
# Source: issue_prefix/database = workspace manifest ledger_id (config key:
# ledger_id) falling back to the canonical project name when undeclared.
# Source: dolt server block = flext-infra config/codegen.yaml
# toolchain.beads.server (machine-wide shared Dolt server facts).
# Owned ledger config: the workspace root owns this tracker; conform
# initializes and verifies it against the pinned binary.
issue-prefix: "flext-cli"

# Dolt shared-server connection (machine-wide shared server on :3308).
# The `flext-cli` database lives there; a repository-local server is never used.
dolt:
mode: server
shared-server: true
host: 127.0.0.1
port: 3308
user: root
database: flext-cli
auto-commit: "on"
72 changes: 32 additions & 40 deletions .envrc
Original file line number Diff line number Diff line change
@@ -1,56 +1,48 @@
# @generated by: flext_infra workspace sync
# Canonical direnv activation for FLEXT Python workspaces.

# Generated by `flext-infra codegen conform`.
# === SECTION: header (managed) ===
# Source: template (base/.envrc.j2)
# Free: no
# Canonical direnv activation for one inferred repository environment.
# End SECTION: header

# === SECTION: strict evaluation and watched inputs (managed) ===
# Source: template (direnv stdlib contract)
strict_env

WORKSPACE_ROOT="${PWD}"
AI_HUB="${AI_HUB:-${HOME}/.ai-hub}"
VENV_DIR="${WORKSPACE_ROOT}/.venv"
MISE_SHIMS="${WORKSPACE_MISE_SHIMS:-${MISE_SHIMS:-${HOME}/.local/share/mise/shims}}"
PYPROJECT_FILE="${WORKSPACE_ROOT}/pyproject.toml"

export AI_HUB
export WORKSPACE_ROOT
export WORKSPACE_MISE_SHIMS="${MISE_SHIMS}"
export MISE_SHIMS
watch_file .mise.toml
watch_file pyproject.toml
# End SECTION: strict evaluation and watched inputs

# === SECTION: repository environment (managed) ===
# Source: computed:nearest-pyproject-via-direnv-find_up + template
PROJECT_ROOT="$(find_up pyproject.toml)"
PROJECT_ROOT="${PROJECT_ROOT%/*}"
VENV_DIR="${PROJECT_ROOT}/.venv"
export PROJECT_ROOT
export PYTHON_KEYRING_BACKEND="keyring.backends.null.Keyring"
export PYTHONDONTWRITEBYTECODE=1
export PYTHONUNBUFFERED=1
# End SECTION: repository environment

# === SECTION: mise activation (managed) ===
# Source: template (optional installed mise runtime)
if command -v mise >/dev/null 2>&1; then
eval "$(mise activate bash --shims)"
fi
# End SECTION: mise activation

path_prepend_once() {
case ":${PATH}:" in
*":$1:"*) ;;
*) PATH="$1${PATH:+:${PATH}}" ;;
esac
}

if [[ -d "${WORKSPACE_ROOT}/bin" ]]; then
path_prepend_once "${WORKSPACE_ROOT}/bin"
fi
# === SECTION: configured paths (managed) ===
# Source: template + config:environment_path_prepends
PATH_add "${PROJECT_ROOT}/bin"
# End SECTION: configured paths

if [[ -d "${AI_HUB}/.venv/bin" ]]; then
path_prepend_once "${AI_HUB}/.venv/bin"
fi

path_prepend_once "${MISE_SHIMS}"

if [[ -f "${PYPROJECT_FILE}" && -d "${VENV_DIR}" ]]; then
# === SECTION: virtual environment (managed) ===
# Source: computed:nearest-pyproject-root/.venv + template
if [[ -f "${PROJECT_ROOT}/pyproject.toml" && -d "${VENV_DIR}" ]]; then
export UV_PROJECT_ENVIRONMENT="${VENV_DIR}"
export VIRTUAL_ENV="${VENV_DIR}"
path_prepend_once "${VENV_DIR}/bin"
PYTHON_VERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
export PYTHON_VERSION
log_status "workspace activated (python ${PYTHON_VERSION:-?}, venv ${VENV_DIR})"
elif [[ -f "${PYPROJECT_FILE}" ]]; then
log_error ".venv not found - run: uv venv && uv sync"
PATH_add "${VENV_DIR}/bin"
else
unset UV_PROJECT_ENVIRONMENT
unset VIRTUAL_ENV
log_status "workspace activated without Python project (pyproject.toml not found)"
fi

export PATH
# End SECTION: virtual environment
55 changes: 17 additions & 38 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,45 +1,24 @@
# Generated by `flext-infra codegen conform` for flext-cli — DO NOT EDIT.
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
- package-ecosystem: github-actions
directory: /
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
timezone: "America/Sao_Paulo"
interval: weekly
open-pull-requests-limit: 5
versioning-strategy: "lockfile-only"
labels:
- "dependencies"
- "python"
commit-message:
prefix: "chore(deps)"
include: "scope"
groups:
python-minor-patch:
patterns:
- "*"
update-types:
- "minor"
- "patch"
labels: [dependencies, github-actions]

- package-ecosystem: "github-actions"
directory: "/"
- package-ecosystem: devcontainers
directory: /
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
timezone: "America/Sao_Paulo"
interval: weekly
open-pull-requests-limit: 5
labels:
- "dependencies"
- "github-actions"
commit-message:
prefix: "chore(ci)"
groups:
actions-minor-patch:
patterns:
- "*"
update-types:
- "minor"
- "patch"
labels: [dependencies, devcontainers]

- package-ecosystem: pip
directory: /
schedule:
interval: weekly
open-pull-requests-limit: 5
labels: [dependencies, python]

116 changes: 116 additions & 0 deletions .github/workflows/ci-matrix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# Generated by `flext_infra codegen conform` for flext-cli.
# === SECTION: header (managed) ===
# Source: template (base/.github/workflows/ci-matrix.yml.j2)
# Free: no
# End SECTION: header
# Multi-environment CI base: proves the project bootstrap and canonical Make
# verbs work identically across distros, macOS, and Windows. The CI invokes
# the project's own Make surface; it never reimplements bootstrap.
# Runs only on main (direct push or non-draft PR targeting main).
---
name: ci-matrix

# === SECTION: triggers (managed) ===
# Source: main promotion only (integration branch uses blocking ci.yml alone)
"on":
push:
branches: [main]
pull_request:
branches: [main]
types: [opened, synchronize, reopened, ready_for_review]
workflow_dispatch: {}
# End SECTION: triggers

# === SECTION: permissions (managed) ===
# Source: template (minimal read-only permissions)
permissions:
contents: read
# End SECTION: permissions

# === SECTION: concurrency (managed) ===
# Source: template (one run per workflow+ref)
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# End SECTION: concurrency

jobs:
# === SECTION: distro-matrix (managed) ===
# Source: template + config:github_actions.checkout (distro list is template literal by design)
distro-matrix:
# Clean-machine proof per distro: build the distro image (which runs the
# full project bootstrap at image-build time), then smoke the verb surface
# inside the built container.
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.draft == false }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
distro: [ubuntu, debian, fedora, alpine, arch]
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: false
- name: Build ${{ matrix.distro }} image
run: >-
docker build
-f tests/fixtures/ci/docker/${{ matrix.distro }}.Dockerfile
-t ci-matrix-${{ matrix.distro }}
.
- name: Bootstrap + verb smoke (${{ matrix.distro }})
run: |
docker run --rm ci-matrix-${{ matrix.distro }} make help
docker run --rm ci-matrix-${{ matrix.distro }} make check
# End SECTION: distro-matrix

# === SECTION: macos (managed) ===
# Source: template + config:github_actions.checkout/setup-python/mise/setup-uv
macos:
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.draft == false }}
runs-on: macos-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: false
- name: Setup Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version-file: .python-version
- name: Install mise toolchain
uses: jdx/mise-action@dba19683ed58901619b14f395a24841710cb4925 # v4.1.0
- name: Install uv
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
with:
enable-cache: true
- name: Bootstrap
run: make setup
- name: Verb surface
run: make help
# End SECTION: macos

# === SECTION: windows (managed) ===
# Source: template + config:github_actions.checkout/setup-python/mise/setup-uv
windows:
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.draft == false }}
runs-on: windows-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: false
- name: Setup Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version-file: .python-version
- name: Install mise toolchain
uses: jdx/mise-action@dba19683ed58901619b14f395a24841710cb4925 # v4.1.0
- name: Install uv
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
with:
enable-cache: true
- name: Bootstrap
shell: bash
run: make setup
- name: Verb surface
shell: bash
run: make help
# End SECTION: windows
63 changes: 46 additions & 17 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,44 +1,73 @@
# Generated by flext_infra.github.workflows - DO NOT EDIT
# Generated by flext_infra codegen for flext-cli — DO NOT EDIT
# === SECTION: header (managed) ===
# Source: template (base/.github/workflows/ci.yml.j2)
# Free: no
# End SECTION: header

name: CI

on:
pull_request:
# === SECTION: triggers (managed) ===
# Source: operator CI policy — integration push = blocking CI only;
# main push/PR (non-draft) = blocking CI; draft and other branches = none.
"on":
push:
branches:
- dev
- develop
- 0.12.0-dev
- main
pull_request:
branches:
- main
workflow_dispatch:
types: [opened, synchronize, reopened, ready_for_review]
# End SECTION: triggers

# === SECTION: permissions (managed) ===
# Source: template (minimal read-only permissions)
permissions:
contents: read
# End SECTION: permissions

jobs:
# === SECTION: ci job (managed) ===
# Source: template + config:github_actions.*
ci:
name: ci
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.draft == false }}
runs-on: ubuntu-latest
timeout-minutes: 60
env:
CI: Y
steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
submodules: false
fetch-depth: 0

- name: Setup Python
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065
with:
python-version: "3.13"
- name: Install mise toolchain
uses: jdx/mise-action@dba19683ed58901619b14f395a24841710cb4925 # v4.1.0

- name: Install uv
uses: astral-sh/setup-uv@e58605a9b6da7c637471fab8847a5e5a6b8df081 # v5
with:
enable-cache: true
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0


- name: Setup (blocking)
- name: setup (blocking)
run: make setup

- name: Check (blocking)
- name: gen (blocking)
run: make gen APPLY=Y

- name: fmt (blocking)
run: make fmt APPLY=Y

- name: fix (blocking)
run: make fix APPLY=Y

- name: check (blocking)
run: make check

- name: Test (advisory)
continue-on-error: true
- name: test (blocking)
run: make test

# End SECTION: ci job
Loading
Loading