trustgraph-cli 2.5.0__tar.gz → 2.5.3__tar.gz
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.
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/PKG-INFO +1 -1
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/pyproject.toml +3 -0
- trustgraph_cli-2.5.3/trustgraph/cli/load_sample_documents.py +128 -0
- trustgraph_cli-2.5.3/trustgraph/cli/sample_documents/__init__.py +0 -0
- trustgraph_cli-2.5.3/trustgraph/cli/sample_documents/belgian-beer.md +53 -0
- trustgraph_cli-2.5.3/trustgraph/cli/sample_documents/bronze-age-collapse.pdf +0 -0
- trustgraph_cli-2.5.3/trustgraph/cli/sample_documents/corporate-scandals.pdf +0 -0
- trustgraph_cli-2.5.3/trustgraph/cli/sample_documents/history-of-pets.md +13 -0
- trustgraph_cli-2.5.3/trustgraph/cli/sample_documents/metadata.json +527 -0
- trustgraph_cli-2.5.3/trustgraph/cli/sample_documents/mil-fortifications-america-19th-c.md +11 -0
- trustgraph_cli-2.5.3/trustgraph/cli/sample_documents/recipes.md +70 -0
- trustgraph_cli-2.5.3/trustgraph/cli/sample_documents/trade-routes-europe.md +63 -0
- trustgraph_cli-2.5.3/trustgraph/cli_version.py +1 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph_cli.egg-info/PKG-INFO +1 -1
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph_cli.egg-info/SOURCES.txt +9 -0
- trustgraph_cli-2.5.0/trustgraph/cli/load_sample_documents.py +0 -746
- trustgraph_cli-2.5.0/trustgraph/cli_version.py +0 -1
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/README.md +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/setup.cfg +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/__init__.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/_iam.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/add_library_document.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/bootstrap_iam.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/change_password.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/create_api_key.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/create_user.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/create_workspace.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/delete_collection.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/delete_config_item.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/delete_flow_blueprint.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/delete_kg_core.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/delete_mcp_tool.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/delete_tool.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/delete_user.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/disable_user.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/dump_msgpack.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/dump_queues.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/enable_user.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/export_workspace_config.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/get_config_item.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/get_de_core.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/get_document_content.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/get_flow_blueprint.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/get_kg_core.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/graph_to_turtle.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/import_workspace_config.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/init_pulsar_manager.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_agent.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_document_embeddings.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_document_rag.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_embeddings.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_graph_embeddings.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_graph_rag.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_llm.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_mcp_tool.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_nlp_query.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_prompt.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_row_embeddings.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_rows_query.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_sparql_query.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/invoke_structured_query.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/list_api_keys.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/list_collections.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/list_config_items.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/list_explain_traces.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/list_users.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/list_workspaces.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/load_doc_embeds.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/load_kg_core.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/load_knowledge.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/load_structured_data.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/load_turtle.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/login.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/monitor_prompts.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/put_config_item.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/put_de_core.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/put_flow_blueprint.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/put_kg_core.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/query_graph.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/remove_library_document.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/reset_password.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/revoke_api_key.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/save_doc_embeds.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/set_collection.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/set_mcp_tool.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/set_prompt.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/set_token_costs.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/set_tool.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_config.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_explain_trace.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_extraction_provenance.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_flow_blueprints.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_flow_state.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_flows.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_graph.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_kg_cores.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_library_documents.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_library_processing.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_mcp_tools.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_parameter_types.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_processor_state.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_prompts.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_token_costs.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_token_rate.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/show_tools.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/start_flow.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/start_library_processing.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/stop_flow.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/stop_library_processing.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/unload_kg_core.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/update_user.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/verify_system_status.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph/cli/whoami.py +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph_cli.egg-info/dependency_links.txt +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph_cli.egg-info/entry_points.txt +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph_cli.egg-info/requires.txt +0 -0
- {trustgraph_cli-2.5.0 → trustgraph_cli-2.5.3}/trustgraph_cli.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: trustgraph-cli
|
|
3
|
-
Version: 2.5.
|
|
3
|
+
Version: 2.5.3
|
|
4
4
|
Summary: TrustGraph provides a means to run a pipeline of flexible AI processing components in a flexible means to achieve a processing pipeline.
|
|
5
5
|
Author-email: "trustgraph.ai" <security@trustgraph.ai>
|
|
6
6
|
Project-URL: Homepage, https://github.com/trustgraph-ai/trustgraph
|
|
@@ -121,6 +121,9 @@ tg-show-extraction-provenance = "trustgraph.cli.show_extraction_provenance:main"
|
|
|
121
121
|
tg-list-explain-traces = "trustgraph.cli.list_explain_traces:main"
|
|
122
122
|
tg-show-explain-trace = "trustgraph.cli.show_explain_trace:main"
|
|
123
123
|
|
|
124
|
+
[tool.setuptools.package-data]
|
|
125
|
+
"trustgraph.cli.sample_documents" = ["*.md", "*.pdf", "*.json"]
|
|
126
|
+
|
|
124
127
|
[tool.setuptools.packages.find]
|
|
125
128
|
include = ["trustgraph*"]
|
|
126
129
|
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Loads sample documents into the TrustGraph library from bundled package data.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import argparse
|
|
6
|
+
import json
|
|
7
|
+
import os
|
|
8
|
+
from importlib import resources
|
|
9
|
+
|
|
10
|
+
from trustgraph.api import Api
|
|
11
|
+
from trustgraph.api.types import Uri, Literal, Triple
|
|
12
|
+
|
|
13
|
+
default_url = os.getenv("TRUSTGRAPH_URL", 'http://localhost:8088/')
|
|
14
|
+
default_token = os.getenv("TRUSTGRAPH_TOKEN", None)
|
|
15
|
+
default_workspace = os.getenv("TRUSTGRAPH_WORKSPACE", "default")
|
|
16
|
+
|
|
17
|
+
SAMPLE_DOCS_PACKAGE = "trustgraph.cli.sample_documents"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def get_data_path():
|
|
21
|
+
return resources.files(SAMPLE_DOCS_PACKAGE)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def load_metadata():
|
|
25
|
+
data_path = get_data_path()
|
|
26
|
+
metadata_file = data_path / "metadata.json"
|
|
27
|
+
return json.loads(metadata_file.read_text(encoding="utf-8"))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def convert_value(v):
|
|
31
|
+
if v["type"] == "uri":
|
|
32
|
+
return Uri(v["value"])
|
|
33
|
+
else:
|
|
34
|
+
return Literal(v["value"])
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def convert_metadata(metadata_json):
|
|
38
|
+
triples = []
|
|
39
|
+
for t in metadata_json:
|
|
40
|
+
triples.append(Triple(
|
|
41
|
+
s=convert_value(t["s"]),
|
|
42
|
+
p=convert_value(t["p"]),
|
|
43
|
+
o=convert_value(t["o"]),
|
|
44
|
+
))
|
|
45
|
+
return triples
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def load_document(api, doc_entry, data_path):
|
|
49
|
+
|
|
50
|
+
doc_id = doc_entry["id"]
|
|
51
|
+
title = doc_entry["title"]
|
|
52
|
+
filename = doc_entry["file"]
|
|
53
|
+
|
|
54
|
+
print(f" [{filename}] {title}")
|
|
55
|
+
|
|
56
|
+
print(f" reading content...")
|
|
57
|
+
content_file = data_path / filename
|
|
58
|
+
content = content_file.read_bytes()
|
|
59
|
+
|
|
60
|
+
print(f" loading into TrustGraph ({len(content) // 1024}KB)...")
|
|
61
|
+
metadata = convert_metadata(doc_entry["metadata"])
|
|
62
|
+
|
|
63
|
+
api.add_document(
|
|
64
|
+
id=doc_id,
|
|
65
|
+
metadata=metadata,
|
|
66
|
+
kind=doc_entry["kind"],
|
|
67
|
+
title=title,
|
|
68
|
+
comments=doc_entry["comments"],
|
|
69
|
+
tags=doc_entry["tags"],
|
|
70
|
+
document=content,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
print(f" done.")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def main():
|
|
77
|
+
|
|
78
|
+
parser = argparse.ArgumentParser(
|
|
79
|
+
prog='tg-load-sample-documents',
|
|
80
|
+
description=__doc__,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
parser.add_argument(
|
|
84
|
+
'-u', '--url',
|
|
85
|
+
default=default_url,
|
|
86
|
+
help=f'API URL (default: {default_url})',
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
parser.add_argument(
|
|
90
|
+
'-t', '--token',
|
|
91
|
+
default=default_token,
|
|
92
|
+
help='Authentication token (default: $TRUSTGRAPH_TOKEN)',
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
parser.add_argument(
|
|
96
|
+
'-w', '--workspace',
|
|
97
|
+
default=default_workspace,
|
|
98
|
+
help=f'Workspace (default: {default_workspace})',
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
args = parser.parse_args()
|
|
102
|
+
|
|
103
|
+
try:
|
|
104
|
+
|
|
105
|
+
api = Api(args.url, token=args.token, workspace=args.workspace)
|
|
106
|
+
library = api.library()
|
|
107
|
+
|
|
108
|
+
data_path = get_data_path()
|
|
109
|
+
documents = load_metadata()
|
|
110
|
+
|
|
111
|
+
print(f"Loading {len(documents)} sample document(s)...\n")
|
|
112
|
+
|
|
113
|
+
for doc in documents:
|
|
114
|
+
try:
|
|
115
|
+
load_document(library, doc, data_path)
|
|
116
|
+
except Exception as e:
|
|
117
|
+
print(f" FAILED: {e}")
|
|
118
|
+
print()
|
|
119
|
+
|
|
120
|
+
print("Complete.")
|
|
121
|
+
|
|
122
|
+
except Exception as e:
|
|
123
|
+
print(f"Exception: {e}")
|
|
124
|
+
raise e
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
if __name__ == "__main__":
|
|
128
|
+
main()
|
|
File without changes
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# The Brewing Traditions of Belgium
|
|
2
|
+
|
|
3
|
+
## Section 1: The Fermentation Foundations (Yeasts & Styles)
|
|
4
|
+
|
|
5
|
+
### Component A: The Ardennes Isolation Strain
|
|
6
|
+
|
|
7
|
+
- **Alternative Names:** Strain-71, The Trappist Yeast, Wallonian Culture.
|
|
8
|
+
- **Origin:** Historically isolated in the rugged forests of the Ardennes region, shared via mutual trade agreements between various monastic brewing sites.
|
|
9
|
+
- **Characteristics:** A high-attenuation, top-fermenting yeast culture (*Saccharomyces cerevisiae*) that thrives at elevated temperatures (20°C to 26°C). It produces heavy volatile esters reminiscent of clove, banana, and white pepper.
|
|
10
|
+
- **Downstream Dependencies:** Essential biological engine required to brew The Westvleteren Quad and The Chimay Grand Réserve.
|
|
11
|
+
|
|
12
|
+
### Component B: Brettanomyces Bruxellensis
|
|
13
|
+
|
|
14
|
+
- **Alternative Names:** Wild Yeast, The Brussels Funk, Pajottenland Air.
|
|
15
|
+
- **Origin:** Indigenous entirely to the Senne River Valley and the surrounding Pajottenland region southwest of Brussels. It cannot be cultured in a standard laboratory setting for primary fermentation; it must be caught ambiently from the atmosphere.
|
|
16
|
+
- **Characteristics:** A slow-acting, wild yeast strain that consumes complex sugars that standard yeasts cannot digest. It introduces lactic acid and earthy, "barnyard" aroma characteristics over a 1 to 3-year aging cycle.
|
|
17
|
+
- **Downstream Dependencies:** Biological prerequisite for Oude Geuze and The Flemish Red Ale.
|
|
18
|
+
|
|
19
|
+
## Section 2: Monastic & Trappist Hierarchies (Appellation Controlled)
|
|
20
|
+
|
|
21
|
+
### Beer 1: The Westvleteren Quad
|
|
22
|
+
|
|
23
|
+
- **Alternative Names:** Westvleteren 12, The Yellow Cap.
|
|
24
|
+
- **Origin:** Brewed exclusively inside the walls of the Abbey of Saint-Sixtus in Westvleteren, Flanders. Holds the strict "Authentic Trappist Product" (ATP) legal designation.
|
|
25
|
+
- **Ingredients:** The Ardennes Isolation Strain, local soft water, pale malt, dark liquid candi sugar (sucrose solution), and Northern Brewer hops.
|
|
26
|
+
- **Process:** Primary fermentation utilizing the Ardennes strain for 7 days. Afterward, dark candi sugar is injected into the green beer to trigger a secondary fermentation stage. Crucially, the beer is bottled completely unfiltered with active yeast cells, requiring a mandatory 3-month cellar conditioning period to carbonate inside the bottle.
|
|
27
|
+
|
|
28
|
+
### Beer 2: The Chimay Grand Réserve
|
|
29
|
+
|
|
30
|
+
- **Alternative Names:** Chimay Blue, The Grande Réserve.
|
|
31
|
+
- **Origin:** Brewed inside the Scourmont Abbey in Hainaut, Wallonia. Also carries the ATP designation.
|
|
32
|
+
- **Ingredients:** The Ardennes Isolation Strain, estate-drawn well water, malted barley, Hallertau Mittelfrüh hops, and caramelized sugar.
|
|
33
|
+
- **Process:** Follows a parallel fermentation profile to the Westvleteren Quad, using the exact same ancestral yeast strain but utilizing a different mineral profile in the water, resulting in a drier, more dark-fruit-forward profile.
|
|
34
|
+
|
|
35
|
+
## Section 3: Spontaneous & Sour Traditions (Wild Ecosystems)
|
|
36
|
+
|
|
37
|
+
### Beer 3: Oude Geuze
|
|
38
|
+
|
|
39
|
+
- **Alternative Names:** The Champagne of Belgium, Brussels Lambic.
|
|
40
|
+
- **Origin:** The Pajottenland region. It is legally protected; it cannot be called "Oude Geuze" unless it is spontaneously fermented by the regional air.
|
|
41
|
+
- **Ingredients:** Unmalted wheat (30%), Pale barley malt (70%), aged "suranné" hops (which lose their bitterness but retain preservative qualities), and ambient Brettanomyces Bruxellensis.
|
|
42
|
+
- **Process:** Boiling wort is pumped into an open-air shallow vessel called a "coolship" overnight to cool down, absorbing wild microbes from the Senne Valley breeze.
|
|
43
|
+
|
|
44
|
+
**The Blending Protocol Dispute (Critical Logic Test):**
|
|
45
|
+
|
|
46
|
+
- **The Traditionalist Assembly:** A true Oude Geuze is a blend of 1-year-old young lambic (which provides active sugars) and 3-year-old vintage lambic (which provides complex sourness).
|
|
47
|
+
- **The Industrial Controversy:** Some macro-breweries pasteurize the blend and inject artificial sweeteners (aspartame) to neutralize the sourness for commercial appeal. Traditionalists argue this strips the product of its geographic identity and violates the "Oude" (Old) designation.
|
|
48
|
+
|
|
49
|
+
### Beer 4: The Flemish Red Ale
|
|
50
|
+
|
|
51
|
+
- **Alternative Names:** Rodenbach style, West-Flemish Sour.
|
|
52
|
+
- **Origin:** Roeselare, West Flanders.
|
|
53
|
+
- **Ingredients:** Red-kilned malts, aged hops, standard top-fermenting yeast, and a secondary inoculation of Brettanomyces Bruxellensis.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# The Domestic Canopy: A Unified Narrative of Companionship
|
|
2
|
+
|
|
3
|
+
The story of the human-animal bond begins not with a conscious decision to breed a companion, but with an ancient, mutual opportunism in the frozen wastes of the late Pleistocene. Long before the advent of agriculture, the gray wolf (*Canis lupus*) began to separate from its wild packs, drawn to the peripheral campfires of Eurasian hunter-gatherers. These ancestral canids, which would morph over millennia into the domesticated dog (*Canis lupus familiaris*), offered early humans an unparalleled early-warning system against apex predators and an invaluable partner in the persistence hunt. In return, humans provided a steady supply of megafauna marrow, cooked gristle, and proximity to warmth. This biological pact was so profound that it transcended mere utility, as evidenced by the late Paleolithic Natufian burial sites in the Levant, where human skeletons were interred with their hands resting gently upon the ribcages of wolf pups, marking the earliest archaeological signature of the transition from working tool to sentimental proxy.
|
|
4
|
+
|
|
5
|
+
As the ice sheets retreated and humanity anchored itself to the soil during the Neolithic Revolution, the nature of animal companionship shifted dramatically, giving rise to an entirely different ecological dynamic in the Fertile Crescent. The rise of grain storehouses in ancient Egypt attracted unprecedented swarms of rodents, creating a pristine ecological niche for the North African wildcat (*Felis lybica*). Unlike the highly structured social hierarchy of the wolf, the cat domesticated itself on terms of aloof independence, transitioning from a tolerated pest-control mechanism to a revered icon of divine protection. By the time of the Egyptian Middle Kingdom, cats were so thoroughly integrated into the domestic fabric that they were granted formal mourning rites; Roman historians like Herodotus noted that when a house cat died of natural causes, the entire human household would shave their eyebrows as a public manifestation of grief. These felines were often mummified using the same costly natron resins reserved for the nobility and entombed in specialized necropolises like Bubastis, dedicated to the feline-headed deity Bastet, effectively blending religious cosmology with domestic affection.
|
|
6
|
+
|
|
7
|
+
Parallel developments were unfolding across the globe, creating distinct regional pockets of companionship that would later collide through imperial trade. In the Andean highlands of South America, the Incas domesticated the guinea pig (*Cavia porcellus*), known locally as the cuy. While primarily a source of protein and a diagnostic tool used by folk healers to absorb illness from the sick, select lineages were kept by children as cherished house-dwellers. Meanwhile, in the imperial courts of Han Dynasty China, a parallel phenomenon saw the intensive breeding of the Pekingese dog. These small, flat-faced canids were selectively bred to resemble miniature lions — the mythical protectors of Buddhism — and were guarded so fiercely within the walls of the Forbidden City that stealing one was punishable by death. They lived a life of pampered luxury, carried in the sleeves of silk robes and tended to by dedicated eunuchs, establishing an early historical precedent where certain animal breeds functioned strictly as status symbols and manifestations of political sovereignty rather than utilitarian workers.
|
|
8
|
+
|
|
9
|
+
The classical antiquity of Europe further complicated this tapestry, as the Roman elite integrated exoticism into their definition of the domestic sphere. Roman matrons frequently kept ring-necked parakeets (*Psittacula krameri*) imported from the conquests of India, housing them in elaborate cages of ivory and silver, and teaching them to speak the name of the Emperor. Concurrently, the Roman fondness for the ferret (*Mustela furo*) emerged as a dual-purpose phenomenon; these mustelids were kept both to flush rabbits from agricultural burrows and as slinky, playful companions within the villa. This Roman domestic ecosystem was heavily documented by Pliny the Elder in his Natural History, where he noted that the elite often developed deep, seemingly irrational emotional attachments to their companion animals, including pet fish like the moray eel, which the orator Hortensius reportedly wept over when it died in his private ornamental pond.
|
|
10
|
+
|
|
11
|
+
The medieval period in Europe introduced a sharp class divide to the concept of the pet, often viewed through the suspicious lens of ecclesiastical authority. While the peasantry kept functional yard dogs and barn cats, the high nobility — particularly noblewomen and monastic figures — indulged in the keeping of lapdogs, such as the early Maltese, and refined birds of prey. These lapdogs were often criticized by conservative church theologians who argued that the excessive meat fed to pampered pets belonged in the mouths of the starving peasantry. Furthermore, during the height of the European witch trials, the domestic pet — particularly the black cat, the toad, or the ferret — was frequently demonized by inquisitors as a "familiar," a physical vessel housing a demonic spirit. This created a perilous cultural paradox where an animal could be viewed as a comforting hearth-companion in one household and an existential piece of heretical evidence in another.
|
|
12
|
+
|
|
13
|
+
The modern concept of pet-keeping as a universal consumer phenomenon crystallized during the Industrial Revolution and the rise of the Victorian middle class. As populations migrated from rural farms to dense urban centers, the severed connection to nature triggered a romanticized counter-movement. The Victorians elevated the domestic home into a moral sanctuary, and the pet was introduced as a pedagogical tool to teach children empathy, kindness, and middle-class domestic virtues. This era saw the birth of the commercial pet industry: standard kibble formulations were patented by James Spratt in the 1860s, dog shows like Crufts were established to formalize breed standards, and specialized pet cemeteries, like the one in London's Hyde Park, emerged to afford animals a dignified transition into the afterlife. The pet was no longer a working asset or an eccentric luxury of the aristocratic elite; it had become an institutionalized member of the nuclear family unit, setting the stage for the hyper-commodified, emotionally complex multi-billion dollar pet industry of the contemporary era.
|