@praxisui/list 9.0.67 → 9.0.68-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -2
- package/ai/component-registry.json +10 -5
- package/docs/2026-09-09-editor-public-api-investigation.md +189 -0
- package/fesm2022/praxisui-list.mjs +12492 -12352
- package/package.json +6 -6
- package/src/lib/praxis-list.json-api.md +5 -1
- package/types/praxisui-list.d.ts +40 -2
package/README.md
CHANGED
|
@@ -97,13 +97,17 @@ For HATEOAS records, the canonical `_links.self.href` is the preferred render id
|
|
|
97
97
|
- `queryContext?: PraxisDataQueryContext`: runtime query context projected into remote data.
|
|
98
98
|
- `form?: FormGroup`: external form context for selection/form bindings.
|
|
99
99
|
- `enableCustomization: boolean`: opens editor and semantic assistant affordances.
|
|
100
|
-
- `itemClick`, `actionClick`, `selectionChange`, `exportAction`: public events.
|
|
100
|
+
- `itemClick`, `actionClick`, `selectionChange`, `exportAction`: public interaction events.
|
|
101
|
+
- `configPatchChange`: explicit `{ inputPatch: { config: PraxisListConfig } }` after valid native editor Apply/Save or adapter authoring. Dynamic Page/Page Builder updates its authored page so a later Save Page preserves the edit. Hydration, schema inference, runtime filters and selection do not emit this output. The detached config snapshot excludes runtime query context; existing standalone persistence remains governed by `configPersistenceStrategy`.
|
|
102
|
+
|
|
103
|
+
The hosted list editor exposes **Configuration source** (`configPersistenceStrategy`). Choose **Page configuration** (`input-first`) for a composed page: saved individual list preferences must not replace the page document on reload. **Individual list preferences** preserves `local-first`; **Temporary configuration** uses `volatile`. The choice participates in Apply, Save and Reset alongside the child config, and does not silently replace an existing policy.
|
|
101
104
|
|
|
102
105
|
## Configuration Highlights
|
|
103
106
|
|
|
104
107
|
- Layout variants: `list`, `cards`, `tiles`.
|
|
105
108
|
- Runtime-active layout fields include `lines`, `dividers`, `groupBy`, `pageSize`, `density` and `model`.
|
|
106
109
|
- Templating slots include `leading`, `primary`, `secondary`, `meta`, `trailing`, `features`, `sectionHeader` and `emptyState`.
|
|
110
|
+
- Leading images delegated to Rich Content stay within their reserved track and retain their aspect ratio. Skin overrides are rendered in an instance-scoped style element, using the supplied CSP nonce; updates replace that element's content and destruction removes it. Appearance presets wrap within narrow editors.
|
|
107
111
|
- In `layout.rowLayout`, canonical semantic slots keep the configured desktop grid and reflow into ordered, non-overlapping rows at narrow viewports; extended operational slots stack without requiring host CSS.
|
|
108
112
|
- Template expressions use `${item.field}`. Currency/date/number templates can use config i18n defaults.
|
|
109
113
|
- Selection supports `none`, `single` and `multiple`, with return modes `value`, `item` or `id`.
|
|
@@ -122,13 +126,20 @@ Do not document those as active runtime behavior in app-specific guides until th
|
|
|
122
126
|
|
|
123
127
|
`enableCustomization` opens the canonical list editor and semantic assistant flow. `PRAXIS_LIST_AUTHORING_MANIFEST` is the executable authoring contract for template slots, actions, empty state, selection, layout, data binding, rules, skin, export, localization, accessibility and declared-only warnings.
|
|
124
128
|
|
|
129
|
+
The runtime opens its canonical editor when `openConfigEditor()` is invoked; the public `openConfigEditor(): void` method remains stable for templates and host integrations. Generic authoring hosts resolve the editor through `PRAXIS_LIST_COMPONENT_METADATA.configEditor.loadComponent`. This asynchronous resolution does not guarantee a separate downloaded chunk: the public root entrypoint also exports the editor classes, so packaging can include them in the same JavaScript module as the runtime.
|
|
130
|
+
|
|
125
131
|
`actions[].recordOpen` is runtime materialization evidence produced by governed platform authoring. It round-trips through list config but is intentionally not a free-form field in the visual editor or the list-specific AI manifest. Authors choose business intent; Metadata and Config publish the canonical source field and target identities.
|
|
126
132
|
|
|
127
133
|
Free JSON patches from AI flows are not the public authoring contract; local apply must be compiled from a manifest-backed `componentEditPlan`.
|
|
128
134
|
|
|
135
|
+
Invalid JSON in a Surface action remains an unsaved draft and blocks Apply/Save.
|
|
136
|
+
Its validity is combined with raw JSON and document/query validation; visiting
|
|
137
|
+
another tab preserves the text, and Reset discards it explicitly. See
|
|
138
|
+
[Surface consumer validation](../praxis-core/docs/surface-draft-consumers-validation-2026-09-08.md).
|
|
139
|
+
|
|
129
140
|
## Public API Snapshot
|
|
130
141
|
|
|
131
|
-
|
|
142
|
+
The root `@praxisui/list` entrypoint exports `PraxisList`, `PraxisListConfig`, list data services, templating/rich-content/selection adapters, metadata provider, list i18n helpers, AI capabilities, `PRAXIS_LIST_AUTHORING_MANIFEST` and `PraxisListDocPageComponent`. It also preserves the public editor classes `PraxisListConfigEditor` and `PraxisListWidgetConfigEditor`, and the types `PraxisListWidgetEditorInputs` and `PraxisListWidgetEditorValue`. Hosts can import these names directly from `@praxisui/list`; generic authoring hosts should resolve the configured editor through component metadata.
|
|
132
143
|
|
|
133
144
|
## Official Links
|
|
134
145
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-09-
|
|
3
|
+
"generatedAt": "2026-09-09T10:03:24.330Z",
|
|
4
4
|
"packageName": "@praxisui/list",
|
|
5
|
-
"packageVersion": "9.0.
|
|
5
|
+
"packageVersion": "9.0.68-rc.0",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -56,6 +56,12 @@
|
|
|
56
56
|
}
|
|
57
57
|
],
|
|
58
58
|
"outputs": [
|
|
59
|
+
{
|
|
60
|
+
"name": "configPatchChange",
|
|
61
|
+
"type": "{ inputPatch: { config: PraxisListConfig } }",
|
|
62
|
+
"required": false,
|
|
63
|
+
"description": "Alteração explícita do editor ou adapter para atualizar a configuração autorada na página; não emite hidratação, filtros ou seleção runtime."
|
|
64
|
+
},
|
|
59
65
|
{
|
|
60
66
|
"name": "itemClick",
|
|
61
67
|
"type": "ListItemEvent",
|
|
@@ -476,7 +482,6 @@
|
|
|
476
482
|
}
|
|
477
483
|
],
|
|
478
484
|
"configEditor": {
|
|
479
|
-
"component": "[ref:PraxisListWidgetConfigEditor]",
|
|
480
485
|
"title": "Configure list"
|
|
481
486
|
},
|
|
482
487
|
"authoringManifestRef": {
|
|
@@ -9061,9 +9066,9 @@
|
|
|
9061
9066
|
{
|
|
9062
9067
|
"chunkIndex": 0,
|
|
9063
9068
|
"chunkKind": "summary",
|
|
9064
|
-
"content": "Component ID: praxis-list\nSelector: praxis-list\nFriendly Name: Praxis List\nDescription: Lista com suporte a seleção (single/multiple), agrupamento e templates.\nLib/Package: @praxisui/list\nTags: widget, list, lista, selection, configurable\nInputs:\n - config (PraxisListConfig)\n - listId (string)\n - componentInstanceId (string)\n - configPersistenceStrategy ('local-first' | 'input-first' | 'volatile')\n - queryContext (PraxisDataQueryContext | null)\n - form (FormGroup)\n - enableCustomization (boolean)\nOutputs:\n - itemClick (ListItemEvent)\n - actionClick (ListActionEvent)\n - selectionChange (ListSelectionEvent)\n",
|
|
9069
|
+
"content": "Component ID: praxis-list\nSelector: praxis-list\nFriendly Name: Praxis List\nDescription: Lista com suporte a seleção (single/multiple), agrupamento e templates.\nLib/Package: @praxisui/list\nTags: widget, list, lista, selection, configurable\nInputs:\n - config (PraxisListConfig)\n - listId (string)\n - componentInstanceId (string)\n - configPersistenceStrategy ('local-first' | 'input-first' | 'volatile')\n - queryContext (PraxisDataQueryContext | null)\n - form (FormGroup)\n - enableCustomization (boolean)\nOutputs:\n - configPatchChange ({ inputPatch: { config: PraxisListConfig } })\n - itemClick (ListItemEvent)\n - actionClick (ListActionEvent)\n - selectionChange (ListSelectionEvent)\n",
|
|
9065
9070
|
"sourcePointer": "projects/praxis-list/src/lib/praxis-list.metadata.ts",
|
|
9066
|
-
"contentHash": "
|
|
9071
|
+
"contentHash": "edfe4ebebb53222fa9c50c8dfce03f969d98f8efb5068b074dc51df5fb864e4a",
|
|
9067
9072
|
"sourceKind": "component_definition",
|
|
9068
9073
|
"sourceId": "praxis-list",
|
|
9069
9074
|
"corpusVersion": "1.0.0"
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# Investigação da API pública dos editores List — 2026-09-09
|
|
2
|
+
|
|
3
|
+
> Registro da investigação inicial; a correção autorizada posteriormente está
|
|
4
|
+
> documentada em “Implementação e validação da correção” ao final.
|
|
5
|
+
|
|
6
|
+
## Pergunta e escopo
|
|
7
|
+
|
|
8
|
+
O usuário solicitou investigar se a remoção dos editores foi um erro, antes de
|
|
9
|
+
escolher preservar imports ou preparar uma publicação incompatível.
|
|
10
|
+
Classificação do experimento: `contrato-publico`; entrega desta investigação:
|
|
11
|
+
documentação e ferramenta de auditoria. Nenhuma variante experimental foi
|
|
12
|
+
aplicada ao checkout compartilhado ou publicada.
|
|
13
|
+
|
|
14
|
+
Fonte canônica: `projects/praxis-list/src/public-api.ts`, os dois editores e
|
|
15
|
+
`praxis-list.metadata.ts`. Consumidor direto: Stepper, que importa metadata de
|
|
16
|
+
List em seu editor. Page Builder resolve o configurador por metadata. Não foi
|
|
17
|
+
encontrado import direto das quatro declarações em outros componentes de
|
|
18
|
+
`projects/`, `src/` e `examples/` deste checkout; isso não prova ausência de hosts
|
|
19
|
+
externos. Os símbolos já eram públicos e documentados, não uma nova necessidade
|
|
20
|
+
ou uma fachada de símbolos pertencentes a outra biblioteca.
|
|
21
|
+
|
|
22
|
+
Base isolada: `7c9badae7394166101da96fbab084f1a8db2f34d`.
|
|
23
|
+
Commit da remoção: `edb8c2565fe9d4ee23d4d3903b46350fd6fef080`.
|
|
24
|
+
A tarefa paralela de navegação de editores não participa desta evidência.
|
|
25
|
+
|
|
26
|
+
## O que foi removido e por quê
|
|
27
|
+
|
|
28
|
+
O mesmo commit retirou duas linhas de `export *`, tornou lazy a resolução do
|
|
29
|
+
configurador na metadata e a abertura por `PraxisList.openConfigEditor()` e
|
|
30
|
+
passou a documentar editores opcionais fora do barrel de runtime. Portanto há
|
|
31
|
+
uma intenção explícita de carregamento sob demanda. Não encontramos, nos
|
|
32
|
+
arquivos de histórico e documentação inspecionados, uma falha reproduzida de
|
|
33
|
+
ciclo que justificasse especificamente a retirada dos exports públicos.
|
|
34
|
+
|
|
35
|
+
O pacote **realmente publicado** `@praxisui/list@9.0.67` contém quatro nomes que
|
|
36
|
+
somem do candidato atual:
|
|
37
|
+
|
|
38
|
+
- Classes: `PraxisListConfigEditor`, `PraxisListWidgetConfigEditor`.
|
|
39
|
+
- Interfaces: `PraxisListWidgetEditorInputs`, `PraxisListWidgetEditorValue`.
|
|
40
|
+
|
|
41
|
+
Baseline npm: `https://registry.npmjs.org/`, tarball `praxisui-list-9.0.67.tgz`;
|
|
42
|
+
SHA-1 do tarball: `ee84020b086a6b0c26a12f9014f0702c2c30dd25`;
|
|
43
|
+
SHA-256 da declaração: `552819ed07fe9b0cda6cd2cdf724bc7c5c2e4317ec0d61d6e032c6a2fd365f84`.
|
|
44
|
+
Os imports de classes/componentes usados em templates não são substituídos
|
|
45
|
+
transparentemente por uma função assíncrona em metadata.
|
|
46
|
+
|
|
47
|
+
## Experimentos controlados
|
|
48
|
+
|
|
49
|
+
Todas as variantes usam as mesmas dependências e configuração do checkout
|
|
50
|
+
isolado. Nenhum package.json, tsconfig ou configuração de build foi alterado.
|
|
51
|
+
|
|
52
|
+
| Variante | Exports ausentes contra npm | Resultado | Separação dos editores |
|
|
53
|
+
| --- | --- | --- | --- |
|
|
54
|
+
| Atual, sem os dois `export *` | 4 | Build List + Stepper; imports ESM passam | Dois chunks de editores separados |
|
|
55
|
+
| Restaurar os dois `export *`, mantendo loaders no fonte | 0 | Build List + Stepper; imports ESM; consumidor TS estrito; 48 testes passam | Um único FESM; loaders viram `Promise.resolve()` |
|
|
56
|
+
| Restaurar somente as duas interfaces com `export type` | 2 classes | Build List e comparação de exports passam como experimento; gate continua acusando as 2 remoções | JavaScript executável idêntico à variante atual |
|
|
57
|
+
|
|
58
|
+
Na restauração completa, o loader da metadata retorna exatamente a classe
|
|
59
|
+
exportada; não há duplicação de classe ou erro de inicialização nas importações
|
|
60
|
+
ESM de List e Stepper testadas. Os 48 testes existentes cobrem metadata,
|
|
61
|
+
`list-config-editor` e `list-widget-config-editor`. Isso não constitui teste de
|
|
62
|
+
todos os hosts, SSR ou certificação visual/E2E da variante.
|
|
63
|
+
|
|
64
|
+
Na variante atual, o entrypoint e o módulo runtime somam **1.076.605 bytes**;
|
|
65
|
+
os dois módulos de editores somam **648.541 bytes**. Restaurando os exports,
|
|
66
|
+
o FESM único tem **1.721.700 bytes**. São bytes de JavaScript parcial Angular,
|
|
67
|
+
sem compressão ou otimização de um aplicativo host. Não representam download
|
|
68
|
+
final, tempo de interação nem aumento equivalente no bundle de todo consumidor.
|
|
69
|
+
O total do pacote não aumentou: mudou principalmente o momento em que o código
|
|
70
|
+
pode ser carregado.
|
|
71
|
+
|
|
72
|
+
A variante de tipos foi compilada diretamente com `ng build praxis-list`;
|
|
73
|
+
o fluxo oficial de produção também remove comentários de source maps. Após
|
|
74
|
+
normalizar somente esses comentários **em memória para comparar**, todos os
|
|
75
|
+
quatro hashes JS coincidem com a variante atual. Nenhum artefato gerado foi
|
|
76
|
+
editado manualmente para obter esse resultado.
|
|
77
|
+
|
|
78
|
+
## Diagnóstico e decisão recomendada
|
|
79
|
+
|
|
80
|
+
1. **Erro confirmado na retirada das interfaces.** Ela não era necessária para
|
|
81
|
+
carregar editores sob demanda. `export type` preserva o contrato existente
|
|
82
|
+
sem trazer o código dos editores para o módulo principal.
|
|
83
|
+
2. **Benefício técnico confirmado na separação das classes.** A otimização não
|
|
84
|
+
era fictícia. Porém, a remoção alterou uma API já publicada e documentada.
|
|
85
|
+
3. **Não foi demonstrado que restaurar as classes causa falha funcional.** O
|
|
86
|
+
build, consumidor, importação e testes focais passaram. A consequência
|
|
87
|
+
demonstrada é a perda do splitting obtido depois da versão pública 9.0.67.
|
|
88
|
+
4. **O erro de governança foi misturar otimização com remoção pública sem um
|
|
89
|
+
tratamento explícito de compatibilidade.** Não classificar automaticamente
|
|
90
|
+
como patch compatível nem escolher uma nova major para justificar a alteração.
|
|
91
|
+
|
|
92
|
+
Para uma próxima publicação que preserve o contrato já oferecido aos hosts,
|
|
93
|
+
recomenda-se restaurar os quatro exports e ajustar a promessa documental de
|
|
94
|
+
lazy loading. Isso recupera declarações originais do dono canônico, sem alias,
|
|
95
|
+
DTO duplicado ou fachada entre bibliotecas. Se o requisito prioritário passar
|
|
96
|
+
a ser uma fronteira pública separada para os editores, preparar uma proposta
|
|
97
|
+
arquitetural de entrypoint editorial e migração explícita dos imports. Manter
|
|
98
|
+
as classes estaticamente reexportadas na raiz não garante isolamento lazy,
|
|
99
|
+
mesmo que exista um novo entrypoint. Essa decisão não foi tomada pelo usuário
|
|
100
|
+
nesta investigação; ele solicitou primeiro esclarecer se a retirada estava errada.
|
|
101
|
+
|
|
102
|
+
O estado atual com quatro remoções **não está liberado como publicação
|
|
103
|
+
compatível**. A variante somente com interfaces também não resolve a quebra dos
|
|
104
|
+
imports das classes e não deve ser apresentada como correção completa.
|
|
105
|
+
|
|
106
|
+
## Reprodução mínima
|
|
107
|
+
|
|
108
|
+
Em um checkout isolado, instalar com `npm ci --no-audit --fund=false`, obter o
|
|
109
|
+
tarball público com `npm pack @praxisui/list@9.0.67 --registry=https://registry.npmjs.org/`
|
|
110
|
+
e descompactá-lo. Usar os mesmos argumentos de build nas variantes completas:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
node scripts/build-libs.js --prod --only praxis-list,praxis-stepper
|
|
114
|
+
node tools/compare-package-exports.mjs /caminho/baseline/package dist/praxis-list
|
|
115
|
+
node --input-type=module -e "await import('@angular/compiler'); await import('@praxisui/list'); await import('@praxisui/stepper');"
|
|
116
|
+
node node_modules/@angular/cli/bin/ng.js test praxis-list --watch=false --progress=false --browsers=ChromeHeadless --include=projects/praxis-list/src/lib/praxis-list.metadata.spec.ts --include=projects/praxis-list/src/lib/editors/list-widget-config-editor.component.spec.ts --include=projects/praxis-list/src/lib/editors/list-config-editor.component.spec.ts
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
O gate de comparação verifica nomes exportados, incluindo interfaces, e hashes
|
|
120
|
+
da declaração. Não certifica assinaturas, subpaths ou comportamento. A prova
|
|
121
|
+
adicional TypeScript usou imports dos quatro nomes por `@praxisui/list`,
|
|
122
|
+
atribuição de `{ inputs: { listId, config: {} } }` ao tipo público e compilação
|
|
123
|
+
`strict`, `noEmit`, `NodeNext`, sem caminhos privados de fonte.
|
|
124
|
+
|
|
125
|
+
## Documentação, skills e limites
|
|
126
|
+
|
|
127
|
+
A skill `praxis-angular-public-api-governance` incorpora a separação entre tipos,
|
|
128
|
+
valores, imports públicos e chunks emitidos. O relatório de prontidão aponta
|
|
129
|
+
para esta investigação. Não há mudança de metadata, JSON, tokens, registry AI,
|
|
130
|
+
contratos backend, configuração de hosts ou conteúdo visual neste fechamento;
|
|
131
|
+
portanto não há artefato derivado desses contratos a regenerar. A recomendação
|
|
132
|
+
de implementação ainda exige atualizar README público e sua projeção na landing
|
|
133
|
+
quando a política final de export/loading for escolhida.
|
|
134
|
+
|
|
135
|
+
Angular MCP executado: `list_projects`, `get_best_practices`,
|
|
136
|
+
`search_documentation` (além da listagem de ferramentas). Foram mantidos tipos
|
|
137
|
+
estritos na prova de consumidor, responsabilidade dos componentes e configuração
|
|
138
|
+
original. A busca MCP falhou por indisponibilidade do serviço; consulta direta
|
|
139
|
+
à documentação oficial confirmou a relação entre entrypoints e code splitting:
|
|
140
|
+
[Angular Package Format](https://angular.dev/tools/libraries/angular-package-format)
|
|
141
|
+
e [Creating Libraries](https://angular.dev/tools/libraries/creating-libraries).
|
|
142
|
+
|
|
143
|
+
Nenhum bump, tag, publicação, deploy ou teste E2E da restauração foi realizado.
|
|
144
|
+
Os experimentos não alteraram o servidor compartilhado na porta 4003.
|
|
145
|
+
|
|
146
|
+
## Implementação e validação da correção
|
|
147
|
+
|
|
148
|
+
Após a investigação, o usuário autorizou seguir a recomendação. Foram restaurados
|
|
149
|
+
os dois `export *` originais no dono List, recuperando os quatro nomes. Os loaders
|
|
150
|
+
na metadata e em `openConfigEditor()` foram mantidos; o README agora distingue
|
|
151
|
+
abertura do editor e carregamento do JavaScript, sem garantir chunks separados.
|
|
152
|
+
Nenhuma configuração de build, dependência, payload ou manifesto foi alterado.
|
|
153
|
+
|
|
154
|
+
Foi adicionado `src/lib/list-public-api.spec.ts`, que importa as classes e as
|
|
155
|
+
interfaces pelo barrel público e verifica que a metadata resolve a mesma classe
|
|
156
|
+
exportada. A validação desta implementação produziu:
|
|
157
|
+
|
|
158
|
+
- Build oficial isolado de List e Stepper com sincronização das dependências: passou.
|
|
159
|
+
- Importação ESM dos pacotes compilados e identidade do editor resolvido: passou.
|
|
160
|
+
- Comparação com o tarball npm 9.0.67: nenhum nome removido, no build isolado e no
|
|
161
|
+
build focal de List no checkout compartilhado.
|
|
162
|
+
- Testes focais de API, metadata e dois editores: **49/49**.
|
|
163
|
+
- Testes da ferramenta de comparação: **6/6**.
|
|
164
|
+
- E2E `list-authoring-canonical.playwright.spec.ts`: **1/1**, no origin oficial
|
|
165
|
+
`http://localhost:4003`, em contexto isolado. Provou abertura, aplicação JSON,
|
|
166
|
+
salvamento, atualização do runtime, reload e reabertura com o valor preservado.
|
|
167
|
+
A captura do painel foi inspecionada. O host usa os paths de fonte oficiais;
|
|
168
|
+
a prova do pacote compilado foi feita separadamente pelas importações acima.
|
|
169
|
+
|
|
170
|
+
A evidência E2E foi arquivada em `/private/tmp/list-api-fix-browser-evidence`;
|
|
171
|
+
o runner sobrescreveu artefatos históricos rastreados, que foram restaurados
|
|
172
|
+
sem incorporar exclusões ou relatórios transitórios ao commit.
|
|
173
|
+
|
|
174
|
+
As skills `praxis-angular-public-api-governance` e
|
|
175
|
+
`praxis-list-authoring-settings` foram atualizadas, validadas e sincronizadas.
|
|
176
|
+
A skill `praxis-authoring-editors`, revisada pela tarefa de navegação de editores,
|
|
177
|
+
também foi sincronizada nesta rodada; sua evidência de runtime pertence àquela
|
|
178
|
+
tarefa. As auditorias finais registram Praxis **167/167** e Ergon **19/19** sem
|
|
179
|
+
drift, itens ausentes ou fonte inválida.
|
|
180
|
+
|
|
181
|
+
A sincronização oficial de vendor docs na landing não produziu alteração por
|
|
182
|
+
List: o artefato publicado é `praxis-list.json-api.md`, não seu README. A API JSON
|
|
183
|
+
permanece intacta. Check vendor, governança de 145 guias e sitemap passaram.
|
|
184
|
+
Não foi necessário regenerar registry AI/backend, pois os contratos declarativos
|
|
185
|
+
continuam iguais. A nova documentação de exports acompanha o README do pacote.
|
|
186
|
+
|
|
187
|
+
A remoção dos quatro nomes foi corrigida. Esta prova focal não substitui o
|
|
188
|
+
preflight integral de uma futura publicação de todas as bibliotecas, nem certifica
|
|
189
|
+
compatibilidade de todas as assinaturas. Não houve bump, tag, publicação ou deploy.
|