feat: improve documentation quality with real data
- Extract file-level docstrings from Python files (module-level string expressions) - Use __init__.py docstrings as module doc_summary - Use file docstrings as file purpose in layout tables (instead of 'Source file') - Populate module outbound_modules/inbound_modules from import edges (internal only) - Make filename sanitization consistent (sanitize_for_link matches sanitize_filename) - Clean up stale .md files from previous runs before generating - Fill ARCHITECTURE.md template with real layout, modules index, and critical points - Add file_docstring field to ParsedModule and file_purpose to FileDoc
This commit is contained in:
@@ -1,3 +0,0 @@
|
||||
# File: ../test-project/src/__init__.py
|
||||
|
||||
TODO: Add file documentation
|
||||
@@ -1,3 +0,0 @@
|
||||
# File: ../test-project/src/core.py
|
||||
|
||||
TODO: Add file documentation
|
||||
@@ -1,3 +0,0 @@
|
||||
# File: ../test-project/src/utils.py
|
||||
|
||||
TODO: Add file documentation
|
||||
@@ -1,36 +0,0 @@
|
||||
# File: ./src/core.py
|
||||
|
||||
- **Module:** ./src/core.py
|
||||
- **Defined symbols:** 6
|
||||
- **Imports:** 2
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
## File intent (manual)
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
|
||||
---
|
||||
|
||||
## Imports & file-level dependencies
|
||||
<!-- ARCHDOC:BEGIN section=file_imports -->
|
||||
> Generated. Do not edit inside this block.
|
||||
- sqlite3
|
||||
- requests
|
||||
<!-- ARCHDOC:END section=file_imports -->
|
||||
|
||||
---
|
||||
|
||||
## Symbols index
|
||||
<!-- ARCHDOC:BEGIN section=symbols_index -->
|
||||
> Generated. Do not edit inside this block.
|
||||
- [DatabaseManager](._src_core.py#DatabaseManager)
|
||||
- [__init__](._src_core.py#__init__)
|
||||
- [connect](._src_core.py#connect)
|
||||
- [execute_query](._src_core.py#execute_query)
|
||||
- [fetch_external_data](._src_core.py#fetch_external_data)
|
||||
- [process_user_data](._src_core.py#process_user_data)
|
||||
<!-- ARCHDOC:END section=symbols_index -->
|
||||
|
||||
---
|
||||
|
||||
## Symbol details
|
||||
@@ -1,34 +0,0 @@
|
||||
# File: ./src/utils.py
|
||||
|
||||
- **Module:** ./src/utils.py
|
||||
- **Defined symbols:** 4
|
||||
- **Imports:** 2
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
## File intent (manual)
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
|
||||
---
|
||||
|
||||
## Imports & file-level dependencies
|
||||
<!-- ARCHDOC:BEGIN section=file_imports -->
|
||||
> Generated. Do not edit inside this block.
|
||||
- json
|
||||
- os
|
||||
<!-- ARCHDOC:END section=file_imports -->
|
||||
|
||||
---
|
||||
|
||||
## Symbols index
|
||||
<!-- ARCHDOC:BEGIN section=symbols_index -->
|
||||
> Generated. Do not edit inside this block.
|
||||
- [load_config](._src_utils.py#load_config)
|
||||
- [save_config](._src_utils.py#save_config)
|
||||
- [get_file_size](._src_utils.py#get_file_size)
|
||||
- [format_bytes](._src_utils.py#format_bytes)
|
||||
<!-- ARCHDOC:END section=symbols_index -->
|
||||
|
||||
---
|
||||
|
||||
## Symbol details
|
||||
@@ -1,6 +1,6 @@
|
||||
# File: ./src/__init__.py
|
||||
|
||||
- **Module:** ./src/__init__.py
|
||||
- **Module:** src
|
||||
- **Defined symbols:** 0
|
||||
- **Imports:** 0
|
||||
|
||||
276
test-project/docs/architecture/files/src__core.py.md
Normal file
276
test-project/docs/architecture/files/src__core.py.md
Normal file
@@ -0,0 +1,276 @@
|
||||
# File: ./src/core.py
|
||||
|
||||
- **Module:** core
|
||||
- **Defined symbols:** 6
|
||||
- **Imports:** 2
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
## File intent (manual)
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
|
||||
---
|
||||
|
||||
## Imports & file-level dependencies
|
||||
<!-- ARCHDOC:BEGIN section=file_imports -->
|
||||
> Generated. Do not edit inside this block.
|
||||
- sqlite3
|
||||
- requests
|
||||
<!-- ARCHDOC:END section=file_imports -->
|
||||
|
||||
---
|
||||
|
||||
## Symbols index
|
||||
<!-- ARCHDOC:BEGIN section=symbols_index -->
|
||||
> Generated. Do not edit inside this block.
|
||||
- `DatabaseManager` (Class)
|
||||
- `DatabaseManager.__init__` (Method)
|
||||
- `DatabaseManager.connect` (Method)
|
||||
- `DatabaseManager.execute_query` (Method)
|
||||
- `fetch_external_data` (Function)
|
||||
- `process_user_data` (Function)
|
||||
<!-- ARCHDOC:END section=symbols_index -->
|
||||
|
||||
---
|
||||
|
||||
## Symbol details
|
||||
|
||||
<!-- ARCHDOC:BEGIN symbol id=DatabaseManager --><a id="DatabaseManager"></a>
|
||||
|
||||
### `DatabaseManager`
|
||||
- **Kind:** Class
|
||||
- **Signature:** `class DatabaseManager`
|
||||
- **Docstring:** `Manages database connections and operations.`
|
||||
|
||||
#### What it does
|
||||
<!-- ARCHDOC:BEGIN section=purpose -->
|
||||
extracted from AST
|
||||
<!-- ARCHDOC:END section=purpose -->
|
||||
|
||||
#### Relations
|
||||
<!-- ARCHDOC:BEGIN section=relations -->
|
||||
**Outbound calls (best-effort):**
|
||||
|
||||
**Inbound (used by) (best-effort):**
|
||||
<!-- ARCHDOC:END section=relations -->
|
||||
|
||||
#### Integrations (heuristic)
|
||||
<!-- ARCHDOC:BEGIN section=integrations -->
|
||||
- HTTP: no
|
||||
- DB: yes
|
||||
- Queue/Tasks: no
|
||||
<!-- ARCHDOC:END section=integrations -->
|
||||
|
||||
#### Risk / impact
|
||||
<!-- ARCHDOC:BEGIN section=impact -->
|
||||
- fan-in: 2
|
||||
- fan-out: 4
|
||||
- cycle participant: no
|
||||
- critical: no
|
||||
<!-- ARCHDOC:END section=impact -->
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
#### Manual notes
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
<!-- ARCHDOC:END symbol id=DatabaseManager -->
|
||||
|
||||
<!-- ARCHDOC:BEGIN symbol id=DatabaseManager.__init__ --><a id="DatabaseManager.__init__"></a>
|
||||
|
||||
### `DatabaseManager.__init__`
|
||||
- **Kind:** Method
|
||||
- **Signature:** `def __init__(self, db_path: str)`
|
||||
- **Docstring:** `No documentation available`
|
||||
|
||||
#### What it does
|
||||
<!-- ARCHDOC:BEGIN section=purpose -->
|
||||
extracted from AST
|
||||
<!-- ARCHDOC:END section=purpose -->
|
||||
|
||||
#### Relations
|
||||
<!-- ARCHDOC:BEGIN section=relations -->
|
||||
**Outbound calls (best-effort):**
|
||||
|
||||
**Inbound (used by) (best-effort):**
|
||||
<!-- ARCHDOC:END section=relations -->
|
||||
|
||||
#### Integrations (heuristic)
|
||||
<!-- ARCHDOC:BEGIN section=integrations -->
|
||||
- HTTP: no
|
||||
- DB: no
|
||||
- Queue/Tasks: no
|
||||
<!-- ARCHDOC:END section=integrations -->
|
||||
|
||||
#### Risk / impact
|
||||
<!-- ARCHDOC:BEGIN section=impact -->
|
||||
- fan-in: 0
|
||||
- fan-out: 0
|
||||
- cycle participant: no
|
||||
- critical: no
|
||||
<!-- ARCHDOC:END section=impact -->
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
#### Manual notes
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
<!-- ARCHDOC:END symbol id=DatabaseManager.__init__ -->
|
||||
|
||||
<!-- ARCHDOC:BEGIN symbol id=DatabaseManager.connect --><a id="DatabaseManager.connect"></a>
|
||||
|
||||
### `DatabaseManager.connect`
|
||||
- **Kind:** Method
|
||||
- **Signature:** `def connect(self)`
|
||||
- **Docstring:** `Connect to the database.`
|
||||
|
||||
#### What it does
|
||||
<!-- ARCHDOC:BEGIN section=purpose -->
|
||||
extracted from AST
|
||||
<!-- ARCHDOC:END section=purpose -->
|
||||
|
||||
#### Relations
|
||||
<!-- ARCHDOC:BEGIN section=relations -->
|
||||
**Outbound calls (best-effort):**
|
||||
|
||||
**Inbound (used by) (best-effort):**
|
||||
<!-- ARCHDOC:END section=relations -->
|
||||
|
||||
#### Integrations (heuristic)
|
||||
<!-- ARCHDOC:BEGIN section=integrations -->
|
||||
- HTTP: no
|
||||
- DB: yes
|
||||
- Queue/Tasks: no
|
||||
<!-- ARCHDOC:END section=integrations -->
|
||||
|
||||
#### Risk / impact
|
||||
<!-- ARCHDOC:BEGIN section=impact -->
|
||||
- fan-in: 0
|
||||
- fan-out: 1
|
||||
- cycle participant: no
|
||||
- critical: no
|
||||
<!-- ARCHDOC:END section=impact -->
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
#### Manual notes
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
<!-- ARCHDOC:END symbol id=DatabaseManager.connect -->
|
||||
|
||||
<!-- ARCHDOC:BEGIN symbol id=DatabaseManager.execute_query --><a id="DatabaseManager.execute_query"></a>
|
||||
|
||||
### `DatabaseManager.execute_query`
|
||||
- **Kind:** Method
|
||||
- **Signature:** `def execute_query(self, query: str)`
|
||||
- **Docstring:** `Execute a database query.`
|
||||
|
||||
#### What it does
|
||||
<!-- ARCHDOC:BEGIN section=purpose -->
|
||||
extracted from AST
|
||||
<!-- ARCHDOC:END section=purpose -->
|
||||
|
||||
#### Relations
|
||||
<!-- ARCHDOC:BEGIN section=relations -->
|
||||
**Outbound calls (best-effort):**
|
||||
|
||||
**Inbound (used by) (best-effort):**
|
||||
<!-- ARCHDOC:END section=relations -->
|
||||
|
||||
#### Integrations (heuristic)
|
||||
<!-- ARCHDOC:BEGIN section=integrations -->
|
||||
- HTTP: no
|
||||
- DB: no
|
||||
- Queue/Tasks: no
|
||||
<!-- ARCHDOC:END section=integrations -->
|
||||
|
||||
#### Risk / impact
|
||||
<!-- ARCHDOC:BEGIN section=impact -->
|
||||
- fan-in: 0
|
||||
- fan-out: 3
|
||||
- cycle participant: no
|
||||
- critical: no
|
||||
<!-- ARCHDOC:END section=impact -->
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
#### Manual notes
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
<!-- ARCHDOC:END symbol id=DatabaseManager.execute_query -->
|
||||
|
||||
<!-- ARCHDOC:BEGIN symbol id=fetch_external_data --><a id="fetch_external_data"></a>
|
||||
|
||||
### `fetch_external_data`
|
||||
- **Kind:** Function
|
||||
- **Signature:** `def fetch_external_data(url: str)`
|
||||
- **Docstring:** `Fetch data from an external API.`
|
||||
|
||||
#### What it does
|
||||
<!-- ARCHDOC:BEGIN section=purpose -->
|
||||
extracted from AST
|
||||
<!-- ARCHDOC:END section=purpose -->
|
||||
|
||||
#### Relations
|
||||
<!-- ARCHDOC:BEGIN section=relations -->
|
||||
**Outbound calls (best-effort):**
|
||||
|
||||
**Inbound (used by) (best-effort):**
|
||||
<!-- ARCHDOC:END section=relations -->
|
||||
|
||||
#### Integrations (heuristic)
|
||||
<!-- ARCHDOC:BEGIN section=integrations -->
|
||||
- HTTP: yes
|
||||
- DB: no
|
||||
- Queue/Tasks: no
|
||||
<!-- ARCHDOC:END section=integrations -->
|
||||
|
||||
#### Risk / impact
|
||||
<!-- ARCHDOC:BEGIN section=impact -->
|
||||
- fan-in: 2
|
||||
- fan-out: 2
|
||||
- cycle participant: no
|
||||
- critical: no
|
||||
<!-- ARCHDOC:END section=impact -->
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
#### Manual notes
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
<!-- ARCHDOC:END symbol id=fetch_external_data -->
|
||||
|
||||
<!-- ARCHDOC:BEGIN symbol id=process_user_data --><a id="process_user_data"></a>
|
||||
|
||||
### `process_user_data`
|
||||
- **Kind:** Function
|
||||
- **Signature:** `def process_user_data(user_id: int)`
|
||||
- **Docstring:** `Process user data with database and external API calls.`
|
||||
|
||||
#### What it does
|
||||
<!-- ARCHDOC:BEGIN section=purpose -->
|
||||
extracted from AST
|
||||
<!-- ARCHDOC:END section=purpose -->
|
||||
|
||||
#### Relations
|
||||
<!-- ARCHDOC:BEGIN section=relations -->
|
||||
**Outbound calls (best-effort):**
|
||||
|
||||
**Inbound (used by) (best-effort):**
|
||||
<!-- ARCHDOC:END section=relations -->
|
||||
|
||||
#### Integrations (heuristic)
|
||||
<!-- ARCHDOC:BEGIN section=integrations -->
|
||||
- HTTP: no
|
||||
- DB: no
|
||||
- Queue/Tasks: no
|
||||
<!-- ARCHDOC:END section=integrations -->
|
||||
|
||||
#### Risk / impact
|
||||
<!-- ARCHDOC:BEGIN section=impact -->
|
||||
- fan-in: 0
|
||||
- fan-out: 4
|
||||
- cycle participant: no
|
||||
- critical: no
|
||||
<!-- ARCHDOC:END section=impact -->
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
#### Manual notes
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
<!-- ARCHDOC:END symbol id=process_user_data -->
|
||||
194
test-project/docs/architecture/files/src__utils.py.md
Normal file
194
test-project/docs/architecture/files/src__utils.py.md
Normal file
@@ -0,0 +1,194 @@
|
||||
# File: ./src/utils.py
|
||||
|
||||
- **Module:** utils
|
||||
- **Defined symbols:** 4
|
||||
- **Imports:** 2
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
## File intent (manual)
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
|
||||
---
|
||||
|
||||
## Imports & file-level dependencies
|
||||
<!-- ARCHDOC:BEGIN section=file_imports -->
|
||||
> Generated. Do not edit inside this block.
|
||||
- json
|
||||
- os
|
||||
<!-- ARCHDOC:END section=file_imports -->
|
||||
|
||||
---
|
||||
|
||||
## Symbols index
|
||||
<!-- ARCHDOC:BEGIN section=symbols_index -->
|
||||
> Generated. Do not edit inside this block.
|
||||
- `load_config` (Function)
|
||||
- `save_config` (Function)
|
||||
- `get_file_size` (Function)
|
||||
- `format_bytes` (Function)
|
||||
<!-- ARCHDOC:END section=symbols_index -->
|
||||
|
||||
---
|
||||
|
||||
## Symbol details
|
||||
|
||||
<!-- ARCHDOC:BEGIN symbol id=load_config --><a id="load_config"></a>
|
||||
|
||||
### `load_config`
|
||||
- **Kind:** Function
|
||||
- **Signature:** `def load_config(config_path: str)`
|
||||
- **Docstring:** `Load configuration from a JSON file.`
|
||||
|
||||
#### What it does
|
||||
<!-- ARCHDOC:BEGIN section=purpose -->
|
||||
extracted from AST
|
||||
<!-- ARCHDOC:END section=purpose -->
|
||||
|
||||
#### Relations
|
||||
<!-- ARCHDOC:BEGIN section=relations -->
|
||||
**Outbound calls (best-effort):**
|
||||
|
||||
**Inbound (used by) (best-effort):**
|
||||
<!-- ARCHDOC:END section=relations -->
|
||||
|
||||
#### Integrations (heuristic)
|
||||
<!-- ARCHDOC:BEGIN section=integrations -->
|
||||
- HTTP: no
|
||||
- DB: no
|
||||
- Queue/Tasks: no
|
||||
<!-- ARCHDOC:END section=integrations -->
|
||||
|
||||
#### Risk / impact
|
||||
<!-- ARCHDOC:BEGIN section=impact -->
|
||||
- fan-in: 0
|
||||
- fan-out: 2
|
||||
- cycle participant: no
|
||||
- critical: no
|
||||
<!-- ARCHDOC:END section=impact -->
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
#### Manual notes
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
<!-- ARCHDOC:END symbol id=load_config -->
|
||||
|
||||
<!-- ARCHDOC:BEGIN symbol id=save_config --><a id="save_config"></a>
|
||||
|
||||
### `save_config`
|
||||
- **Kind:** Function
|
||||
- **Signature:** `def save_config(config: dict, config_path: str)`
|
||||
- **Docstring:** `Save configuration to a JSON file.`
|
||||
|
||||
#### What it does
|
||||
<!-- ARCHDOC:BEGIN section=purpose -->
|
||||
extracted from AST
|
||||
<!-- ARCHDOC:END section=purpose -->
|
||||
|
||||
#### Relations
|
||||
<!-- ARCHDOC:BEGIN section=relations -->
|
||||
**Outbound calls (best-effort):**
|
||||
|
||||
**Inbound (used by) (best-effort):**
|
||||
<!-- ARCHDOC:END section=relations -->
|
||||
|
||||
#### Integrations (heuristic)
|
||||
<!-- ARCHDOC:BEGIN section=integrations -->
|
||||
- HTTP: no
|
||||
- DB: no
|
||||
- Queue/Tasks: no
|
||||
<!-- ARCHDOC:END section=integrations -->
|
||||
|
||||
#### Risk / impact
|
||||
<!-- ARCHDOC:BEGIN section=impact -->
|
||||
- fan-in: 0
|
||||
- fan-out: 2
|
||||
- cycle participant: no
|
||||
- critical: no
|
||||
<!-- ARCHDOC:END section=impact -->
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
#### Manual notes
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
<!-- ARCHDOC:END symbol id=save_config -->
|
||||
|
||||
<!-- ARCHDOC:BEGIN symbol id=get_file_size --><a id="get_file_size"></a>
|
||||
|
||||
### `get_file_size`
|
||||
- **Kind:** Function
|
||||
- **Signature:** `def get_file_size(filepath: str)`
|
||||
- **Docstring:** `Get the size of a file in bytes.`
|
||||
|
||||
#### What it does
|
||||
<!-- ARCHDOC:BEGIN section=purpose -->
|
||||
extracted from AST
|
||||
<!-- ARCHDOC:END section=purpose -->
|
||||
|
||||
#### Relations
|
||||
<!-- ARCHDOC:BEGIN section=relations -->
|
||||
**Outbound calls (best-effort):**
|
||||
|
||||
**Inbound (used by) (best-effort):**
|
||||
<!-- ARCHDOC:END section=relations -->
|
||||
|
||||
#### Integrations (heuristic)
|
||||
<!-- ARCHDOC:BEGIN section=integrations -->
|
||||
- HTTP: no
|
||||
- DB: no
|
||||
- Queue/Tasks: no
|
||||
<!-- ARCHDOC:END section=integrations -->
|
||||
|
||||
#### Risk / impact
|
||||
<!-- ARCHDOC:BEGIN section=impact -->
|
||||
- fan-in: 0
|
||||
- fan-out: 1
|
||||
- cycle participant: no
|
||||
- critical: no
|
||||
<!-- ARCHDOC:END section=impact -->
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
#### Manual notes
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
<!-- ARCHDOC:END symbol id=get_file_size -->
|
||||
|
||||
<!-- ARCHDOC:BEGIN symbol id=format_bytes --><a id="format_bytes"></a>
|
||||
|
||||
### `format_bytes`
|
||||
- **Kind:** Function
|
||||
- **Signature:** `def format_bytes(size: int)`
|
||||
- **Docstring:** `Format bytes into a human-readable string.`
|
||||
|
||||
#### What it does
|
||||
<!-- ARCHDOC:BEGIN section=purpose -->
|
||||
extracted from AST
|
||||
<!-- ARCHDOC:END section=purpose -->
|
||||
|
||||
#### Relations
|
||||
<!-- ARCHDOC:BEGIN section=relations -->
|
||||
**Outbound calls (best-effort):**
|
||||
|
||||
**Inbound (used by) (best-effort):**
|
||||
<!-- ARCHDOC:END section=relations -->
|
||||
|
||||
#### Integrations (heuristic)
|
||||
<!-- ARCHDOC:BEGIN section=integrations -->
|
||||
- HTTP: no
|
||||
- DB: no
|
||||
- Queue/Tasks: no
|
||||
<!-- ARCHDOC:END section=integrations -->
|
||||
|
||||
#### Risk / impact
|
||||
<!-- ARCHDOC:BEGIN section=impact -->
|
||||
- fan-in: 0
|
||||
- fan-out: 0
|
||||
- cycle participant: no
|
||||
- critical: no
|
||||
<!-- ARCHDOC:END section=impact -->
|
||||
|
||||
<!-- MANUAL:BEGIN -->
|
||||
#### Manual notes
|
||||
<FILL_MANUALLY>
|
||||
<!-- MANUAL:END -->
|
||||
<!-- ARCHDOC:END symbol id=format_bytes -->
|
||||
Reference in New Issue
Block a user