Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
2648276
feat(feature-flags): scaffold firefly/feature-flags with settings and…
Oct 2, 2026
33cc7d2
fix(feature-flags): refuse malformed durations and store connections,…
Oct 2, 2026
2d37775
fix(feature-flags): refuse a zero http refresh interval and pin Durat…
Oct 2, 2026
738d5ad
feat(feature-flags): add the shared flag-document and evaluation type…
Oct 2, 2026
7f1e6d9
test(feature-flags): refresh the conformance copy with the reference-…
Oct 2, 2026
de252cd
fix(feature-flags): type numeric-looking names as array-key and keep …
Oct 2, 2026
c05768e
fix(feature-flags): type Resolution metadata as array-key
Oct 2, 2026
a773ba2
feat(feature-flags): normalize shorthand and validate flag definition…
Oct 2, 2026
2853a50
fix(feature-flags): apply the parity rulings on empty lists, evaluato…
Oct 2, 2026
e7d818a
fix(feature-flags): refuse definitions nesting deeper than 256 levels
Oct 2, 2026
2fb63e3
feat(feature-flags): port the reference JSON Logic engine flagd targe…
Oct 2, 2026
7f5dabe
feat(feature-flags): add the flag-source port with the config and wat…
Oct 2, 2026
e9ea99c
fix(feature-flags): pin JsonLogic's builtin table and document date-t…
Oct 2, 2026
9518125
fix(feature-flags): pin the file source's YAML date divergence, stat-…
Oct 2, 2026
a89519a
feat(feature-flags): add flagd's fractional, sem_ver and string opera…
Oct 2, 2026
6857a94
feat(feature-flags): compose flag sources per key with cache-shared b…
Oct 2, 2026
89860af
fix(feature-flags): build the registry's cache keys through a helper …
Oct 2, 2026
c7425ea
fix(feature-flags): announce flag changes on the effective set while …
Oct 2, 2026
8cecf38
fix(feature-flags): keep the shared flag record monotonic and the cac…
Oct 2, 2026
604343e
refactor(feature-flags): share Python's str() of a JSON value between…
Oct 2, 2026
dcebc82
feat(feature-flags): evaluate flagd documents in-process, conformant …
Oct 2, 2026
ae1da81
fix(feature-flags): fall back on the newest served document and recor…
Oct 2, 2026
122f932
fix(feature-flags): read an empty defaultVariant as none, bound the d…
Oct 2, 2026
0781d31
feat(feature-flags): add the OpenFeature provider, the evaluation con…
Oct 2, 2026
b9d2a94
fix(feature-flags): copy object values out of the document, refuse a …
Oct 2, 2026
2f079fd
fix(feature-flags): read an int or Stringable targeting key as text a…
Oct 2, 2026
328997b
feat(feature-flags): count and expose evaluations; Security fills the…
Oct 2, 2026
7f30ea4
fix(feature-flags): preserve bounded telemetry graph snapshots
Oct 3, 2026
708ccce
fix(feature-flags): bound exposure snapshots before copying
Oct 3, 2026
e98bdef
feat(feature-flags): wire provider lifecycle and facade at boot
Oct 3, 2026
c6e9412
fix(feature-flags): keep shared providers until the final lifecycle s…
Oct 3, 2026
1d32f47
fix(feature-flags): restore provider ownership across startup callbacks
Oct 3, 2026
5a58123
merge: integrate reviewed flagd evaluator lane
Oct 3, 2026
58967f9
merge: integrate reviewed feature flags core lane
Oct 3, 2026
26d6a46
test(feature-flags): integrate real evaluator with security and obser…
Oct 3, 2026
7e723c1
feat(feature-flags): add fail-closed attribute gate and proxy link
Oct 3, 2026
01eb49e
feat(feature-flags): add audited flag store and commit-aware writer
Oct 3, 2026
0cae1e2
fix(book): reject missing configured manuscripts
Oct 3, 2026
52efb71
feat(feature-flags): compile gated methods into the proxy plan
Oct 3, 2026
6700d95
fix(feature-flags): contain post-commit observer failures
Oct 3, 2026
1cd6d4f
fix(feature-flags): reject case-only self fallbacks
Oct 3, 2026
a655fd8
feat(feature-flags): add Blade feature flag directives
Oct 3, 2026
0057f7c
feat(feature-flags): gate routes before argument binding
Oct 3, 2026
0e3dad5
feat(feature-flags): persist atomic audited flags with commit-aware c…
Oct 3, 2026
b47ed1b
fix(feature-flags): scope route gate decisions to matched actions
Oct 3, 2026
46480a7
feat(testing): add persistent feature flag test overrides
Oct 3, 2026
fc7aec6
feat(feature-flags): wire the store as a transaction-safe source
Oct 3, 2026
c4c1ac2
fix(testing): own feature flag override values at helper boundaries
Oct 3, 2026
b2c9320
fix(feature-flags): align test override origin with shared contract
Oct 3, 2026
67b55f9
feat(feature-flags): poll remote flagd documents with ETags
Oct 3, 2026
73f0054
fix(testing): validate flag overrides before snapshot copying
Oct 3, 2026
e66e661
feat(feature-flags): serve flagd sync and register store migration
Oct 3, 2026
2babf30
merge: lane L2 (store, HTTP source, sync server) into feature flags
Oct 3, 2026
3196468
merge: lane L3 (gating, Blade, test support) into feature flags
Oct 3, 2026
cc3eb49
test(feature-flags): run shared context vectors through resolver
Oct 3, 2026
002bc0b
test(feature-flags): vendor native store concurrency vectors
Oct 3, 2026
3d3a03e
fix(feature-flags): arbitrate concurrent creates and retry owned row …
Oct 3, 2026
7af68cc
fix(feature-flags): reject commits after native transaction aborts
Oct 3, 2026
ed9113a
fix(feature-flags): align conditional sync responses with PyFly
Oct 3, 2026
a66aab1
feat(feature-flags): add management operations and security actor source
Oct 3, 2026
d89b486
feat(feature-flags): integrate reviewed native concurrency guarantees
Oct 3, 2026
05cf842
fix(feature-flags): integrate shared conditional HTTP contract
Oct 3, 2026
824aeb1
feat(feature-flags): expose flags and health via actuator
Oct 3, 2026
6fb4c05
fix(feature-flags): trust only in-process audit origins
Oct 3, 2026
d4d0288
test(feature-flags): cover management transport vectors over HTTP
Oct 7, 2026
6f452c3
feat(admin): add feature flags management page
Oct 7, 2026
33e1063
test(feature-flags): integrate shared management transport cases
Oct 7, 2026
e2b8944
feat(feature-flags): add Artisan flag management command
Oct 7, 2026
16f5e85
fix(feature-flags): reject array preview contexts
Oct 7, 2026
5a61a71
docs(feature-flags): teach and verify rollout workflows in both books
Oct 7, 2026
d98aa84
docs(feature-flags): publish shared feature flag contract
Oct 7, 2026
e70828c
docs(feature-flags): verify application exposure and clarify telemetry
Oct 7, 2026
ad42c13
docs(feature-flags): integrate validated guides and bilingual books
Oct 7, 2026
cc23cc9
chore(release): prepare 26.10.1 feature flags release
Oct 7, 2026
ca3eafe
fix(feature-flags): preserve source snapshots and operator input sema…
Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,29 @@ All notable changes to LaraFly are documented here. This project uses CalVer (`Y

## [Unreleased]

## [26.10.1] - 2026-10-06

### Added

- **Feature flags (`firefly/feature-flags`):** in-process flagd evaluation on OpenFeature, with shared
cross-framework validation, evaluation and percentage-bucket conformance vectors. Definitions come from
config (including shorthand), a watched JSON/YAML file, an HTTP sync endpoint or a writable database store
with audit history and optimistic concurrency; PHP-FPM workers share refresh state through the cache.
- **Feature flag gates:** `#[FeatureFlag]` on beans and controllers, the `feature-flag` route middleware,
`@featureflag` / `@featurevariant` in Blade, and the `FeatureFlags` facade. Missing or erroring flags use
the caller's default, which is closed unless explicitly enabled; source refresh failures retain the last
good definitions. Bean gates support fallbacks and compile through `firefly:cache`.
- **Feature flag management:** the `flags` actuator endpoint, admin **Feature flags** page,
`php artisan firefly:flags`, `featureflags` health component, `feature_flag_evaluations_total`, change and
optional exposure events, bearer-token flagd sync server, and `withFeatureFlags()` test overrides.
The guide and both book editions include a tested Lumen rollout example.
- **Actuator:** `EndpointRequest::$rawBody` carries the original JSON request text beside its parsed body.

### Changed

- **Runtime dependencies:** added `open-feature/sdk: ^2.3` and moved `symfony/yaml: ^7.4|^8.0`
from development to runtime requirements for JSON/YAML feature-flag sources.

### Fixed

- **Release workflow:** the publication job waits for the tag on Composer's metadata endpoint
Expand Down
25 changes: 16 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<a href="docs/installation.md#requirements"><img src="https://img.shields.io/badge/php-8.3%2B-blue?logo=php&logoColor=white" alt="PHP 8.3+"></a>
<a href="docs/laravel-comparison.md"><img src="https://img.shields.io/badge/Laravel-13-FF2D20?logo=laravel&logoColor=white" alt="Laravel 13"></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-green" alt="License: Apache 2.0"></a>
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/version-26.09.11-brightgreen" alt="Version: 26.09.11"></a>
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/version-26.10.1-brightgreen" alt="Version: 26.10.1"></a>
<a href="docs/contributing.md#conventions"><img src="https://img.shields.io/badge/PHPStan-max-8A2BE2" alt="PHPStan: max"></a>
<a href="pint.json"><img src="https://img.shields.io/badge/code%20style-Pint-F55247" alt="Code Style: Pint"></a>
</p>
Expand Down Expand Up @@ -71,10 +71,11 @@ event-driven, actuator-observed microservice, chapter by chapter — every listi
**[Download the book in English or Spanish, as PDF or EPUB](https://fireflyframework.github.io/fireflyframework-php/book/).**
The published editions include the single-package installation and bundled installer.

The book is **structurally complete and bilingual (English + Spanish)**: a quick start, **fifteen chapters**
The book is **structurally complete and bilingual (English + Spanish)**: a quick start, **sixteen chapters**
across four parts — Foundations (DI, config, HTTP), Modelling & Persisting the Domain (repositories, DDD),
Coordinating & Securing the App (CQRS, EDA + transactional outbox, `#[Transactional]`, security, OAuth2 and
OpenID Connect), and Observability, Testing & Delivery (actuator, testing, the CLI + zero-reflection cache)
OpenID Connect), and Observability, Testing & Delivery (actuator, testing, the CLI + zero-reflection cache,
feature flags)
— plus a Laravel→LaraFly cheat-sheet and a glossary. The two editions are line-for-line the same book: every
chapter file has the same sections, in the same order, at the same line numbers, and every `php` listing and
every `source:`-marked excerpt in the Spanish edition is the English one character for character — the only
Expand Down Expand Up @@ -157,7 +158,7 @@ LaraFly is not a fork of Laravel and does not hide it — every package layers c
`Illuminate\Container`, Eloquent, the HTTP kernel, and the queue/cache/scheduler, so everything you already
know about Laravel keeps working underneath.

Three capabilities in that list are recent enough — and far enough from what teams assume a PHP framework
Four capabilities in that list are recent enough — and far enough from what teams assume a PHP framework
will have — that they are worth naming outright:

- **Both halves of OAuth2, as two packages you install.**
Expand Down Expand Up @@ -188,6 +189,10 @@ will have — that they are worth naming outright:
becomes a `DuplicateKeyException` carrying a 409 and a fixed sentence, with the driver's message — which
has the statement and its bindings interpolated into it — left on `previous`, for the log and never for
the wire.
- **Feature flags shared with PyFly.** [`firefly/feature-flags`](docs/modules/feature-flags.md) evaluates
[flagd](https://flagd.dev) definitions in-process on OpenFeature with the same semantics and percentage buckets
as PyFly. Gate a bean method or route with `#[FeatureFlag]` and a view with `@featureflag`; change flags at runtime
from the admin dashboard, `/actuator/flags` or `php artisan firefly:flags`, with an audit trail.

### Who is LaraFly for?

Expand Down Expand Up @@ -1061,7 +1066,7 @@ Full flag reference and generated-file contents: [CLI](docs/cli.md).

One published library, `fireflyframework/larafly`, contains the components under `packages/*` and the bundled
application skeleton. Its `replace` entries satisfy component requirements at the framework's version;
component names remain useful module boundaries, with their own test suites. The 32
component names remain useful module boundaries, with their own test suites. The 33
[module guides](docs/modules/) below group them by concern:

| Group | Module | Package(s) |
Expand Down Expand Up @@ -1095,6 +1100,7 @@ component names remain useful module boundaries, with their own test suites. The
| Operations | [Admin Dashboard](docs/modules/admin.md) — the browser dashboard over the actuator, read in-process | `firefly/admin` |
| Operations | [Bean Graph](docs/modules/bean-graph.md) — the dashboard's drawn dependency graph, with cycle reporting | `firefly/admin` |
| Operations | [Data Browser](docs/modules/data-browser.md) — the dashboard's database browser over `CrudRepository` beans, off by default | `firefly/admin` |
| Operations | [Feature Flags](docs/modules/feature-flags.md) — flagd flags on OpenFeature, gates, layered sources, a writable store and audit trail | `firefly/feature-flags` |
| Testing | [Testing](docs/modules/testing.md) — `FireflyTestCase`, recording doubles, Pest expectations | `firefly/testing` |
| Testing | [Integration Testing](docs/modules/integration-testing.md) — `@group integration`, testcontainers | `firefly/testing` |
| Tooling | [Installer](docs/modules/installer.md) — the global `firefly new` scaffolding tool | `firefly/installer` |
Expand All @@ -1116,7 +1122,7 @@ Start at the **[documentation table of contents](docs/README.md)** — it groups
- [Laravel ↔ Spring Boot Comparison](docs/laravel-comparison.md) — concept-by-concept mapping for both audiences.
- [Versioning](docs/versioning.md) · [Contributing](docs/contributing.md) · [Publishing](docs/publishing.md).
- Every [module guide](#modules) above.
- [*LaraFly by Example*](book/README.md) — the complete bilingual book (15 chapters + appendices, PDF + EPUB).
- [*LaraFly by Example*](book/README.md) — the complete bilingual book (16 chapters + appendices, PDF + EPUB).
- [`samples/lumen/`](samples/lumen/) — the wallet-and-ledger sample this README's showcases are drawn from;
run its own test suite with `vendor/bin/pest samples/lumen/tests`.

Expand All @@ -1138,9 +1144,10 @@ still ahead, accurately:
round-trip test (RabbitMQ, Postgres, Kafka) gated behind Docker + a live connection string — these run
on demand, not in the default `vendor/bin/pest`/CI pass; wiring a scheduled/opt-in CI lane for them is
still open.
- **More actuator endpoints.** Fifteen ship today — `/health`, `/info`, `/env`, `/beans`, `/conditions`,
- **More actuator endpoints.** Sixteen ship today — `/health`, `/info`, `/env`, `/beans`, `/conditions`,
`/mappings`, `/loggers`, `/scheduledtasks`, `/caches`, `/configprops`, `/metrics`, `/prometheus`,
`/process`, `/httpexchanges`, and `/oauth2clients` when the authorization server is installed — and
`/process`, `/httpexchanges`, `/oauth2clients` when the authorization server is installed, and `/flags`
when feature flags are enabled — and
`firefly.management.server.port` moves the whole surface onto a second listener, with `ManagementPortGuard`
making the actuator refuse the application port and `php artisan firefly:management:serve` running that
second listener in development. Spring Boot's `/refresh`, `/threaddump` and `/shutdown` are still not
Expand All @@ -1155,7 +1162,7 @@ still ahead, accurately:
today via a plain `#[EventListener]`; a dedicated `firefly/eventsourcing`-style package for event
sourcing/snapshots/projections is future work, as it is in PyFly.
- **Documentation.** The end-to-end [tutorial](docs/tutorial.md) (EN + ES), the *LaraFly by Example*
[book](book/README.md) (15 chapters + appendices, EN + ES, PDF + EPUB), and a
[book](book/README.md) (16 chapters + appendices, EN + ES, PDF + EPUB), and a
[docs table of contents](docs/README.md) all shipped with the documentation-parity milestone.
Deeper guides (more recipes, more diagrams) continue to grow from here.

Expand Down
6 changes: 3 additions & 3 deletions book/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ book/
src/ # EN manuscript (Markdown)
00-front/ # title/copyright/dedication/preface/conventions
00-quickstart.md # "Build Lumen step by step" quick start
01..13-*.md # the fifteen chapters, 4A and 10A included (Parts I-IV)
01..13a-*.md # the sixteen chapters, 4A, 10A and 13A included (Parts I-IV)
90-appendix-a-laravel.md # Laravel -> LaraFly cheat-sheet
94-glossary.md # glossary
src-es/ # ES manuscript, same structure/filenames
Expand All @@ -137,7 +137,7 @@ book/
## Manuscript status

The manuscript is **structurally complete** in both languages: a five-file front
matter, a "Build Lumen step by step" quick start, fifteen chapters across four
matter, a "Build Lumen step by step" quick start, sixteen chapters across four
parts —

- **Part I — Foundations**: Why LaraFly, Dependency Injection & Auto-Configuration,
Expand All @@ -148,7 +148,7 @@ parts —
Architecture & the Transactional Outbox, Transactions & the `#[Transactional]`
proxy, Security, OAuth2 and OpenID Connect
- **Part IV — Observability, Testing & Delivery**: Observability/Actuator,
Testing, the CLI & the Zero-Reflection Cache
Testing, the CLI & the Zero-Reflection Cache, Feature Flags

— plus **Appendix A** (Laravel → LaraFly cheat-sheet) and a **Glossary**. Every
chapter walks the real `samples/lumen` project. Every fenced ` ```php ` listing
Expand Down
1 change: 1 addition & 0 deletions book/book.es.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ parts:
- {id: ch11, file: 11-observability-actuator.md, num: 11, title: "Observabilidad: Salud, Métricas y el Actuator"}
- {id: ch12, file: 12-testing.md, num: 12, title: "Probar Aplicaciones LaraFly"}
- {id: ch13, file: 13-cli-cache.md, num: 13, title: "La CLI y la Caché Sin Reflexión"}
- {id: ch13a, file: 13a-feature-flags.md, num: "13A", title: "Feature Flags entre LaraFly y PyFly"}
- title: "Apéndices"
chapters:
- {id: appa, file: 90-appendix-a-laravel.md, num: "A", title: "Hoja de Referencia Laravel → LaraFly"}
Expand Down
1 change: 1 addition & 0 deletions book/book.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ parts:
- {id: ch11, file: 11-observability-actuator.md, num: 11, title: "Observability: Health, Metrics, and the Actuator"}
- {id: ch12, file: 12-testing.md, num: 12, title: "Testing LaraFly Applications"}
- {id: ch13, file: 13-cli-cache.md, num: 13, title: "The CLI and the Zero-Reflection Cache"}
- {id: ch13a, file: 13a-feature-flags.md, num: "13A", title: "Feature Flags Across LaraFly and PyFly"}
- title: "Appendices"
chapters:
- {id: appa, file: 90-appendix-a-laravel.md, num: "A", title: "Laravel → LaraFly Cheat-Sheet"}
Expand Down
10 changes: 7 additions & 3 deletions book/build/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ def _items_from_manifest(cfg: dict, man: Path, *, contents_label: str) -> list[d
# 1) front matter
for fm in cfg.get("front", []):
p = man / fm["file"]
if not p.exists():
continue
if not p.is_file():
raise FileNotFoundError(f"Configured manuscript file is missing: {p}")
items.append({
"kind": "front",
"id": fm["id"],
Expand All @@ -66,7 +66,11 @@ def _items_from_manifest(cfg: dict, man: Path, *, contents_label: str) -> list[d
for part in cfg.get("parts", []):
ptitle_full = part["title"]
eyebrow, ptitle = _split_part(ptitle_full)
chapters = [ch for ch in part["chapters"] if (man / ch["file"]).exists()]
chapters = part["chapters"]
for ch in chapters:
p = man / ch["file"]
if not p.is_file():
raise FileNotFoundError(f"Configured manuscript file is missing: {p}")
if not chapters:
continue
# stable divider id from the eyebrow, e.g. "Part I" -> "part-i"
Expand Down
2 changes: 2 additions & 0 deletions book/src-es/00-front/00-preface.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ Cada capítulo hace avanzar **Lumen**, un servicio de monedero digital y libro m

El recorrido empieza con suavidad. El **Inicio rápido** te lleva desde el instalador incluido `firefly new` hasta un endpoint en ejecución y consultable con curl, previendo en miniatura los estereotipos, el contenedor y la ruta de arranque compilada antes de que ningún capítulo te pida razonar sobre ellos. El **Capítulo 1** da un paso atrás y argumenta el enfoque completo — qué problema resuelve LaraFly y sobre qué pilares se sostiene. El **Capítulo 2** abre la sala de máquinas: el contenedor de inyección de dependencias, los atributos de estereotipo y el escaneo de componentes que compila tus clases anotadas en un manifiesto de arranque en caché, sin reflexión. Las partes posteriores de este libro — que llegarán en los capítulos siguientes — construyen hacia afuera desde esa base hacia la configuración, HTTP, la persistencia, el modelado de dominio, CQRS, la arquitectura orientada a eventos, la seguridad y la observabilidad, siempre a través de la misma base de código de `Lumen`, siempre con código que puedes ejecutar.

El Capítulo 13A cierra el recorrido de producción con feature flags: Lumen mantiene apagada una vista de la wallet, selecciona una cohorte compartida y prueba la ruta y el ciclo del override contra el framework real.

Cuando hayas terminado de trabajar todo el libro, tendrás un modelo mental de cada capa de un servicio LaraFly de producción, y una aplicación real y probada que lo demuestre.

### Cómo usar este libro
Expand Down
2 changes: 2 additions & 0 deletions book/src-es/03-configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,8 @@ Todo lo que ha mostrado este capítulo lee, en algún punto, a través de `env()

---

El Capítulo 13A aplica estas reglas de configuración a `firefly.feature-flags.enabled`, los documentos de banderas por capas y los tokens de sincronización; deja las banderas en `config/firefly.php` y los secretos en el entorno.

## Lo que aprendiste {.recap}

| Concepto | Qué hace |
Expand Down
2 changes: 2 additions & 0 deletions book/src-es/04-first-http-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,8 @@ En el arranque, `RouteWiringPass` registra una **ruta nativa de Laravel** por ca

---

El Capítulo 13A añade `#[FeatureFlag]` a una acción de controlador: su middleware rechaza la ruta apagada antes de vincular el cuerpo y no revela la clave en la respuesta de problema.

## Lo que construiste {.recap}

La Parte I está completa. Lumen ahora **arranca** (Capítulo 1), está **conectado** (la inyección por constructor del Capítulo 2 sin código de cableado), está **configurado** (los ajustes tipados y conscientes de perfil del Capítulo 3), y **sirve** — una API REST validada en `/api/v1/wallets` con:
Expand Down
2 changes: 2 additions & 0 deletions book/src-es/09-transactions.md
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,8 @@ La segunda prueba es la que importa. `Wallet::withdraw()` sobre el origen corri

---

El Capítulo 13A utiliza la misma frontera transaccional para las escrituras versionadas del almacén de banderas y sus filas de auditoría, incluidas las reglas de commit y rollback del llamador.

## Lo que aprendiste {.recap}

| Concepto | Qué hace |
Expand Down
2 changes: 2 additions & 0 deletions book/src-es/11-observability-actuator.md
Original file line number Diff line number Diff line change
Expand Up @@ -1102,6 +1102,8 @@ Es un *interruptor de funcionalidad*, no un endpoint de configuración remota: l

---

El Capítulo 13A amplía esta superficie con el endpoint `flags`, la salud de las fuentes, las métricas de evaluación y los eventos de exposición opcionales; las vistas previas de gestión no emiten métricas ni exposiciones.

## Lo que aprendiste {.recap}

| Concepto | Qué hace |
Expand Down
4 changes: 4 additions & 0 deletions book/src-es/12-testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -531,6 +531,8 @@ abstract class LumenTestCase extends FireflyDatabaseTestCase
CqrsWiringProvider::class,
EdaServiceProvider::class,
EdaWiringProvider::class,
FeatureFlagsServiceProvider::class,
FeatureFlagsWiringProvider::class,
SecurityServiceProvider::class,
SecurityWiringProvider::class,
ActuatorServiceProvider::class,
Expand Down Expand Up @@ -756,6 +758,8 @@ Lee dos veces la última frase, porque es la razón por la que este método exis

---

El Capítulo 13A prueba el `WalletRollout` incluido en Lumen con `withFeatureFlags()`, vectores de selección compartidos y una ruta protegida; después limpia los overrides para comprobar que vuelve el comportamiento anterior.

## Lo que aprendiste {.recap}

| Concepto | Qué hace |
Expand Down
3 changes: 3 additions & 0 deletions book/src-es/13-cli-cache.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ final class ManifestCacheWriter
{
return new ProxyPlanner([
new ObservabilityAdviceSource,
new FeatureFlagAdviceSource,
new MethodSecurityAdviceSource,
new ResilienceAdviceSource,
new TransactionalAdviceSource,
Expand Down Expand Up @@ -514,6 +515,8 @@ Cada aplicación que `firefly new` andamia es por tanto, desde el primerísimo `

---

El Capítulo 13A presenta `firefly:flags` para inspeccionar y cambiar banderas en ejecución; sus puertas de método también entran en el plan de proxy compilado en vez de reflejarse en cada petición.

## Lo que aprendiste {.recap}

| Concepto | Qué hace |
Expand Down
Loading
Loading