refactored the entire structure for the new product line

This commit is contained in:
2026-09-04 09:41:02 -05:00
parent 0c18960106
commit b4dd487a94
102 changed files with 3980 additions and 3091 deletions
+814
View File
@@ -0,0 +1,814 @@
Yes. The plan is directionally sound, but there are several gaps I would close **before we begin rewriting architecture**. Most of them arise because Project Thoth has evolved considerably beyond what the current `.thoth` documents describe.
The existing material gives us a strong foundation. It already establishes preservation, modularity, platform independence, deterministic processing, Markdown canonicality, self-description, ADRs, work orders, specifications, and the distinction between methodology and implementation. The problem is that the existing architecture and roadmap still describe the earlier capture-first Project Thoth rather than the complete application you now intend to build.
I would therefore make the **current project an explicit re-foundation of Project Thoth**, rather than incrementally editing the old plan.
## 1. Add a Project Reconciliation phase before SDLC design
Your first activity should not actually be "Select an SDLC methodology."
It should be:
> **Establish the authoritative state of Project Thoth.**
Right now there are multiple generations of Project Thoth documentation.
For example, ADR-001 correctly establishes Project Thoth as a platform whose methodology is authoritative over any particular software implementation. That remains highly compatible with what you just described.
But the current architecture describes a primarily linear knowledge-preservation system:
> External Sources → Capture → Archive → Processing → Repository → Search → AI Consumers.
That is no longer sufficient. The new application must also provide an **interactive AI operating environment** in which a user can choose Oracle/Ollama or a frontier provider, apply the Thinking Methodology, retrieve knowledge, continue a task across engines, and produce artifacts.
Likewise, `00-project-state.md` still says the project is at version 0.0.1 and focused on the ChatGPT Capture Connector.
So add:
### Phase 0 — Project Reconciliation
* Inventory all `.thoth` documents.
* Inventory specifications.
* Inventory ADRs.
* Inventory existing application/source code.
* Inventory previous experiments and abandoned implementations.
* Classify each artifact as:
* Current
* Requires Revision
* Superseded
* Historical
* Candidate for removal
* Explicitly review every accepted ADR.
* Preserve valid decisions rather than silently rewriting history.
* Create superseding ADRs where architectural decisions have changed.
* Update `00-project-state.md` only after this audit.
This prevents an AI developer three months from now from encountering two equally "canonical" descriptions of Project Thoth.
---
# 2. Separate the Project Thoth **product** from the Project Thoth **application**
You have effectively defined a product line:
```text
Project Thoth
├── Methodology
│ ├── Knowledge Architecture
│ ├── Archiving Methodology
│ └── Thinking Methodology
├── Intellectual Property
│ ├── Project Thoth Book
│ ├── Consulting Methodology
│ └── Specifications
├── Software Platform
│ ├── Project Thoth Application
│ ├── Capture Connectors
│ ├── Processors
│ └── Engine Adapters
└── Engineering System
├── .thoth SDLC standard
├── Studio Runbook
└── Development Runbook
```
This actually reinforces ADR-001 rather than replacing it. ADR-001 already says the software is an implementation of the methodology rather than the definition of Project Thoth itself.
I would formalize this distinction now.
Otherwise "Project Thoth" will alternately mean:
* the philosophy,
* the methodology,
* the application,
* the repository,
* the corpus,
* the development project,
depending upon which document one is reading.
Your glossary is already intended to prevent exactly this kind of semantic drift.
---
# 3. Add explicit Product Vision and Product Scope documents
Before requirements, create a short **Product Definition**.
Your current message contains most of it.
It should define:
**Vision**
A knowledge-centered generative AI environment in which knowledge and reasoning persist independently of the AI engine consuming them.
**Primary differentiator**
Engine independence.
**Primary user**
Initially you.
**Primary operating model**
Single-user, locally operated, internally designated system.
**Primary infrastructure**
```text
Forge → development/client workstation
Gateway → application runtime
Oracle → replaceable inference appliance
Frontier Providers → external replaceable inference services
Vault → durable knowledge corpus
```
**Critical product promise**
> Changing inference engines may change capability and depth, but it must not fundamentally change how Project Thoth works.
That last statement should eventually become both a requirement and a testable acceptance criterion.
---
# 4. Add actors and system boundaries before identifying use cases
"Identify all Use Cases" is correct, but there is a missing preceding step.
First identify the **actors**.
At minimum I expect:
```text
Human User
Project Thoth Application
Local Inference Engine
Ollama today
Spark/Ollama or successor tomorrow
Frontier AI Provider
OpenAI
Anthropic
Google
etc.
Knowledge Vault
Capture Connector
External Knowledge Source
Source Control / CI System
```
Possibly later:
```text
Administrator
Additional Project Thoth User
Processor
Automation
External Application
```
Then use cases can be organized around actor goals rather than features.
This will greatly improve the requirements document.
---
# 5. Add Non-Functional Requirements
This is the largest requirements gap.
Use cases tell us **what Project Thoth does**.
Architecture will be driven just as heavily by **how it must behave**.
You need explicit requirements for at least:
* Engine independence
* Data portability
* Deployment portability
* Replaceability
* Availability
* Performance
* Security
* Privacy
* Auditability
* Provenance
* Recoverability
* Backup
* Testability
* Maintainability
* Observability
* Configuration management
* Upgradeability
* Browser support
* Accessibility
* Data integrity
Some already exist philosophically. For example, the current philosophy says AI providers must be interchangeable, canonical artifacts human-readable, generated artifacts reproducible, and architecture capable of outliving implementations.
Those principles now need to become engineering requirements.
For example:
> **NFR-ENGINE-001:** Project Thoth SHALL expose inference through a provider-independent application interface.
> **NFR-ENGINE-002:** Replacement of Oracle SHALL NOT require modification of knowledge storage, user interface, Thinking Methodology, or conversation persistence components.
That turns philosophy into something architecture can enforce.
---
# 6. Add the Thinking Methodology as a first-class product capability
This is especially important.
The current architecture barely contains the system you have developed around:
```text
Constitution
Perspective
Protocol
Channel
Voice
```
Those concepts now exist as substantive Project Thoth intellectual property. The Constitution of Inquiry establishes the reasoning framework and explicitly treats conversations as primary sources of reasoning. Your Perspective and Protocol artifacts already demonstrate that these are modular behavioral components rather than merely prompts.
Therefore your methodology phase should include:
### Thinking Methodology Definition
* Constitution
* Perspectives
* Protocols
* Voices
* Channels
* Artifact definitions
* Precedence/order rules
* Composition rules
* Activation rules
* Override/supersession rules
* Storage format
* Versioning
* Runtime assembly
* Engine-independent behavior
* Validation/testing methodology
This should become a requirements source for the application.
---
# 7. Add Knowledge Architecture requirements explicitly
"Knowledge Management" is presently implied rather than decomposed.
You should define requirements around:
```text
Capture
Preservation
Cataloging
Classification
Collections
Retrieval
Reasoning Context
Processing
Transformation
Provenance
Publishing
Archiving
```
The existing Source Metadata and Manifest specifications are useful inputs because they already establish the distinction between objective source description and downstream analytical interpretation.
But the application now needs requirements around how those artifacts are:
* created,
* stored,
* viewed,
* edited,
* regenerated,
* related,
* searched,
* fed into inference.
That bridge between **knowledge methodology** and **application behavior** is currently missing.
---
# 8. Add an Engine Abstraction requirements workstream
Given your new product definition, I would make this one of the central requirements workstreams.
The architecture must not think in terms of:
```text
Project Thoth → Ollama
```
It should eventually resemble conceptually:
```text
Project Thoth
Inference Contract
┌─────────────┼─────────────┐
▼ ▼ ▼
Ollama OpenAI Anthropic
Oracle
```
Oracle itself is **not an architectural dependency**.
Oracle is a deployment of one provider.
That distinction is crucial because you already expect Oracle to evolve from the current machine to one Spark and potentially several Sparks.
The application should not care.
This should therefore be settled as a requirement before architecture begins.
---
# 9. Add an Environment and Toolchain Decision phase
Your SDLC section currently jumps from methodology selection to coding standards and CI/CD.
Before Sprint 0, decide the standard engineering workstation.
Questions include:
* VS Code vs Visual Studio Community
* Git workflow
* Gitea project organization
* Package management
* Container development approach
* Local debugging strategy
* Testing framework
* Documentation tooling
* Diagram standard
* API documentation standard
* secrets management
* environment configuration
* dependency update strategy
I would **not switch from VS Code merely because this becomes a larger application**. That decision should follow the eventual technology stack rather than precede it.
If, for example, architecture leads toward TypeScript/React/Python, VS Code remains entirely sensible.
If you deliberately choose a heavily .NET-centric architecture, Visual Studio Community becomes more compelling.
So defer that decision until the technology architecture is clearer.
---
# 10. Expand Sprint 0 beyond CI/CD
You describe Sprint 0 as creation of the SDLC pipeline.
I would make Sprint 0:
> **Prove that the software factory works before using it to build Project Thoth.**
It should include:
```text
Repository
Branch / change workflow
Work Order / issue
Developer or AI implementation
Local validation
Commit
Push to Gitea
Automated build
Automated tests
Container build
Artifact/version creation
Deployment to Gateway test environment
Smoke test
```
The deliverable should be a trivial application running through the **entire pipeline**.
Not Project Thoth functionality.
Something as simple as:
```text
Project Thoth
Version: 0.0.1
Build: <git-sha>
Status: Healthy
```
would be enough.
That proves the studio before the studio begins building the product.
---
# 11. Add software quality and test strategy before development
Your coding standard already calls for unit, integration, E2E, and regression testing.
But the project plan needs a **Testing Strategy**.
Particularly important for Project Thoth will be:
### Deterministic tests
For parsers, serializers, configuration, retrieval, and storage.
### Contract tests
For engine adapters.
Every inference provider should satisfy the same Project Thoth engine contract.
### Behavioral fidelity tests
This is unusual and important.
You have already defined the requirement conceptually:
> Results may differ in depth but fundamentally should be similar.
Eventually you need a test corpus that can ask:
```text
Same:
conversation
knowledge context
Constitution
Perspective
Protocol
Voice
user request
Run against:
frontier engine
local engine
Evaluate:
Did each follow the methodology?
Did each use the supplied knowledge?
Did each preserve provenance?
Did each satisfy the task?
```
That is likely to become one of Project Thoth's most distinctive engineering practices.
---
# 12. Add security and trust boundaries
This is missing completely from the plan and will influence architecture.
At minimum define:
* Where API keys live.
* Whether frontier providers may receive all knowledge.
* Which corpus material may leave the local network.
* How retrieved documents inherit access restrictions.
* Whether logs may contain prompts or documents.
* How application secrets are stored.
* Authentication assumptions.
* Network trust boundaries between Forge, Gateway, and Oracle.
* How imported/captured documents are treated as untrusted content.
* Prompt-injection boundaries.
Given that Project Thoth is fundamentally a Knowledge Architecture product, security cannot be retrofitted after retrieval is built.
---
# 13. Add configuration and environment separation
Even an internal project should define:
```text
Development
Test
Production
```
They might initially all live on the same physical hardware, but the logical distinction matters.
You will want containerized configuration such as:
```text
thoth-dev
thoth-test
thoth-prod
```
or equivalent.
This makes your studio runbook applicable later to GW and future software projects.
---
# 14. Add architectural decision governance
You already have ADRs, which is excellent.
But define their lifecycle:
```text
Proposed
Accepted
Rejected
Deprecated
Superseded
```
And establish the rule:
> Existing accepted ADRs are never silently rewritten to reflect a new decision.
Instead:
```text
ADR-004 supersedes ADR-00X
```
That preserves the intellectual history of the project, which is especially appropriate for Project Thoth.
---
# 15. Add requirements traceability
Because AI will participate heavily in development, I would establish this from the beginning.
Something lightweight:
```text
Business Goal
Use Case
Functional Requirement
Non-Functional Requirement
Architecture Component
Work Order
Test
```
You do not need heavyweight enterprise tooling.
Markdown IDs are enough:
```text
UC-007
FR-021
NFR-008
ADR-012
WO-034
TEST-091
```
That makes the repository extraordinarily legible to both humans and AI.
---
# 16. Separate the two runbooks
Your deliverables identify:
1. Software Development Studio Runbook
2. SDLC Runbook
Keep those separate.
### Software Development Studio Runbook
Answers:
> How do I create the environment in which software gets built?
For example:
```text
Forge configuration
Gitea
Gateway
Docker
CI runners
SSH
credentials
repository creation
developer tooling
backup
deployment environment
```
### SDLC Runbook
Answers:
> Once the studio exists, how do we build software?
For example:
```text
Product definition
Requirements
Architecture
ADR
Sprint planning
Work Orders
Development
Code review
Testing
CI
Release
Deployment
Maintenance
Retirement
```
That distinction will make these deliverables reusable outside Project Thoth.
---
# Revised Project Plan
I would therefore restructure your current plan like this:
### 0. Reconcile Project Thoth
* Audit existing repository.
* Audit `.thoth`.
* Audit ADRs.
* Audit specifications.
* Audit existing source code.
* Identify obsolete experiments.
* Establish authoritative current state.
* Record superseded decisions without deleting history.
### 1. Establish the Software Development Studio
* Define Forge/Gateway/Gitea development topology.
* Select standard development tools.
* Define repository creation procedure.
* Define environment strategy.
* Define secrets/configuration strategy.
* Define backup/recovery expectations.
* Draft Software Development Studio Runbook.
### 2. Establish SDLC Practices
* Select/adapt methodology.
* Define lifecycle phases.
* Define roles.
* Define ADR process.
* Define Work Order process.
* Define Git/branch/change process.
* Define testing strategy.
* Define Definition of Ready.
* Define Definition of Done.
* Define release/versioning conventions.
* Define requirements traceability.
* Audit/refactor coding standards.
* Draft SDLC Runbook.
### 3. Redesign `.thoth`
* Define purpose of `.thoth`.
* Define required files.
* Define optional files.
* Define numbering system.
* Create `.thoth/README.md`.
* Define canonical-vs-generated documentation rules.
* Define AI onboarding instructions.
* Reorganize existing documents.
* Update `00-project-state.md`.
### 4. Establish Sprint 0
* Gitea repository.
* CI runner.
* Build pipeline.
* Test pipeline.
* Container pipeline.
* Versioning.
* Deployment to Gateway.
* Health check.
* Smoke test.
* Prove end-to-end SDLC with trivial application.
### 5. Define Project Thoth Product
* Product vision.
* Product boundaries.
* Actors.
* Infrastructure assumptions.
* Product terminology.
* Engine-independence principle.
* Product success measures.
* Relationship among methodology, application, archive, connectors, processors, and book.
### 6. Define Project Thoth Methodology
* Review philosophy.
* Define Knowledge Architecture.
* Define Archiving Methodology.
* Define Thinking Methodology.
* Define Constitutions.
* Define Perspectives.
* Define Protocols.
* Define Voices.
* Define Channels.
* Define artifact specifications.
* Define composition and precedence.
* Identify which concepts require application support.
### 7. Develop Requirements
* Actor catalog.
* Use-case catalog.
* Detailed use cases.
* Functional requirements.
* Non-functional requirements.
* Security/privacy requirements.
* Knowledge requirements.
* Engine abstraction requirements.
* Deployment requirements.
* Data requirements.
* Operational requirements.
* Behavioral-fidelity requirements.
* Acceptance criteria.
* Requirements traceability matrix.
### 8. Architecture Readiness Review
This is where **this project plan ends**.
Confirm:
* Product boundary is stable.
* Major use cases are understood.
* NFRs exist.
* Thinking Methodology requirements exist.
* Knowledge Architecture requirements exist.
* Engine independence is formally defined.
* SDLC is operational.
* Sprint 0 pipeline works.
* `.thoth` can onboard a new human or AI developer.
* Major architectural unknowns are identified.
* Existing ADR conflicts are resolved.
Then:
> **Formal Project Thoth Architecture begins.**
---
## One important change in emphasis
I would not call what happens before architecture "pre-development."
You are already developing Project Thoth.
The **software implementation** has not begun, but requirements, specifications, ADRs, methodology, test strategy, development infrastructure, and the `.thoth` system are all engineering artifacts.
That distinction matters because one of the things you are practicing here is precisely what gets lost in many AI-driven projects: **software engineering is not synonymous with writing code**.
And that may ultimately be one of the most reusable lessons from Project Thoth for the studio model.
The immediate next artifact I would create is **not the requirements document**. It should be the new `.thoth/README.md`, because that document can establish the document taxonomy, numbering scheme, authority hierarchy, and instructions governing all the work that follows.
+50
View File
@@ -0,0 +1,50 @@
Project Thoth
├── .thoth
│ └── Canonical project self-description
├── Methodologies
│ │
│ ├── Source Capture Methodology
│ │ ├── Principles
│ │ ├── Processes
│ │ └── Specifications
│ │
│ ├── Archive Methodology
│ │ ├── Principles
│ │ ├── Processes
│ │ └── Specifications
│ │
│ └── Thinking Methodology
│ ├── Constitution
│ ├── Perspectives
│ ├── Protocols
│ ├── Voices
│ ├── Channels
│ ├── Artifact Definitions
│ └── Specifications
├── Application
│ │
│ ├── Source Capture
│ │ └── Implementation determined by requirements
│ │
│ ├── Archive
│ │ └── Implementation determined by requirements
│ │
│ ├── Thinking
│ │ └── Implementation determined by requirements
│ │
│ ├── Retrieval
│ │
│ ├── Inference
│ │
│ └── User Interface
├── Knowledge Corpus
│ └── Durable source and derived knowledge
└── Engineering
├── Software Development Studio Runbook
├── SDLC Runbook
└── Development Standards
@@ -0,0 +1,7 @@
.env
__pycache__/
*.py[cod]
.venv/
build/
dist/
*.egg-info/
+45
View File
@@ -0,0 +1,45 @@
# Thoth RAG Ingestion POC
This directory is a self-contained Python application for loading, chunking,
embedding, and inspecting Markdown documents. Runtime code uses only the Python
standard library.
## Layout
```text
rag-ingestion-poc/
├── README.md
├── src/
│ └── rag_ingestion/
├── tests/
└── work-orders/
```
The implementation uses the conventional `src` package layout. Historical
implementation work orders are kept under `work-orders`.
## Configure
Copy `.env.example` to `.env` and provide the Oracle embedding endpoint and
model. The application always reads the `.env` beside this README, regardless
of the shell's current working directory. Operating-system environment values
override values from the file.
## Set up and run
From this directory:
```powershell
python -m venv .venv
.venv\Scripts\python -m pip install -e .
.venv\Scripts\python -m rag_ingestion.ingest path\to\conversation.md --show-chunks
.venv\Scripts\python -m rag_ingestion.ingest --check-embedding-config
```
The editable installation also provides `thoth-rag-ingest` as a console command.
## Test
```powershell
.venv\Scripts\python -m unittest discover -s tests -v
```
@@ -0,0 +1,19 @@
[build-system]
requires = ["setuptools>=68"]
build-backend = "setuptools.build_meta"
[project]
name = "thoth-rag-ingestion"
version = "0.1.0"
description = "Self-contained Markdown RAG ingestion proof of concept"
requires-python = ">=3.10"
[project.scripts]
thoth-rag-ingest = "rag_ingestion.ingest:main"
[tool.setuptools.packages.find]
where = ["src"]
include = ["rag_ingestion*"]
[tool.unittest]
start-directory = "tests"
@@ -9,6 +9,8 @@ from urllib.parse import urlsplit
ORACLE_BASE_URL_VARIABLE = "THOTH_ORACLE_BASE_URL"
EMBEDDING_MODEL_VARIABLE = "THOTH_EMBEDDING_MODEL"
EMBEDDING_DIMENSION_VARIABLE = "THOTH_EMBEDDING_DIMENSION"
APPLICATION_ROOT = Path(__file__).resolve().parents[2]
DEFAULT_ENV_PATH = APPLICATION_ROOT / ".env"
@dataclass(frozen=True, slots=True)
@@ -65,9 +67,9 @@ def read_env_file(path: Path) -> dict[str, str]:
def load_embedding_config(
environ: Mapping[str, str] | None = None,
env_path: str | Path = ".env",
env_path: str | Path = DEFAULT_ENV_PATH,
) -> EmbeddingConfig:
"""Load `.env`, then override it with operating-system environment values."""
"""Load the application's `.env`, then apply OS environment overrides."""
values = read_env_file(Path(env_path))
values.update(os.environ if environ is None else environ)
@@ -6,10 +6,10 @@ import unittest
from datetime import datetime, timezone
from pathlib import Path
from processors.rag_ingestion.chunking import ChunkConfiguration, chunk_document
from processors.rag_ingestion.ingest import format_chunks
from processors.rag_ingestion.loader import load_markdown_document
from processors.rag_ingestion.models import Document
from rag_ingestion.chunking import ChunkConfiguration, chunk_document
from rag_ingestion.ingest import format_chunks
from rag_ingestion.loader import load_markdown_document
from rag_ingestion.models import Document
def document_with_text(text: str) -> Document:
@@ -5,15 +5,15 @@ import unittest
from pathlib import Path
from unittest.mock import patch
from processors.rag_ingestion.config import EmbeddingConfig, load_embedding_config
from processors.rag_ingestion.embeddings import embed_chunk, provider_from_config
from processors.rag_ingestion.embeddings import (
from rag_ingestion.config import EmbeddingConfig, load_embedding_config
from rag_ingestion.embeddings import embed_chunk, provider_from_config
from rag_ingestion.embeddings import (
EmbeddingConnectionError,
EmbeddingRequestError,
)
from processors.rag_ingestion.ingest import check_embedding_config
from rag_ingestion.ingest import check_embedding_config
from tests.test_chunking import document_with_text
from processors.rag_ingestion.chunking import ChunkConfiguration, chunk_document
from rag_ingestion.chunking import ChunkConfiguration, chunk_document
class EmbeddingConfigurationTests(unittest.TestCase):
@@ -121,7 +121,7 @@ class ConfigurationDiagnosticTests(unittest.TestCase):
def test_request_failure_distinguishes_successful_connection(self) -> None:
config = EmbeddingConfig("http://oracle:11434", "model:v1", None)
with patch(
"processors.rag_ingestion.ingest.provider_from_config"
"rag_ingestion.ingest.provider_from_config"
) as provider_factory:
provider_factory.return_value.embed.side_effect = EmbeddingRequestError(
"model does not support embeddings"
@@ -134,7 +134,7 @@ class ConfigurationDiagnosticTests(unittest.TestCase):
def test_connection_failure_is_reported_separately(self) -> None:
config = EmbeddingConfig("http://oracle:11434", "model:v1", None)
with patch(
"processors.rag_ingestion.ingest.provider_from_config"
"rag_ingestion.ingest.provider_from_config"
) as provider_factory:
provider_factory.return_value.embed.side_effect = EmbeddingConnectionError(
"unreachable"
@@ -5,10 +5,10 @@ import tempfile
import unittest
from pathlib import Path
from processors.rag_ingestion.chunking import ChunkConfiguration, chunk_document
from processors.rag_ingestion.embeddings import embed_chunk
from processors.rag_ingestion.loader import load_markdown_document
from processors.rag_ingestion.similarity import cosine_similarity
from rag_ingestion.chunking import ChunkConfiguration, chunk_document
from rag_ingestion.embeddings import embed_chunk
from rag_ingestion.loader import load_markdown_document
from rag_ingestion.similarity import cosine_similarity
class FixedEmbeddingProvider:
@@ -7,8 +7,8 @@ import tempfile
import unittest
from pathlib import Path
from processors.rag_ingestion.ingest import format_document
from processors.rag_ingestion.loader import load_markdown_document
from rag_ingestion.ingest import format_document
from rag_ingestion.loader import load_markdown_document
class MarkdownIngestionTests(unittest.TestCase):
@@ -93,7 +93,7 @@ class MarkdownIngestionTests(unittest.TestCase):
missing = self.directory / "absent.md"
result = subprocess.run(
[sys.executable, "-m", "processors.rag_ingestion.ingest", str(missing)],
[sys.executable, "-m", "rag_ingestion.ingest", str(missing)],
capture_output=True,
text=True,
check=False,
-26
View File
@@ -1,26 +0,0 @@
I agree that the presentation layer should be a self-hosted web application.
I agree with using an n-tier architecture where the functions exist in the business logic layer and interfaces to external services (like NextCloud) exist in the data layer.
The iterations of the MVP should be much smaller than proposed:
Iteration 0:
- establish CI/CD pipeline to use with project development
- create docker compose to deploy self-hosted application
- display home page that says "Project Thoth"
Iteration 1:
- create application shell
- navigation bar with placeholders including link to the Vault
- header title and menu bar
- placeholder for profile icon, and identity management menu
- footer content
- informational home page with boiler plate content
Iteration 2:
- a Vault page to show nextcloud content
- nextcloud interface that will successfully connect to an instance
- display top level nextcloud folder structure in Vault page
Iteration 3:
- allow user to browse through the Vault
@@ -0,0 +1,582 @@
---
id: metadata.source.standard
name: Standard Source Metadata
version: 1.0
type: metadata-schema
status: canonical
scope: external-and-reference-sources
-------------------------------------
# Standard Source Metadata
## PURPOSE
This metadata schema provides a common provenance structure for source material used by Project Thoth.
It is intended for:
* downloaded articles;
* social media posts;
* news stories;
* Substack articles;
* magazine and journal publications;
* book excerpts;
* essays;
* reports;
* transcripts;
* reference documents;
* archived web content;
* and similar source material.
The schema should identify:
1. what the source is;
2. who created it;
3. where it came from;
4. when it was published or captured;
5. what relationship the user has to it;
6. how Thoth should treat it during inquiry.
---
# REQUIRED FIELDS
Every source should contain the following fields when known.
```yaml
---
title: ""
author: ""
publication: ""
publication_date: ""
source_type: ""
canonical_url: ""
user_authored: false
editable: false
role: evidence
---
```
---
# FIELD DEFINITIONS
## title
The title of the source.
Examples:
```yaml
title: Myth of the Day: Witch
```
```yaml
title: The Left Hand of Darkness
```
```yaml
title: LinkedIn post by Jane Smith on AI governance
```
For social media posts without a formal title, create a descriptive archival title.
---
## author
The person or organization primarily responsible for the source.
Examples:
```yaml
author: Ursula K. Le Guin
```
```yaml
author: Mythology: Gods and Monsters
```
```yaml
author: Jane Smith
```
Do not infer an individual author when only an organization is known.
---
## publication
The publication, platform, publisher, or container in which the source appeared.
Examples:
```yaml
publication: Substack
```
```yaml
publication: The Atlantic
```
```yaml
publication: LinkedIn
```
```yaml
publication: Reddit
```
```yaml
publication: Harper & Row
```
---
## publication_date
The original publication date when known.
Prefer ISO format:
```yaml
publication_date: 2026-09-01
```
If the exact day is unknown, preserve only what is known.
```yaml
publication_date: 1969
```
Do not invent precision.
---
## source_type
Classify the source by its original form.
Recommended controlled values:
```yaml
source_type: news_article
source_type: web_article
source_type: substack_article
source_type: social_media_post
source_type: journal_article
source_type: magazine_article
source_type: book
source_type: book_excerpt
source_type: report
source_type: transcript
source_type: forum_post
source_type: blog_post
source_type: reference_document
source_type: archival_document
```
Use the narrowest accurate value.
---
## canonical_url
The original or preferred source URL when available.
Example:
```yaml
canonical_url: https://example.com/article
```
For offline or print sources, omit or leave blank.
---
# PROVENANCE FIELDS
## captured_from
Describes how the source entered Thoth.
Recommended values:
```yaml
captured_from: web
captured_from: browser_export
captured_from: manual_copy
captured_from: pdf
captured_from: ebook
captured_from: screenshot
captured_from: social_platform
captured_from: transcript_export
```
---
## captured_at
Date or timestamp when the source was captured into Thoth.
Example:
```yaml
captured_at: 2026-09-04T05:30:00-05:00
```
This is distinct from publication date.
---
## source_status
Describes the source's relationship to the original.
Recommended values:
```yaml
source_status: complete
source_status: excerpt
source_status: partial
source_status: archived_copy
source_status: transcript
source_status: quoted_fragment
```
This field is important because Thoth should not silently treat an excerpt as though it represents a whole work.
---
# USER RELATIONSHIP
## user_authored
Indicates whether the source was written by the user.
```yaml
user_authored: true
```
or:
```yaml
user_authored: false
```
This field should be explicit.
Do not infer authorship merely because the user uploaded the document.
---
## editable
Indicates whether the source should normally be treated as working material that may be revised.
```yaml
editable: true
```
or:
```yaml
editable: false
```
Examples:
A user's article draft:
```yaml
user_authored: true
editable: true
```
A downloaded news article:
```yaml
user_authored: false
editable: false
```
A copied public-domain text:
```yaml
user_authored: false
editable: false
```
---
# SOURCE ROLE
## role
Defines how the source should normally function during inquiry.
Recommended controlled values:
```yaml
role: evidence
role: reference
role: working_draft
role: canonical
role: example
role: context
role: quotation_source
role: background
```
### evidence
The source is being examined as evidence.
Typical behavior:
* analyze claims;
* inspect assumptions;
* compare with other sources;
* test interpretations;
* cite when needed.
Do not rewrite unless requested.
### reference
The source supplies factual or contextual information.
Typical behavior:
* retrieve information;
* preserve terminology;
* use as supporting context.
### working_draft
The source is material intended for revision.
Typical behavior:
* critique;
* rewrite;
* restructure;
* edit;
* develop.
Usually:
```yaml
user_authored: true
editable: true
role: working_draft
```
### canonical
The source defines an authoritative internal rule or specification.
Examples:
* Constitution of Inquiry;
* canonical Voice specification;
* Protocol definition;
* architecture document.
Treat its definitions as governing within its declared scope.
Do not casually rewrite or contradict it.
### example
The source is illustrative rather than authoritative.
Use it to understand form, style, structure, or behavior.
### context
The source exists primarily to provide situational background.
### quotation_source
The source is preserved primarily to support exact quotations or citation.
### background
The source may inform inquiry but should not be treated as primary evidence.
---
# OPTIONAL TRUST AND EVIDENCE FIELDS
## source_level
Recommended values:
```yaml
source_level: primary
source_level: secondary
source_level: tertiary
source_level: unknown
```
This describes evidentiary position, not quality.
A primary source may be wrong.
A tertiary source may be accurate.
---
## verification_status
Recommended values:
```yaml
verification_status: unverified
verification_status: partially_verified
verification_status: verified
verification_status: disputed
```
Do not mark a source verified merely because it appears authoritative.
---
## reliability_notes
Free-text notes about known limitations.
Example:
```yaml
reliability_notes: >
Author provides no primary-source citations for several historical claims.
```
---
# OPTIONAL CONTENT FIELDS
## language
```yaml
language: en
```
## topics
```yaml
topics:
- witchcraft
- mythology
- folklore
- anthropology
```
## people
```yaml
people:
- E. E. Evans-Pritchard
- Heinrich Kramer
```
## places
```yaml
places:
- Europe
- Central Africa
```
These fields support discovery and indexing.
They should not substitute for interpretation.
---
# OPTIONAL RIGHTS FIELDS
## rights
Recommended values:
```yaml
rights: copyrighted
rights: public_domain
rights: licensed
rights: unknown
```
## license
Example:
```yaml
license: CC BY 4.0
```
These fields describe usage rights, not evidentiary value.
---
# COMPLETE EXAMPLE
```yaml
---
title: Myth of the Day: Witch
author: Mythology: Gods and Monsters
publication: Substack
publication_date: 2026-09-01
source_type: substack_article
canonical_url: https://substack.com/home/post/p-204248117
captured_from: browser_export
captured_at: 2026-09-04T05:30:00-05:00
source_status: complete
user_authored: false
editable: false
role: evidence
source_level: secondary
verification_status: unverified
language: en
topics:
- witchcraft
- mythology
- folklore
- anthropology
rights: copyrighted
---
```
---
# MINIMUM PRACTICAL PROFILE
When complete metadata is unavailable, use at minimum:
```yaml
---
title: ""
author: ""
publication: ""
publication_date: ""
source_type: ""
canonical_url: ""
user_authored: false
editable: false
role: evidence
source_status: complete
---
```
Do not invent missing values merely to complete the schema.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More