investor_profile ยท diff
git:20260608.5f1d4f6 to git:20260906.f9cef19
40 added, 17 removed. Audit A to A.
---
name: investor_profile
- description: Builds investor profiles by appending manual investment track records and preferences to generated person profiles.
+ description: Compose investor profiles from stored person profiles and manual investment track records. Use for roster members with LinkedIn IDs; composition does not discover people or regenerate source profiles.
---
- # Investor Profile
+ # Investor profile
- This deterministic bulk skill combines every generated person profile with the
- matching manually maintained investment track record.
+ Append the matching manual track record and preferences to stored person profiles.
- For the default `sictic-members` source dataset:
+ ## Inputs and outputs
- ```text
- Person profile:
- storage/community/sictic-members/insights/person-profile/<linkedin-id>-<model>.md
+ The async `investor_profile` accepts `source_dataset="sictic-members"` and
+ optional `names: list[str]`, returning `list[InsightFile]`. Only selected roster
+ members with LinkedIn IDs and matching stored profile files are eligible.
+ Preserve each source model variant in the output.
- Track record:
- storage/community/sictic-members/datasets/track-record/<linkedin-id>.md
+ ## Workflow and dependencies
- Investor profile:
- storage/community/sictic-members/insights/investor-profile/<linkedin-id>-<model>.md
- ```
+ Read the roster and files under its `person-profile` insight directory. Read
+ track records from `datasets/track-record/<linkedin-id>.md` in the same dataset;
+ save the combined result under `insights/investor-profile/<linkedin-id>-<model>.md`.
+ Use configured dataset locations for these paths.
- Every person-profile model variant is retained. Missing track records are
- represented by an explicit note. The skill does not call an LLM.
+ Direct composition requires the existing roster and person-profile directory.
+ It does not refresh these inputs. Bulk refresh declares `person-profile` as
+ its prerequisite. `read_investor_profiles(source_dataset, names)` is a separate
+ read-only selector returning a name-to-content dictionary, without composition.
+ ## Side effects and failure behavior
+
+ Composition calls no LLM and performs no ingestion, discovery or LinkedIn fetch.
+ It writes changed output content and retains identical files. Missing track
+ records produce a note; unmatched requested names and ineligible files are
+ skipped. A missing roster or source directory raises. Per-file failures leave
+ successful outputs saved, then raise instead of returning a partial list.
+
+ Known manual-output conflict: a manual person-profile source can cause composition
+ to overwrite the corresponding edited manual investor profile. This remains an
+ unresolved violation of [manual preservation](../standards_and_architecture/SKILL.md#naming-reading-and-saving),
+ not a supported exception to that rule.
+
## Usage
```bash
- conda run -n sictic-env python -m skills.investor_profile
- conda run -n sictic-env python -m skills.investor_profile --source-dataset another-community
+ conda run -n sictic-env python -m skills.harness -- /investor_profile --source-dataset "<DATASET>"
```
+
+ The direct CLI also accepts `--person "<NAME_1>, <NAME_2>"`; omission selects all
+ eligible roster members. Both CLIs default to `sictic-members`.
+
+ ## References
+
+ - [Composition and read-only selector](investor_profile.py)
+ - [Source profile workflow](../person_profile/SKILL.md)
+ - [Shared identity and matching](../standards_and_architecture/SKILL.md#identity-and-matching)