Import YAAS v2 snapshot - #4
Closed
guangmian-circle wants to merge 1 commit into
Closed
guangmian-circle wants to merge 1 commit into
guangmian-circle wants to merge 1 commit into
Conversation
Yourself-as-a-Service v2: a personal Slack assistant that runs on a ~60-second launchd loop and only spends model tokens when something it watches actually moves. A Python orchestrator (tick.py) evaluates per-quest watches through a directory of single-purpose checkers, and dispatches a worker only on real activity. One-commit snapshot of the local .git-yaas-v2 main branch. Full development history stays local; nothing is rewritten there. Source commit: 92654cfb03e0bf2a236d2d14392d2ad943feed97 The scan.yml workflow branch filters were retargeted from `main` to `master` in this delivery commit only, to match this repository's default branch. Local uncommitted and untracked files were excluded; this is the committed tree exactly as it stands at the source commit.
Dependency ReviewThe following issues were found:
License Issues.github/workflows/scan.yml
Allowed Licenses: BSD-1-Clause, BSD-2-Clause, BSD-3-Clause, MIT, MIT-0, Apache-1.1, Apache-2.0, Artistic-1.0, Artistic-2.0, PHP-3.0, PHP-3.01, PSF-2.0, Zlib, zlib-acknowledgement, BSL-1.0, OpenSSL, WTFPL, CC0-1.0, CC-PDDC, CC-BY-1.0, CC-BY-2.0, CC-BY-2.5, CC-BY-3.0, CC-BY-4.0, Unlicense, ISC, BlueOak-1.0.0, BSD-2-Clause-Patent, ADSL, Apache-2.0, APAFML, BSD-1-Clause, BSD-2-Clause, BSD-2-Clause-FreeBSD, BSD-2-Clause-NetBSD, BSD-2-Clause-Views, BSL-1.0, DSDP, ECL-1.0, ECL-2.0, ImageMagick, ISC, Linux-OpenIB, MIT, MIT-Modern-Variant, MS-PL, MulanPSL-1.0, Mup, PostgreSQL, Spencer-99, UPL-1.0, Xerox, 0BSD, AFL-1.1, AFL-1.2, AFL-2.0, AFL-2.1, AFL-3.0, AMDPLPA, AML, AMPAS, ANTLR-PD, ANTLR-PD-fallback, Apache-1.0, Apache-1.1, Artistic-2.0, Bahyph, Barr, BSD-3-Clause, BSD-3-Clause-Attribution, BSD-3-Clause-Clear, BSD-3-Clause-LBNL, BSD-3-Clause-Modification, BSD-3-Clause-No-Nuclear-License-2014, BSD-3-Clause-No-Nuclear-Warranty, BSD-3-Clause-Open-MPI, BSD-4-Clause, BSD-4-Clause-Shortened, BSD-4-Clause-UC, BSD-Source-Code, bzip2-1.0.5, bzip2-1.0.6, CC0-1.0, CNRI-Jython, CNRI-Python, CNRI-Python-GPL-Compatible, Cube, curl, eGenix, Entessa, FTL, HTMLTIDY, IBM-pibs, ICU, Info-ZIP, Intel, JasPer-2.0, Libpng, libpng-2.0, libtiff, LPPL-1.3c, MIT-0, MIT-advertising, MIT-open-group, MIT-CMU, MIT-enna, MIT-feh, MITNFA, MTLL, MulanPSL-2.0, Multics, Naumen, NCSA, Net-SNMP, NetCDF, NTP, OLDAP-2.0, OLDAP-2.0.1, OLDAP-2.1, OLDAP-2.2, OLDAP-2.2.1, OLDAP-2.2.2, OLDAP-2.3, OLDAP-2.4, OLDAP-2.5, OLDAP-2.6, OLDAP-2.7, OLDAP-2.8, OML, OpenSSL, PHP-3.0, PHP-3.01, Plexus, PSF-2.0, Python-2.0, Ruby, Saxpath, SGI-B-2.0, SMLNJ, SWL, TCL, TCP-wrappers, Unicode-DFS-2015, Unicode-DFS-2016, Unlicense, VSL-1.0, W3C, X11, XFree86-1.1, Xnet, xpp, Zlib, zlib-acknowledgement, ZPL-2.0, ZPL-2.1, AAL, Adobe-2006, Afmparse, Artistic-1.0, Artistic-1.0-cl8, Artistic-1.0-Perl, Beerware, blessing, Borceux, CECILL-B, ClArtistic, Condor-1.1, Crossword, CrystalStacker, diffmark, DOC, EFL-1.0, EFL-2.0, Fair, FSFUL, FSFULLR, Giftware, HPND, IJG, Leptonica, LPL-1.0, LPL-1.02, MirOS, mpich2, NASA-1.3, NBPL-1.0, Newsletr, NLPL, NRL, OGTSL, OLDAP-1.1, OLDAP-1.2, OLDAP-1.3, OLDAP-1.4, psutils, Qhull, Rdisc, RSA-MD, Spencer-86, Spencer-94, TU-Berlin-1.0, TU-Berlin-2.0, Vim, W3C-19980720, W3C-20150513, Wsuipa, WTFPL, xinetd, Zed, Zend-2.0, ZPL-1.1, GPL-2.0, GPL-2.0+, GPL-2.0-or-later, GPL-3.0, GPL-3.0+, GPL-3.0-or-later, LGPL-2.1, LGPL-2.1+, LGPL-2.1-or-later, LGPL-3.0, LGPL-3.0+, LGPL-3.0-or-later, MPL-1.1, MPL-2.0, MPL-2.0-no-copyleft-exception, CDDL-1.0, CDDL-1.1, CPL-1.0, IPL-1.0, EPL-1.0, EPL-2.0, Apache-1.0, CC-BY-SA-1.0, CC-BY-SA-2.0 Excluded from license check: OpenSSF Scorecard
Scanned Files
|
Collaborator
Author
5 tasks
nexx88
added a commit
that referenced
this pull request
Aug 17, 2026
…arser) (#6) ## Summary Fixes the 5 items surfaced by a whole-codebase security audit of `yaas-triage`. The audit found **no high-confidence (>=8) exploitable vulnerabilities**; these are the defense-in-depth / correctness hardening items below the exploitable bar. Each is a small, surgical change with tests kept green. | # | Fix | File | |---|-----|------| | 1 | Reject path traversal from an unvalidated `watch.json` `type` before it builds/execs the checker path (`[a-z0-9_]+` gate → misconfig verdict otherwise) | `tick.py` | | 2 | Apply the `log-event.py` quest_id traversal guard to `slack-send.py` so both send paths validate identically | `surfaces/slack-send.py` | | 3 | Drop `pending_review -> start` so the human-approval gate is structural, not dependent on the checker | `approval_state.py` | | 4 | Enforce header/TS adjacency in the Slack message parser (removes orphan/lone-TS mis-count) | `checkers/slack_utils.py` | | 5 | Remove dead `_find_watch_json` (unvalidated-path helper, unreferenced) | `ledger/approval-helper.py` | ## Known residual (finding #4) The Slack MCP returns messages as one flattened, unescaped **text** blob, so a body that forges an *adjacent* `=== header ===` + `Message TS:` pair remains indistinguishable from a real message boundary. The parser change enforces the format contract and closes the orphan/lone-TS path, but full closure needs structured (per-message) MCP output — documented inline with a `ponytail:` note. Impact is now further blunted by #3 (dispatch requires a structural review gate). ## Test plan - [x] 44/44 real suites pass; differential `tick.py` vs goldens **29/0** (no golden edits) - [x] `slack_utils`, all `approval-*`, `watch-guard`, `log-event`, `slack-send` suites green - [x] Functional: `slack-send.py --quest-id ../../etc` → `invalid quest id` exit 1; real ids pass through - [x] Functional: `wtype` guard accepts every real watch type, rejects traversal/dotted/empty - [x] Syntax + import checks on all 5 edited modules (The one full-suite failure, `path-references.test.sh`, is entirely a local gitignored `.ua/` plugin cache — 0 non-`.ua` refs — not code and not from this branch.) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Guangmian Kung <guangmian.kung@circle.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Initial import of Yourself-as-a-Service v2 into this repository.
mastercurrently holds only a README, so this is the first content PR.What this is. A personal Slack assistant that runs on a ~60-second launchd loop and only spends model tokens when something it watches actually moves. A Python orchestrator (
tick.py) evaluates per-quest watches through a directory of single-purpose checkers, and dispatches a worker only on real activity.README.mdandARCHITECTURE.mdare the entry points.How it was built.
.git-yaas-v2mainbranch. Full development history stays local and was not rewritten.92654cfb03e0bf2a236d2d14392d2ad943feed97scan.ymlworkflow branch filters were retargeted frommaintomasterin this delivery commit only, to match this repository's default branch. No other file differs from the source tree.Screening done before push. No submodules, no files over 200 KB, no binary blobs, and no credentials: the only matches for token-shaped patterns are macOS Keychain service names (
slack-xoxp-token) and one obviously fake token in a unit test. Secrets are read from the Keychain and from a gitignored.env;.env.examplecarries placeholders only.The commit is SSH-signed and GitHub reports the signature verified.