diff --git a/.github/ISSUE_TEMPLATE/team-pilot.yml b/.github/ISSUE_TEMPLATE/team-pilot.yml deleted file mode 100644 index e502e2b..0000000 --- a/.github/ISSUE_TEMPLATE/team-pilot.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Team pilot -description: Share team workflow needs before TaskBound grows a hosted product. -title: "[team pilot]: " -labels: ["team-validation"] -body: - - type: textarea - id: current-use - attributes: - label: Current use - description: Describe where you want to run TaskBound and what AI-agent review problem you need it to catch. - validations: - required: true - - type: textarea - id: team-layer - attributes: - label: Team-layer need - description: Which team capability would help most: shared policy packs, org-wide baselines, Slack/Jira routing, saved reports, reviewer assignment, or something else? - validations: - required: true - - type: textarea - id: pilot-shape - attributes: - label: Pilot shape - description: Share the smallest pilot that would prove value for your team, including repo count, users, timeline, and success criteria. - validations: - required: true - - type: dropdown - id: willingness - attributes: - label: Commercial signal - description: This helps validate whether a paid team layer should exist before SaaS is built. - options: - - Internal evaluation only - - Interested in a free pilot - - Interested in a paid pilot - - Budget owner or buyer - validations: - required: true diff --git a/README.md b/README.md index 1a42758..eb94eee 100644 --- a/README.md +++ b/README.md @@ -217,16 +217,6 @@ TaskBound is intentionally small right now. If a warning is noisy, open a If your team uses another scope signal, open a [missing-signal request](https://github.com/Conalh/TaskBound/issues/new?template=missing-signal.yml). -## Team Pilots - -TaskBound is validating the team layer before building a SaaS product. If the -free Action is useful but your team needs shared policy packs, org-wide -baselines, Slack or Jira routing, saved reports, or reviewer assignment, open a -[team pilot request](https://github.com/Conalh/TaskBound/issues/new?template=team-pilot.yml). - -The outreach and evidence rules are documented in the -[Team Validation Playbook](docs/TEAM_VALIDATION_PLAYBOOK.md). - ## Development ```powershell diff --git a/docs/INSTALL.md b/docs/INSTALL.md index bfe197b..498b32e 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -59,13 +59,6 @@ Use real PRs, Action runs, or redacted notes when you report feedback: - False positive: [open a false-positive report](https://github.com/Conalh/TaskBound/issues/new?template=false-positive.yml) - Missing signal: [open a missing-signal request](https://github.com/Conalh/TaskBound/issues/new?template=missing-signal.yml) -- Team workflow need: [open a team pilot request](https://github.com/Conalh/TaskBound/issues/new?template=team-pilot.yml) - -The paid-layer validation gate is tracked in -[issue #8](https://github.com/Conalh/TaskBound/issues/8). External installs and -team feedback count only when they are tied to real usage or a real install -attempt. The evidence rules are in the -[`docs/TEAM_VALIDATION_PLAYBOOK.md`](TEAM_VALIDATION_PLAYBOOK.md). ## After Signal Improves @@ -78,6 +71,3 @@ raising the threshold: fail-on: critical ``` -For team-wide needs such as shared policy packs, org baselines, Slack or Jira -routing, saved reports, or reviewer assignment, use the team pilot template -instead of assuming a hosted product should be built first. diff --git a/docs/TEAM_VALIDATION_PLAYBOOK.md b/docs/TEAM_VALIDATION_PLAYBOOK.md deleted file mode 100644 index 38c2281..0000000 --- a/docs/TEAM_VALIDATION_PLAYBOOK.md +++ /dev/null @@ -1,115 +0,0 @@ -# Team Validation Playbook - -TaskBound should prove team demand from the free GitHub Action before any hosted -SaaS work starts. This playbook defines the evidence to collect, how to ask for -it, and what does not count. - -## Current Proof - -- Stable Action tag: `Conalh/TaskBound@v0.2.3` -- Public demo PR: [Fix header CSS styling](https://github.com/Conalh/TaskBound/pull/1) -- Paid-layer tracker: [Validate paid team layer from OSS Action traction](https://github.com/Conalh/TaskBound/issues/8) -- Team intake: [team pilot request](https://github.com/Conalh/TaskBound/issues/new?template=team-pilot.yml) - -The demo shows a CSS-only stated task with out-of-scope workflow, MCP, -dependency, lifecycle-script, package, and network-fetch changes. That is useful -proof for the free Action. It is not proof that teams will pay. - -## Target Teams - -Prioritize teams that already use AI coding agents in pull requests and have -felt review pain from broad, unrelated, or surprising agent edits. The best -early teams have at least one real repository where TaskBound can run on live PRs -in advisory mode. - -Do not pitch this as a hosted dashboard. Pitch it as a free Action that helps -reviewers see whether an agent stayed inside the stated task. - -## Install Ask - -Ask teams to run TaskBound on one or two real pull requests with `fail-on: none` -so it cannot block their workflow while the signal is being evaluated. - -```yaml -name: TaskBound - -on: - pull_request: - -permissions: - contents: read - -jobs: - taskbound: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - with: - fetch-depth: 0 - - - uses: Conalh/TaskBound@v0.2.3 - with: - fail-on: none -``` - -If a team wants a narrower first run, ask them to add explicit pull request body -scope such as "Only touch `src/auth/session.ts` and related tests." TaskBound -uses the PR title plus body as scope context. - -## Feedback Ask - -For each team, collect feedback tied to a real PR or install attempt: - -- False positives: files TaskBound flagged that the team considers in scope. -- Missing signals: risky scope creep that TaskBound did not flag. -- Scope-source issues: places where the PR title or body did not express the - intended task clearly enough. -- Policy tuning needs: severity overrides, repo-specific sensitive surfaces, or - different blocking thresholds. -- Team workflow needs: shared policy packs, org-wide baselines, Slack or Jira - routing, saved reports, reviewer assignment, or report history. - -Open a public issue when the team can share details. Use a redacted note in -issue #8 when the team cannot share repository details publicly. - -False-positive and missing-signal reports should include a PR, Action run, -TaskBound report, or redacted evidence note plus team or repository context. Do -not count reports toward issue #8 when they cannot be tied to real usage or a -real install attempt. - -## Evidence Protocol - -Only count external evidence in issue #8. - -- Count an install when an external repository opens an install PR or runs the - Action on at least one real pull request. -- Count feedback when it comes from a real team using or attempting to use - TaskBound, not from internal demos. -- Count team-layer demand when the requested capability is unnecessary for the - free Action but useful for multiple people or repositories. -- Count pilot or payment demand only when a team explicitly says it would pay, - budget for, or run a pilot around a team-layer capability. -- Do not count TaskBound's demo PR, self-dogfood runs, README edits, or private - assumptions as market evidence. - -When evidence lands, update issue #8 with the repository or team name when -public, a link to the PR or issue when available, and the counter it affects. - -## Outreach Loop - -1. Ask the team to install the free Action with `fail-on: none`. -2. Let it run on one or two real PRs that include AI-agent edits. -3. Review the TaskBound report with the team. -4. Ask what was noisy, what was missing, and what would make the signal useful - across their team. -5. Record concrete evidence in issue #8. -6. Defer paid product work until the tracker has external signal. - -## Stop And Go Gates - -Do not build a SaaS dashboard while the issue #8 counters are at zero. - -Build only a thin team layer after external evidence appears. The first paid -surface should match the demand teams actually report, not a guessed product -shape. Likely candidates are shared policy configuration, org defaults, report -history, notification routing, or reviewer assignment. diff --git a/test/adoption-docs.test.mjs b/test/adoption-docs.test.mjs index 6bb114a..2bd104a 100644 --- a/test/adoption-docs.test.mjs +++ b/test/adoption-docs.test.mjs @@ -8,20 +8,16 @@ const actionRef = `Conalh/TaskBound@v${packageJson.version}`; test('adoption docs provide a copy-paste advisory Action install path', () => { const readme = fs.readFileSync('README.md', 'utf8'); const installGuide = fs.readFileSync('docs/INSTALL.md', 'utf8'); - const validationPlaybook = fs.readFileSync('docs/TEAM_VALIDATION_PLAYBOOK.md', 'utf8'); const workflowExample = fs.readFileSync('examples/taskbound-advisory.yml', 'utf8'); assert.match(readme, /\[Install TaskBound in advisory mode\]\(docs\/INSTALL\.md\)/); assert.match(installGuide, /## Copy-Paste Workflow/); assert.match(installGuide, /## First Pull Request/); assert.match(installGuide, /## Report What You Learn/); - assert.match(installGuide, /https:\/\/github\.com\/Conalh\/TaskBound\/issues\/8/); - assert.match(installGuide, /docs\/TEAM_VALIDATION_PLAYBOOK\.md/); assert.match(installGuide, /fail-on: none/); assert.match(installGuide, /fetch-depth: 0/); assert.match(installGuide, /contents: read/); assert.match(installGuide, new RegExp(actionRef.replaceAll('.', '\\.'))); - assert.match(validationPlaybook, new RegExp(actionRef.replaceAll('.', '\\.'))); assert.match(workflowExample, new RegExp(actionRef.replaceAll('.', '\\.'))); assert.match(workflowExample, /fail-on: none/); assert.match(workflowExample, /fetch-depth: 0/);