Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# CODEOWNERS — External Data Collection Framework
#
# Add collector maintainers here when the private FreeEed-collectors repo is created.
# Example (uncomment and replace with GitHub usernames or teams):
#
# /api/collectors/ @shmsoft/collector-maintainers
# /api/collectors/docs/ @shmsoft/collector-maintainers
# /.github/workflows/collectors-ci.yml @shmsoft/collector-maintainers
# /docs/collector-framework/ @shmsoft/collector-maintainers
#
# Until maintainers are assigned, rely on manual review from core contributors.
76 changes: 76 additions & 0 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Collector Bug
description: Report a defect in the External Data Collection Framework
title: "[COLLECTOR] "
labels:
- type:bug
- epic:collector-framework
body:
- type: markdown
attributes:
value: |
Use the **`[COLLECTOR]`** title prefix. Redact tokens, credentials, customer names, and PII before pasting logs.

- type: dropdown
id: connector
attributes:
label: Connector
description: Which connector or layer is affected?
options:
- none (core/framework)
- box
- gdrive
- dropbox
- api
- ingestion
- storage
- security
validations:
required: true

- type: textarea
id: repro_steps
attributes:
label: Steps to reproduce
description: Minimal steps to trigger the bug
placeholder: |
1. Configure ...
2. Run ...
3. Observe ...
validations:
required: true

- type: textarea
id: expected
attributes:
label: Expected behavior
placeholder: What should have happened?
validations:
required: true

- type: textarea
id: actual
attributes:
label: Actual behavior
placeholder: What happened instead?
validations:
required: true

- type: textarea
id: logs
attributes:
label: Logs (redacted)
description: Paste relevant log excerpts. Remove tokens, secrets, emails, and file paths containing PII.
placeholder: |
[INFO] job_id=abc123 connector=box ...
[ERROR] ...
validations:
required: false

- type: input
id: environment
attributes:
label: Environment
description: e.g. local Docker, Azure container, air-gapped laptop
placeholder: local Docker / Python 3.11
validations:
required: false
93 changes: 93 additions & 0 deletions .github/ISSUE_TEMPLATE/feature.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
name: Collector Feature
description: New connector capability or subsystem feature for the External Data Collection Framework
title: "[COLLECTOR] "
labels:
- type:feature
- epic:collector-framework
body:
- type: markdown
attributes:
value: |
Use the **`[COLLECTOR]`** title prefix for all collector-framework issues so they are easy to filter.

Work is tracked in the private **`FreeEed-collectors`** companion repo (or locally until that repo exists).
Do not open in-progress collector issues on the public `shmsoft/FreeEed` repo.

- type: dropdown
id: area
attributes:
label: Area
description: Primary subsystem or layer affected
options:
- core
- ingestion
- storage
- connectors
- api
- security
- ci
- docs
validations:
required: true

- type: dropdown
id: connector
attributes:
label: Connector
description: External platform, if applicable
options:
- none
- box
- gdrive
- dropbox
validations:
required: true

- type: dropdown
id: milestone
attributes:
label: Milestone
description: Target milestone (M0–M8)
options:
- M0 — GitHub & scaffolding
- M1 — Core framework
- M2 — Ingestion & storage
- M3 — Trigger & processing
- M4 — Box connector
- M5 — Drive & Dropbox
- M6 — API & deployment
- M7 — Tests & docs
- M8 — Public promotion
validations:
required: true

- type: textarea
id: description
attributes:
label: Feature description
description: What should be built and why?
placeholder: |
As a [role], I need [capability] so that [outcome].
validations:
required: true

- type: textarea
id: acceptance_criteria
attributes:
label: Acceptance criteria
description: Testable conditions that define "done"
placeholder: |
- [ ] Criterion 1
- [ ] Criterion 2
- [ ] Unit tests added/updated
- [ ] No secrets or telemetry introduced
validations:
required: true

- type: checkboxes
id: labels_hint
attributes:
label: Apply matching labels after creation
options:
- label: I will add the appropriate `area:*` and `connector:*` labels (if not none)
- label: I will link this issue to the **External Data Collection Framework** GitHub Project
66 changes: 66 additions & 0 deletions .github/ISSUE_TEMPLATE/task.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Collector Task
description: Implementation task linked to a milestone
title: "[COLLECTOR] "
labels:
- epic:collector-framework
body:
- type: markdown
attributes:
value: |
Use the **`[COLLECTOR]`** title prefix. One task should map to one PR when possible.

- type: dropdown
id: milestone
attributes:
label: Milestone
description: Target milestone
options:
- M0
- M1
- M2
- M3
- M4
- M5
- M6
- M7
- M8
validations:
required: true

- type: dropdown
id: area
attributes:
label: Area
options:
- core
- ingestion
- storage
- connectors
- api
- security
- ci
- docs
validations:
required: true

- type: textarea
id: description
attributes:
label: Description
description: What needs to be done?
placeholder: Concrete implementation steps or deliverables for this task.
validations:
required: true

- type: textarea
id: definition_of_done
attributes:
label: Definition of done
description: Checklist that confirms the task is complete
placeholder: |
- [ ] Code merged to private repo `main`
- [ ] Unit tests pass in CI
- [ ] Documentation updated (if applicable)
- [ ] Issue linked in PR with `Closes #NNN`
validations:
required: true
53 changes: 53 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
## Summary

<!-- Brief description of the change -->

## Linked issues

<!-- Required: link at least one issue -->
- Closes #

## Milestone

<!-- e.g. M1 — Core framework -->
- [ ] M0 — GitHub & scaffolding
- [ ] M1 — Core framework
- [ ] M2 — Ingestion & storage
- [ ] M3 — Trigger & processing
- [ ] M4 — Box connector
- [ ] M5 — Drive & Dropbox
- [ ] M6 — API & deployment
- [ ] M7 — Tests & docs
- [ ] M8 — Public promotion

## Labels

<!-- Apply before merge -->
- Area: `area:core` | `area:ingestion` | `area:storage` | `area:connectors` | `area:api` | `area:security` | `area:ci` | `area:docs`
- Connector (if applicable): `connector:box` | `connector:gdrive` | `connector:dropbox` | `connector:template`
- Type: `type:feature` | `type:bug` | `type:tech-debt` | `type:spike` | `type:docs`

## Test plan

- [ ] `pytest api/collectors/tests/unit` passes locally (or N/A — scaffold not yet present)
- [ ] Integration tests run / skipped appropriately (secrets not required for this PR)
- [ ] Manual smoke test described below (if applicable)

<!-- Describe manual verification steps -->

## Security checklist

- [ ] No secrets, tokens, or credentials committed
- [ ] No external telemetry (Sentry, Datadog, etc.) added
- [ ] Log output sanitized (tokens, emails, PII paths redacted)
- [ ] Outbound network limited to target platform APIs (no unexpected endpoints)

## Public promotion ready

<!-- Is this change safe to cherry-pick or PR into public shmsoft/FreeEed? -->
- [ ] **Yes** — ready for upstream promotion (sanitized description, no internal-only references)
- [ ] **No** — private-repo only until a later milestone

**Notes:**

<!-- If "No", explain what remains before public promotion -->
Loading