bookwright-cli 0.2.0__py3-none-any.whl
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.
- bookwright/__init__.py +3 -0
- bookwright/__main__.py +6 -0
- bookwright/cli.py +19 -0
- bookwright/commands/__init__.py +0 -0
- bookwright/commands/_envelope.py +36 -0
- bookwright/commands/check.py +75 -0
- bookwright/commands/graph/__init__.py +23 -0
- bookwright/commands/graph/build.py +157 -0
- bookwright/commands/graph/envelope.py +26 -0
- bookwright/commands/graph/query.py +98 -0
- bookwright/commands/init/__init__.py +5 -0
- bookwright/commands/init/conflict.py +107 -0
- bookwright/commands/init/envelope.py +322 -0
- bookwright/commands/init/git.py +96 -0
- bookwright/commands/init/main.py +263 -0
- bookwright/commands/init/resolve.py +193 -0
- bookwright/commands/init/scaffold.py +242 -0
- bookwright/commands/init/validate.py +172 -0
- bookwright/commands/integration/__init__.py +22 -0
- bookwright/commands/integration/use.py +120 -0
- bookwright/commands/validate.py +160 -0
- bookwright/commands/version.py +35 -0
- bookwright/core/__init__.py +35 -0
- bookwright/core/_blocks.py +239 -0
- bookwright/core/_build.py +154 -0
- bookwright/core/_research_block.py +56 -0
- bookwright/core/_translate.py +90 -0
- bookwright/core/errors.py +127 -0
- bookwright/core/iso639_1.py +200 -0
- bookwright/core/manifest.py +343 -0
- bookwright/errors.py +47 -0
- bookwright/golem/__init__.py +71 -0
- bookwright/golem/base.py +200 -0
- bookwright/golem/errors.py +29 -0
- bookwright/golem/modules/__init__.py +1 -0
- bookwright/golem/modules/character.py +109 -0
- bookwright/golem/modules/event.py +91 -0
- bookwright/golem/modules/feature.py +161 -0
- bookwright/golem/modules/inference.py +41 -0
- bookwright/golem/modules/narrative.py +55 -0
- bookwright/golem/modules/provenance.py +197 -0
- bookwright/golem/modules/relationship.py +38 -0
- bookwright/golem/modules/setting.py +30 -0
- bookwright/golem/namespaces.py +332 -0
- bookwright/golem/serialize.py +25 -0
- bookwright/golem/slug.py +22 -0
- bookwright/indexers/__init__.py +47 -0
- bookwright/indexers/base.py +55 -0
- bookwright/indexers/errors.py +80 -0
- bookwright/indexers/rdflib_indexer.py +89 -0
- bookwright/integrations/__init__.py +155 -0
- bookwright/integrations/base.py +117 -0
- bookwright/integrations/claude/__init__.py +29 -0
- bookwright/integrations/constants.py +38 -0
- bookwright/integrations/descriptions.py +48 -0
- bookwright/integrations/errors.py +170 -0
- bookwright/integrations/generic/__init__.py +56 -0
- bookwright/integrations/lint.py +160 -0
- bookwright/integrations/materialize.py +202 -0
- bookwright/integrations/options.py +203 -0
- bookwright/io/__init__.py +1 -0
- bookwright/io/bible.py +500 -0
- bookwright/io/errors.py +98 -0
- bookwright/io/frontmatter.py +61 -0
- bookwright/io/fs.py +226 -0
- bookwright/io/manuscript.py +15 -0
- bookwright/io/project.py +21 -0
- bookwright/io/report.py +107 -0
- bookwright/io/research.py +427 -0
- bookwright/resources/__init__.py +1 -0
- bookwright/resources/commands/bookwright-analyze.md +66 -0
- bookwright/resources/commands/bookwright-bible.md +96 -0
- bookwright/resources/commands/bookwright-checklist.md +67 -0
- bookwright/resources/commands/bookwright-clarify.md +65 -0
- bookwright/resources/commands/bookwright-constitution.md +79 -0
- bookwright/resources/commands/bookwright-continuity.md +70 -0
- bookwright/resources/commands/bookwright-draft.md +74 -0
- bookwright/resources/commands/bookwright-outline.md +71 -0
- bookwright/resources/commands/bookwright-research.md +107 -0
- bookwright/resources/commands/bookwright-scenes.md +66 -0
- bookwright/resources/commands/bookwright-synopsis.md +67 -0
- bookwright/resources/commands/bookwright-verify.md +136 -0
- bookwright/resources/commands/references/golem-character.md +65 -0
- bookwright/resources/commands/references/golem-events-timeline.md +56 -0
- bookwright/resources/commands/references/golem-relationships.md +53 -0
- bookwright/resources/commands/references/greimas-actants.md +57 -0
- bookwright/resources/commands/references/pending-protocol.md +72 -0
- bookwright/resources/commands/references/propp-functions.md +54 -0
- bookwright/resources/commands/references/research-format.md +136 -0
- bookwright/resources/project/.bookwright/cache/.gitkeep +0 -0
- bookwright/resources/project/.bookwright/schema/.gitkeep +0 -0
- bookwright/resources/project/.bookwright/templates/.gitkeep +0 -0
- bookwright/resources/project/.gitignore +23 -0
- bookwright/resources/project/README.md.j2 +40 -0
- bookwright/resources/project/__init__.py +6 -0
- bookwright/resources/project/bible/characters/.gitkeep +0 -0
- bookwright/resources/project/bible/constitution.md.j2 +74 -0
- bookwright/resources/project/bible/glossary.md +36 -0
- bookwright/resources/project/bible/locations/.gitkeep +0 -0
- bookwright/resources/project/bible/pov-structure.md +43 -0
- bookwright/resources/project/bible/relationships.md +36 -0
- bookwright/resources/project/bible/research/_index.md +28 -0
- bookwright/resources/project/bible/research/sources.md +23 -0
- bookwright/resources/project/bible/settings/.gitkeep +0 -0
- bookwright/resources/project/bible/subplots.md +35 -0
- bookwright/resources/project/bible/themes.md +36 -0
- bookwright/resources/project/bible/timeline.md +38 -0
- bookwright/resources/project/manuscript/.gitkeep +0 -0
- bookwright/resources/project/outline/arcs.md +34 -0
- bookwright/resources/project/outline/scenes.md +31 -0
- bookwright/resources/project/outline/structure.md +35 -0
- bookwright/resources/project/outline/synopsis.md +25 -0
- bookwright/resources/schemas/__init__.py +19 -0
- bookwright/resources/schemas/golem-1.1/VERSION +1 -0
- bookwright/resources/schemas/golem-1.1/golem.ttl +1947 -0
- bookwright/resources/schemas/golem-1.1/version.json +8 -0
- bookwright/resources/templates/__init__.py +1 -0
- bookwright/resources/templates/bible/character.md.tmpl +63 -0
- bookwright/resources/templates/bible/location.md.tmpl +37 -0
- bookwright/resources/templates/bible/research/_index.md.tmpl +25 -0
- bookwright/resources/templates/bible/research/sources.md.tmpl +21 -0
- bookwright/resources/templates/bible/research/tema.md.tmpl +37 -0
- bookwright/resources/templates/bible/setting.md.tmpl +38 -0
- bookwright/resources/templates/manifest.template.toml +79 -0
- bookwright/resources/templates/manuscript/chapter.md.tmpl +36 -0
- bookwright/resources/templates/scenes/scene.md.tmpl +37 -0
- bookwright/resources/vocabularies/__init__.py +6 -0
- bookwright/resources/vocabularies/greimas.ttl +4 -0
- bookwright/resources/vocabularies/propp.ttl +4 -0
- bookwright/resources/vocabularies/sources.ttl +82 -0
- bookwright/validation/__init__.py +33 -0
- bookwright/validation/anchor_queries.py +223 -0
- bookwright/validation/base.py +233 -0
- bookwright/validation/queries.py +197 -0
- bookwright/validation/registry.py +185 -0
- bookwright/validation/report.py +106 -0
- bookwright/validation/runner.py +65 -0
- bookwright/validation/validators/__init__.py +9 -0
- bookwright/validation/validators/character_presence.py +202 -0
- bookwright/validation/validators/factual_anchor.py +291 -0
- bookwright/validation/validators/focalization.py +152 -0
- bookwright/validation/validators/setting_continuity.py +100 -0
- bookwright/validation/validators/temporal.py +277 -0
- bookwright_cli-0.2.0.dist-info/METADATA +218 -0
- bookwright_cli-0.2.0.dist-info/RECORD +149 -0
- bookwright_cli-0.2.0.dist-info/WHEEL +4 -0
- bookwright_cli-0.2.0.dist-info/entry_points.txt +2 -0
- bookwright_cli-0.2.0.dist-info/licenses/LICENSE +202 -0
- bookwright_cli-0.2.0.dist-info/licenses/NOTICE +14 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"repository": "https://github.com/GOLEM-lab/golem-ontology",
|
|
3
|
+
"commit": "f666128a9a29f39c9f23c96ae1c48023cc8e7898",
|
|
4
|
+
"file": "golem/golem_v1-1.ttl",
|
|
5
|
+
"version_iri": "https://w3id.org/golem/ontology/v1.1",
|
|
6
|
+
"version_info": "1.1",
|
|
7
|
+
"retrieved": "2026-05-30"
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Bundled TOML/Markdown templates loaded via importlib.resources."""
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "[PENDING: ¿Cómo se llama el personaje?]"
|
|
3
|
+
# born: 1990 # año entero; descomenta y rellena, nunca un texto
|
|
4
|
+
# died: # año entero o deja la línea omitida si sigue vivo
|
|
5
|
+
features: []
|
|
6
|
+
narrative_roles: []
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Ficha de personaje
|
|
10
|
+
|
|
11
|
+
<!--
|
|
12
|
+
Guía para el agente y el autor: esta ficha se indexa como un `Character` del
|
|
13
|
+
modelo GOLEM. El frontmatter sólo admite las claves `name`, `born`, `died`,
|
|
14
|
+
`features` y `narrative_roles`; cualquier otra clave de nivel superior genera un
|
|
15
|
+
aviso del indexador.
|
|
16
|
+
|
|
17
|
+
- `name`: cadena obligatoria. El prompt `[PENDING: …]` es legal sólo entre
|
|
18
|
+
comillas (`name: "[PENDING: …]"`); sin comillas, los corchetes se leen como
|
|
19
|
+
una lista YAML y la ficha se descarta.
|
|
20
|
+
- `born` / `died`: año entero o se omiten. Nunca un texto ni un `[PENDING]`:
|
|
21
|
+
un valor no entero hace que el indexador descarte el archivo. La edad se
|
|
22
|
+
expresa por `born`/`died` o en prosa, jamás como cadena en el frontmatter.
|
|
23
|
+
- `features` / `narrative_roles`: listas de cadenas.
|
|
24
|
+
|
|
25
|
+
Ejemplo de frontmatter ya rellenado:
|
|
26
|
+
|
|
27
|
+
name: "Ana Soler"
|
|
28
|
+
born: 1990
|
|
29
|
+
features: ["cicatriz en la ceja", "zurda"]
|
|
30
|
+
narrative_roles: ["protagonista", "heroína"]
|
|
31
|
+
-->
|
|
32
|
+
|
|
33
|
+
## Rasgos biográficos
|
|
34
|
+
|
|
35
|
+
<!-- Guía: origen, familia, hitos vitales. La edad se deriva de `born`/`died` o
|
|
36
|
+
se cuenta aquí en prosa, nunca como dato en el frontmatter. -->
|
|
37
|
+
|
|
38
|
+
[PENDING: ¿De dónde viene el personaje y qué hechos marcaron su vida?]
|
|
39
|
+
|
|
40
|
+
## Rasgos psicológicos
|
|
41
|
+
|
|
42
|
+
[PENDING: ¿Qué quiere, qué teme y qué herida arrastra?]
|
|
43
|
+
|
|
44
|
+
## Rasgos físicos
|
|
45
|
+
|
|
46
|
+
[PENDING: ¿Qué aspecto tiene y qué detalle lo hace reconocible?]
|
|
47
|
+
|
|
48
|
+
## Rol narrativo
|
|
49
|
+
|
|
50
|
+
<!-- Guía: su función en la trama (protagonista, antagonista, aliado…) y cómo
|
|
51
|
+
se relaciona con los `narrative_roles` declarados en el frontmatter. -->
|
|
52
|
+
|
|
53
|
+
[PENDING: ¿Qué papel cumple en la historia y respecto a quién?]
|
|
54
|
+
|
|
55
|
+
## Diálogo de muestra
|
|
56
|
+
|
|
57
|
+
<!-- Guía: dos o tres réplicas que capturen su voz, para mantenerla constante. -->
|
|
58
|
+
|
|
59
|
+
[PENDING: ¿Cómo habla? Escribe una réplica característica.]
|
|
60
|
+
|
|
61
|
+
## Patrones de lenguaje corporal
|
|
62
|
+
|
|
63
|
+
[PENDING: ¿Qué gestos o tics lo delatan bajo presión?]
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Ficha de lugar
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
Guía para el agente y el autor: esta plantilla describe un lugar concreto y
|
|
5
|
+
sensorial (una taberna, un puente, una habitación), no el universo amplio (para
|
|
6
|
+
eso está la ficha de escenario). **No se indexa en v0**: el modelo GOLEM aún no
|
|
7
|
+
tiene un manejador de lugares, así que esta ficha es material de consulta y no
|
|
8
|
+
lleva frontmatter ingerido por el indexador. Ancla cada lugar en los cinco
|
|
9
|
+
sentidos para que las escenas que ocurran allí sean concretas. Ejemplo:
|
|
10
|
+
|
|
11
|
+
- Qué se ve: vigas combadas, una lámpara de aceite que parpadea.
|
|
12
|
+
- Qué se oye: el río golpeando los pilotes bajo el suelo.
|
|
13
|
+
- Qué se huele: humedad, brea, pan quemado.
|
|
14
|
+
-->
|
|
15
|
+
|
|
16
|
+
## Qué se ve
|
|
17
|
+
|
|
18
|
+
[PENDING: ¿Qué imágenes dominan el lugar a primera vista?]
|
|
19
|
+
|
|
20
|
+
## Qué se oye
|
|
21
|
+
|
|
22
|
+
[PENDING: ¿Qué sonidos lo habitan?]
|
|
23
|
+
|
|
24
|
+
## Qué se huele
|
|
25
|
+
|
|
26
|
+
[PENDING: ¿Qué olores lo caracterizan?]
|
|
27
|
+
|
|
28
|
+
## Qué se toca
|
|
29
|
+
|
|
30
|
+
[PENDING: ¿Qué texturas y temperaturas se sienten aquí?]
|
|
31
|
+
|
|
32
|
+
## Atmósfera dominante
|
|
33
|
+
|
|
34
|
+
<!-- Guía: la emoción que el lugar imprime en quien lo cruza; la suma sensorial
|
|
35
|
+
convertida en tono. -->
|
|
36
|
+
|
|
37
|
+
[PENDING: ¿Qué sensación deja el lugar y cómo afecta a la escena que ocurre en él?]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
open_questions: []
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Índice de investigación
|
|
6
|
+
|
|
7
|
+
<!--
|
|
8
|
+
Guía: molde del índice de investigación, resoluble por capas (un override del
|
|
9
|
+
proyecto bajo `.bookwright/templates/` tiene prioridad sobre este core). Conserva
|
|
10
|
+
la clave `open_questions:` y añade temas en la lista de abajo. El cuerpo en prosa
|
|
11
|
+
no se indexa; el contrato exacto está en `references/research-format.md`.
|
|
12
|
+
-->
|
|
13
|
+
|
|
14
|
+
## Temas
|
|
15
|
+
|
|
16
|
+
<!-- Guía: una entrada por tema investigado, enlazando a su `<slug>.md`. -->
|
|
17
|
+
|
|
18
|
+
[PENDING: ¿Qué tema vas a enlazar? p. ej. `- [Título del tema](slug-del-tema.md)`]
|
|
19
|
+
|
|
20
|
+
## Preguntas abiertas
|
|
21
|
+
|
|
22
|
+
<!-- Guía: pasa cada pregunta a `open_questions:` con un `id` cuando quieras
|
|
23
|
+
rastrearla en el grafo. -->
|
|
24
|
+
|
|
25
|
+
[PENDING: ¿Qué pregunta global del proyecto queda abierta?]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
sources: []
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Registro de fuentes
|
|
6
|
+
|
|
7
|
+
<!--
|
|
8
|
+
Guía: molde del registro de fuentes, resoluble por capas (un override del
|
|
9
|
+
proyecto bajo `.bookwright/templates/` tiene prioridad sobre este core). Cada
|
|
10
|
+
elemento de `sources:` necesita procedencia completa — `name`, `reference`,
|
|
11
|
+
`author`, `original_language`, `type` (primaria | secundaria | oficial |
|
|
12
|
+
académica | periodística | testimonial), `reliability` (alta | media | baja),
|
|
13
|
+
`reliability_justification`, `access_date`, `original_quote` y `translation`
|
|
14
|
+
cuando la lengua difiera de la del libro. Ver `references/research-format.md`.
|
|
15
|
+
-->
|
|
16
|
+
|
|
17
|
+
## Notas
|
|
18
|
+
|
|
19
|
+
<!-- Guía: prosa de trabajo; no se indexa. La fuente real vive en `sources:`. -->
|
|
20
|
+
|
|
21
|
+
[PENDING: ¿Qué fuente vas a registrar y con qué justificación de fiabilidad?]
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
findings: []
|
|
3
|
+
anchors: []
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Tema de investigación
|
|
7
|
+
|
|
8
|
+
<!--
|
|
9
|
+
Guía: molde de un tema de investigación, resoluble por capas (un override del
|
|
10
|
+
proyecto bajo `.bookwright/templates/` tiene prioridad sobre este core).
|
|
11
|
+
`findings:` lista los hallazgos (cada uno con `id`, `claim` y `sources`, salvo
|
|
12
|
+
los abiertos con `open: true`). `anchors:` promueve hallazgos a anclas
|
|
13
|
+
vinculantes (`promotes` + `constrains`). Sustituye el encabezado de arriba por el
|
|
14
|
+
título humano del tema; el archivo se nombra con su *slug*. Contrato exacto en
|
|
15
|
+
`references/research-format.md`.
|
|
16
|
+
-->
|
|
17
|
+
|
|
18
|
+
## Hallazgos
|
|
19
|
+
|
|
20
|
+
<!-- Guía: un hallazgo por afirmación. Cuando las fuentes discrepen, escribe un
|
|
21
|
+
hallazgo por versión, cada uno con su propia fuente; nunca los fundas. -->
|
|
22
|
+
|
|
23
|
+
[PENDING: ¿Qué afirmaste, con qué fuente y sobre qué entidad narrativa recae?]
|
|
24
|
+
|
|
25
|
+
## Anclas
|
|
26
|
+
|
|
27
|
+
<!-- Guía: marca como ancla solo el hallazgo cuya mejor fuente alcance
|
|
28
|
+
`[research].min_reliability_for_anchor`. -->
|
|
29
|
+
|
|
30
|
+
[PENDING: ¿Qué hallazgo restringe a qué entidad (personaje, escenario, evento o `timeline`)?]
|
|
31
|
+
|
|
32
|
+
## Preguntas abiertas
|
|
33
|
+
|
|
34
|
+
<!-- Guía: deja aquí, o como `open_questions` en el índice, lo que siga sin
|
|
35
|
+
fuente fiable; no lo rellenes con afirmaciones inventadas. -->
|
|
36
|
+
|
|
37
|
+
[PENDING: ¿Qué sub-pregunta de este tema queda abierta?]
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "[PENDING: ¿Cómo se llama el escenario?]"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Ficha de escenario
|
|
6
|
+
|
|
7
|
+
<!--
|
|
8
|
+
Guía para el agente y el autor: esta ficha se indexa como un `Setting` del
|
|
9
|
+
modelo GOLEM, el universo narrativo amplio (una región, una era, una cultura),
|
|
10
|
+
no un lugar concreto y sensorial (para eso está la plantilla de "lugar").
|
|
11
|
+
|
|
12
|
+
El frontmatter admite **únicamente** la clave `name`: cualquier otra clave de
|
|
13
|
+
nivel superior genera un aviso del indexador. `name` es una cadena obligatoria;
|
|
14
|
+
el prompt `[PENDING: …]` es legal sólo entre comillas. Ejemplo ya rellenado:
|
|
15
|
+
|
|
16
|
+
name: "Las Ciudades-Puente del Vel"
|
|
17
|
+
-->
|
|
18
|
+
|
|
19
|
+
## Cultura
|
|
20
|
+
|
|
21
|
+
<!-- Guía: valores, costumbres, lenguas, estructuras de poder que tiñen la vida
|
|
22
|
+
cotidiana de este universo. -->
|
|
23
|
+
|
|
24
|
+
[PENDING: ¿Qué cultura(s) habitan este escenario y qué las define?]
|
|
25
|
+
|
|
26
|
+
## Sistema / era
|
|
27
|
+
|
|
28
|
+
<!-- Guía: el marco tecnológico, mágico o histórico, y el momento temporal en
|
|
29
|
+
que transcurre la obra dentro de este universo. -->
|
|
30
|
+
|
|
31
|
+
[PENDING: ¿En qué época y bajo qué sistema (tecnológico, mágico, social) ocurre?]
|
|
32
|
+
|
|
33
|
+
## Geografía amplia
|
|
34
|
+
|
|
35
|
+
<!-- Guía: la forma del mundo a gran escala: regiones, fronteras, rutas; los
|
|
36
|
+
lugares concretos se detallan en fichas de lugar aparte. -->
|
|
37
|
+
|
|
38
|
+
[PENDING: ¿Cómo es la geografía general y qué regiones importan a la trama?]
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Bookwright project manifest.
|
|
2
|
+
#
|
|
3
|
+
# This file is the source of truth for a Bookwright project: it declares the
|
|
4
|
+
# CLI floor, the schema generation stamp, the project's URI namespace, and the
|
|
5
|
+
# author-facing book metadata. Every other Bookwright command reads from here.
|
|
6
|
+
#
|
|
7
|
+
# Generated by `Manifest.build(...)`. The toolkit preserves comments and key
|
|
8
|
+
# order on every round-trip; edit values freely.
|
|
9
|
+
|
|
10
|
+
[bookwright]
|
|
11
|
+
# Minimum Bookwright CLI version required to operate on this project (PEP 440).
|
|
12
|
+
cli_version_min = "0.0.0"
|
|
13
|
+
# GOLEM ontology schema stamp.
|
|
14
|
+
schema_version = "golem-1.1"
|
|
15
|
+
# Manifest format version (positive integer string).
|
|
16
|
+
manifest_version = "1"
|
|
17
|
+
# Absolute http(s) URI used as the @prefix for the project's Turtle graph.
|
|
18
|
+
# Must end with `/`.
|
|
19
|
+
uri_base = "https://example.org/project/"
|
|
20
|
+
# Graph indexer backend.
|
|
21
|
+
indexer = "rdflib"
|
|
22
|
+
|
|
23
|
+
[book]
|
|
24
|
+
# Required: human-readable title.
|
|
25
|
+
title = "Untitled"
|
|
26
|
+
# Required: one of novel | essay | memoir | non-fiction-narrative | other.
|
|
27
|
+
type = "novel"
|
|
28
|
+
# Required: ISO 639-1 alpha-2 code (lowercase).
|
|
29
|
+
language = "en"
|
|
30
|
+
# Required: at least one author. Duplicates are allowed (co-authorship).
|
|
31
|
+
authors = ["Anonymous"]
|
|
32
|
+
# Optional free-form fields below.
|
|
33
|
+
subtitle = ""
|
|
34
|
+
genre = []
|
|
35
|
+
# Optional `target_length_words` (positive integer) is omitted by default.
|
|
36
|
+
# The builder will insert it when an override is supplied.
|
|
37
|
+
status = "drafting"
|
|
38
|
+
|
|
39
|
+
[book.metadata]
|
|
40
|
+
# Free-form metadata preserved verbatim by the manifest loader.
|
|
41
|
+
|
|
42
|
+
[vocabularies]
|
|
43
|
+
# List of vocabulary names (resolved later against .bookwright/vocabularies/).
|
|
44
|
+
active = []
|
|
45
|
+
|
|
46
|
+
[validators]
|
|
47
|
+
# Built-in validators to enable/disable plus the names of custom validators.
|
|
48
|
+
enabled = []
|
|
49
|
+
disabled = []
|
|
50
|
+
custom = []
|
|
51
|
+
|
|
52
|
+
[integration]
|
|
53
|
+
# Recorded integration metadata. The manifest loader treats this block as data
|
|
54
|
+
# only; agent dispatch happens in a downstream registry.
|
|
55
|
+
key = "claude"
|
|
56
|
+
skills_dir = ".claude/skills"
|
|
57
|
+
|
|
58
|
+
[integration.options]
|
|
59
|
+
# Free-form options preserved verbatim.
|
|
60
|
+
|
|
61
|
+
[paths]
|
|
62
|
+
# Project-relative content roots. No filesystem check at load time.
|
|
63
|
+
manuscript = "manuscript/"
|
|
64
|
+
bible = "bible/"
|
|
65
|
+
outline = "outline/"
|
|
66
|
+
graph = "bible/graph.ttl"
|
|
67
|
+
constitution = "bible/constitution.md"
|
|
68
|
+
|
|
69
|
+
[research]
|
|
70
|
+
# Whether the research system is active. When false, the bookwright-research
|
|
71
|
+
# skill reports the system inert and produces no graph-bound findings.
|
|
72
|
+
enabled = true
|
|
73
|
+
# Source provenances (ISO 639-1 codes) the protocol should deliberately seek for
|
|
74
|
+
# nationally-charged topics, e.g. ["de", "pl", "en", "fr"]. Empty = no declared
|
|
75
|
+
# preference; the original-language rule still applies.
|
|
76
|
+
source_languages = []
|
|
77
|
+
# Minimum source reliability required before a finding may become a binding
|
|
78
|
+
# anchor: one of "alta" | "media" | "baja".
|
|
79
|
+
min_reliability_for_anchor = "media"
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Capítulo: [PENDING: ¿Qué título lleva el capítulo?]
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
Guía para el agente y el autor: esta plantilla estructura el borrador de un
|
|
5
|
+
capítulo. No lleva frontmatter ingerido por el indexador: es texto de
|
|
6
|
+
manuscrito. Usa el encabezado para fijar el propósito del capítulo antes de
|
|
7
|
+
redactar, y separa las escenas con una línea de regla (`---`) o un salto claro.
|
|
8
|
+
Ejemplo de propósito: "Cap. 3 — Ana descubre la deuda de Marco; termina con la
|
|
9
|
+
decisión de ocultárselo a su madre." -->
|
|
10
|
+
|
|
11
|
+
## Propósito del capítulo
|
|
12
|
+
|
|
13
|
+
<!-- Guía: una o dos frases con la función dramática del capítulo y el cambio de
|
|
14
|
+
estado que debe producir. -->
|
|
15
|
+
|
|
16
|
+
[PENDING: ¿Qué hace avanzar este capítulo y cómo deja al lector distinto al empezarlo?]
|
|
17
|
+
|
|
18
|
+
## POV y momento
|
|
19
|
+
|
|
20
|
+
<!-- Guía: desde qué personaje se narra (si la obra es multi-POV) y cuándo
|
|
21
|
+
ocurre respecto a la línea de tiempo. -->
|
|
22
|
+
|
|
23
|
+
[PENDING: ¿Quién narra y en qué punto de la historia transcurre?]
|
|
24
|
+
|
|
25
|
+
## Escenas
|
|
26
|
+
|
|
27
|
+
<!-- Guía: lista las escenas del capítulo en orden; desarrolla cada una en su
|
|
28
|
+
propia ficha de escena y enlázalas o transcríbelas aquí al redactar. -->
|
|
29
|
+
|
|
30
|
+
[PENDING: ¿En qué escenas se divide el capítulo?]
|
|
31
|
+
|
|
32
|
+
## Borrador
|
|
33
|
+
|
|
34
|
+
<!-- Guía: el texto del capítulo. Empieza a escribir aquí. -->
|
|
35
|
+
|
|
36
|
+
[PENDING: Redacta el capítulo a partir de las decisiones anteriores.]
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Escena: [PENDING: ¿Qué identificador y título lleva la escena?]
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
Guía para el agente y el autor: esta plantilla estructura el borrador de una
|
|
5
|
+
escena, la unidad mínima de la redacción. No lleva frontmatter ingerido por el
|
|
6
|
+
indexador. Toda escena debe cambiar algo: define objetivo, conflicto y cambio de
|
|
7
|
+
estado antes de escribir. Ejemplo:
|
|
8
|
+
|
|
9
|
+
- Objetivo del POV: conseguir el salvoconducto.
|
|
10
|
+
- Conflicto: el vendedor la reconoce y sube el precio.
|
|
11
|
+
- Cambio de estado: de anónima a buscada.
|
|
12
|
+
-->
|
|
13
|
+
|
|
14
|
+
## Encuadre
|
|
15
|
+
|
|
16
|
+
<!-- Guía: lugar, momento y quién está presente al abrir la escena. -->
|
|
17
|
+
|
|
18
|
+
[PENDING: ¿Dónde, cuándo y con quién arranca la escena?]
|
|
19
|
+
|
|
20
|
+
## Objetivo del POV
|
|
21
|
+
|
|
22
|
+
[PENDING: ¿Qué quiere conseguir el personaje de punto de vista aquí?]
|
|
23
|
+
|
|
24
|
+
## Conflicto
|
|
25
|
+
|
|
26
|
+
[PENDING: ¿Qué o quién se interpone?]
|
|
27
|
+
|
|
28
|
+
## Cambio de estado
|
|
29
|
+
|
|
30
|
+
<!-- Guía: el "antes → después" que justifica la existencia de la escena; si
|
|
31
|
+
nada cambia, la escena sobra. -->
|
|
32
|
+
|
|
33
|
+
[PENDING: ¿Cómo queda la situación al cerrar la escena, distinta de como empezó?]
|
|
34
|
+
|
|
35
|
+
## Borrador
|
|
36
|
+
|
|
37
|
+
[PENDING: Redacta la escena a partir de las decisiones anteriores.]
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
@prefix bw: <https://bookwright.dev/vocab/bw#> .
|
|
2
|
+
@prefix crm: <http://www.cidoc-crm.org/cidoc-crm/> .
|
|
3
|
+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
|
4
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
5
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
6
|
+
|
|
7
|
+
# Bookwright's own research/provenance vocabulary (iteration 012). These terms are
|
|
8
|
+
# Bookwright's, NOT part of the frozen GOLEM ontology (`golem.ttl`): they are
|
|
9
|
+
# intentionally outside the `CLASS_IRI` 17-class closure (Constitution X). The
|
|
10
|
+
# emitted `bible/graph.ttl` reuses only `crm:E13_Attribute_Assignment` and
|
|
11
|
+
# `crm:E55_Type` for typing; no new GOLEM/ontology class is introduced (FR-001).
|
|
12
|
+
# This file is the human-readable declaration the emitted triples conform to;
|
|
13
|
+
# enforcement lives in the `Source` Pydantic `Literal`s (research D4).
|
|
14
|
+
|
|
15
|
+
# --- Source-type controlled vocabulary (six E55_Type individuals, FR-003) ----
|
|
16
|
+
|
|
17
|
+
<https://bookwright.dev/vocab/bw#source-type/primaria>
|
|
18
|
+
a crm:E55_Type ; rdfs:label "primaria"@es .
|
|
19
|
+
<https://bookwright.dev/vocab/bw#source-type/secundaria>
|
|
20
|
+
a crm:E55_Type ; rdfs:label "secundaria"@es .
|
|
21
|
+
<https://bookwright.dev/vocab/bw#source-type/oficial>
|
|
22
|
+
a crm:E55_Type ; rdfs:label "oficial"@es .
|
|
23
|
+
<https://bookwright.dev/vocab/bw#source-type/academica>
|
|
24
|
+
a crm:E55_Type ; rdfs:label "académica"@es .
|
|
25
|
+
<https://bookwright.dev/vocab/bw#source-type/periodistica>
|
|
26
|
+
a crm:E55_Type ; rdfs:label "periodística"@es .
|
|
27
|
+
<https://bookwright.dev/vocab/bw#source-type/testimonial>
|
|
28
|
+
a crm:E55_Type ; rdfs:label "testimonial"@es .
|
|
29
|
+
|
|
30
|
+
# --- Reliability controlled vocabulary (three E55_Type individuals, FR-004) --
|
|
31
|
+
|
|
32
|
+
<https://bookwright.dev/vocab/bw#reliability/alta>
|
|
33
|
+
a crm:E55_Type ; rdfs:label "alta"@es .
|
|
34
|
+
<https://bookwright.dev/vocab/bw#reliability/media>
|
|
35
|
+
a crm:E55_Type ; rdfs:label "media"@es .
|
|
36
|
+
<https://bookwright.dev/vocab/bw#reliability/baja>
|
|
37
|
+
a crm:E55_Type ; rdfs:label "baja"@es .
|
|
38
|
+
|
|
39
|
+
# --- bw: property declarations (contracts/provenance-graph.md) ----------------
|
|
40
|
+
|
|
41
|
+
bw:reference a rdf:Property ;
|
|
42
|
+
rdfs:label "reference"@en ;
|
|
43
|
+
rdfs:comment "Bibliographic reference or URL of a source."@en .
|
|
44
|
+
bw:author a rdf:Property ;
|
|
45
|
+
rdfs:label "author"@en ;
|
|
46
|
+
rdfs:comment "Author or issuing body of a source."@en .
|
|
47
|
+
bw:originalLanguage a rdf:Property ;
|
|
48
|
+
rdfs:label "originalLanguage"@en ;
|
|
49
|
+
rdfs:comment "ISO 639-1 code of a source's original language."@en .
|
|
50
|
+
bw:reliability a rdf:Property ;
|
|
51
|
+
rdfs:label "reliability"@en ;
|
|
52
|
+
rdfs:comment "A source's reliability E55_Type individual (alta/media/baja)."@en .
|
|
53
|
+
bw:reliabilityJustification a rdf:Property ;
|
|
54
|
+
rdfs:label "reliabilityJustification"@en ;
|
|
55
|
+
rdfs:comment "Prose justifying a source's reliability rating."@en .
|
|
56
|
+
bw:accessDate a rdf:Property ;
|
|
57
|
+
rdfs:label "accessDate"@en ;
|
|
58
|
+
rdfs:comment "The date a source was consulted (xsd:date)."@en .
|
|
59
|
+
bw:originalQuote a rdf:Property ;
|
|
60
|
+
rdfs:label "originalQuote"@en ;
|
|
61
|
+
rdfs:comment "Verbatim quote in the source's original language."@en .
|
|
62
|
+
bw:translation a rdf:Property ;
|
|
63
|
+
rdfs:label "translation"@en ;
|
|
64
|
+
rdfs:comment "Translation of the quote; present iff source language differs from the book's."@en .
|
|
65
|
+
bw:claim a rdf:Property ;
|
|
66
|
+
rdfs:label "claim"@en ;
|
|
67
|
+
rdfs:comment "The real-world assertion a finding records."@en .
|
|
68
|
+
bw:assertedBy a rdf:Property ;
|
|
69
|
+
rdfs:label "assertedBy"@en ;
|
|
70
|
+
rdfs:comment "Who asserts a finding's claim (agent or author)."@en .
|
|
71
|
+
bw:supportedBy a rdf:Property ;
|
|
72
|
+
rdfs:label "supportedBy"@en ;
|
|
73
|
+
rdfs:comment "A source supporting a finding (one per source)."@en .
|
|
74
|
+
bw:open a rdf:Property ;
|
|
75
|
+
rdfs:label "open"@en ;
|
|
76
|
+
rdfs:comment "True when a finding is an unresolved open question (xsd:boolean)."@en .
|
|
77
|
+
bw:promotes a rdf:Property ;
|
|
78
|
+
rdfs:label "promotes"@en ;
|
|
79
|
+
rdfs:comment "The finding an anchor promotes into a binding constraint."@en .
|
|
80
|
+
bw:constrains a rdf:Property ;
|
|
81
|
+
rdfs:label "constrains"@en ;
|
|
82
|
+
rdfs:comment "The narrative entity (or timeline) an anchor constrains."@en .
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Validation subsystem: deterministic coherence checks + the ``validate`` command.
|
|
2
|
+
|
|
3
|
+
The public surface a custom validator imports (``Severity``, ``Violation``) and the
|
|
4
|
+
engine seam the command wires together (discovery, the runner, the report).
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from bookwright.validation.base import (
|
|
10
|
+
Severity,
|
|
11
|
+
UnknownValidatorError,
|
|
12
|
+
ValidationContext,
|
|
13
|
+
Validator,
|
|
14
|
+
ValidatorError,
|
|
15
|
+
Violation,
|
|
16
|
+
)
|
|
17
|
+
from bookwright.validation.registry import discover_validators, resolve_active
|
|
18
|
+
from bookwright.validation.report import ScopeFilter, ValidationReport
|
|
19
|
+
from bookwright.validation.runner import run_validators
|
|
20
|
+
|
|
21
|
+
__all__ = [
|
|
22
|
+
"ScopeFilter",
|
|
23
|
+
"Severity",
|
|
24
|
+
"UnknownValidatorError",
|
|
25
|
+
"ValidationContext",
|
|
26
|
+
"ValidationReport",
|
|
27
|
+
"Validator",
|
|
28
|
+
"ValidatorError",
|
|
29
|
+
"Violation",
|
|
30
|
+
"discover_validators",
|
|
31
|
+
"resolve_active",
|
|
32
|
+
"run_validators",
|
|
33
|
+
]
|