-- Remove spec_prefix from all exported variables
-- sign materials automatically
-- create logs
-- send emails
-- add multiple target support
-- separate out options that control catalyst versus the package manager
-- add a new livecd/type for livedvd
- - make livedvd type perform several actions automatically
- - auto-fetch distfiles
- - automatically pull stages
-- check that distcc_hosts is set before enabling distcc
-- allow setting of distcc_hosts in catalyst.conf with override in the specs
-- check ccache settings, such as size, and ensure we don't overwrite them
-- perform user management via a loop in livecd-stage2
-- add portage jobs support
- - --jobs
- - --keep-going
- - --load-average
-- perform GCC version detection in seed stages to determine supported settings
-- build bootloaders for targets on-demand, rather than using pre-built tarballs
+# $Id$
+
+This file is a rough list of changes that need to be made to catalyst. If you
+have questions about any of these items, or wish to help with development, send
+them to the gentoo-catalyst@lists.gentoo.org mailing list. Bug reports should
+be filed at http://tinyurl.com/79slrk (http://bugs.gentoo.org) under the
+Catalyst component.
+
+Global:
+- remove spec_prefix from all exported variables (DONE)
+ - variables without spec_prefix are global and used in all targets
+ - variables with spec_prefix only apply to that target
+- add multiple target support for spec files (DONE)
+ - target: stage1
+ - targets: stage1 stage2 stage3 stage4 livecd netboot
+- add more validation and checking to code
+ - allow configuration globally (catalyst.conf), per-spec, or per-target
+ - setup defaults if host isn't configured
+ - do not assume end-user is a Release Engineer/Developer
+ - fallback to defaults on invalid options, by default (opt-out)
+ - more verbose error reporting to assist in troubleshooting problems
+ - perform verifications before starting processing
+ - referenced files exist
+ - seed has required components for building
+- support new portage features
+ - cache backends
+ - metadata_overlay (portage default in 2.1.6)
+ - sqlite
+ - jobs
+ - load average
+ - dependency checking
+ - --deep
+ - --complete-graph
+ - --with-bdeps y (Build-time dependencies)
+ - USE changes
+ - --newuse
+ - --reinstall changed-use
+ - failure detection
+ - --keep-going
+ - --resume --skipfirst
+- detect GCC version in seed stages for supported settings (CFLAGS)
+- add statistics gathering/reporting
+ - counters
+ - sessions started/completed/failed
+ - targets started/completed/failed (and per-subarch here, too)
+ - sessions/targets run-time, CPU/RAM/disk usage (max and final)
+ - guages
+ - sessions/targets active
+ - caching information
+ - packages/stages/snapshots in respective caches
+ - cache hit ratio/percent
+ - cache age
+ - timing information
+ - currently-running jobs
+ - specific tasks
+ - dependency calculation
+ - unpacking seeds
+ - easily retrievable (text files? BDB? SQLite? configurable?) for monitoring
+- enhance support for catalystrc
+ - source before each build step
+ - more like /etc/portage/bashrc or profile.bashrc
+ - adds ability for user-defined hooks
+
+Config:
+- security
+ - automated signing
+ - security updates
+- logging
+ - add logging support (partially done through use of catalyst.output.msg())
+ - file-based
+ - syslog
+ - add notification capabilities
+ - email
+ - snmp trap
+- seperate catalyst options from the package manager options
+ - options key should specify catalyst options only
+ - new keys for package managers
+ - portage_features
+ - pkgcore_features
+- clean up mixed host/target options
+ - save/restore host settings
+ - ccache (size, location, etc)
+ - distcc (distcc_hosts, allowed, logging, etc)
+ - icecream (icecream_hosts, etc)
+- add options to update the caches/seeds before processing targets
+ - validate caches, update as necessary
+ - trust caches to be accurate
+ - update packages in seed
+ - no updates
+ - minimal updates (toolchain and dependencies, basically)
+ - update world
+
+Targets:
+- add support for livedvd/liveusb
+ - do we use livecd/type or something new
+ - perform automatic actions, if configured
+ - auto-fetch non-target materials
+ - snapshots
+ - distfiles
+ - stages
+ - local absolute or relative path
+ - support URIs
+ - absolute URI path
+ - base URI path
+ - allow tarball names to be derived from target name
+ - create a default user
+- change user creation to be more flexible
+ - stage4 and netboot support
+- build boot software for targets on-demand
+ - removes cdtar requirement
+ - allows one to specify multiple bootloaders
+ - boot/loader: grub elilo
+ - netboot/boot/loader: pxelinux elilo
+ - livecd/boot/loader: isolinux elilo
+ - add ability to specify other "bootables" to build/install, like memtest86+
+ - do we use a single spec key or multiple?
+ - single
+ - boot/image: memtest|/path/to/image (pre-built, label=memtest)
+ - livecd/boot/image: memtest86+ (use PM to build)
+ - livecd/boot/image: memtest|build-memtest86+ (use PM, change label)
+ - livecd/boot/image: memtest|auto (locate in cache, try build, fail)
+ - multiple
+ - livecd/boot/labels: gentoo gentoo-nofb gentoo-nodetect memtest
+ - livecd/boot/image: gentoo gentoo gentoo memtest86 ("kernel" line)
+ - livecd/boot/opts: default default default,nodetect none
+ - do we also need a way to specify an initrd with this?
+ - setup defaults for each arch
+ - allow user-defined overrides/adds
+ - verify usability on arch
+- add variable support for spec files
+ - automatic substitution
+ - %DATESTAMP%
+ - %BUILDDIR%
+ - user-defined
+ - %DISTRIBUTION%
+ - %AUTHOR%
+- add new targets
+ - system (proof of concept)
+ - aligned with current stage3, but has all lower-level work done (toolchain)
+ - mkdir -p /tmp/stage3root/etc
+ - cp -a /etc/make.conf /etc/make.globals make.profile /tmp/stage3root/etc/
+ - ROOT=/tmp/stage3root PORTAGE_CONFIGROOT=/tmp/stage3root
+ - USE=build emerge -O1 baselayout
+ - emerge system
+ - eat cake
+ - world
+ - stage4 work-a-like
+ - all-stages
+ - perform stages 1, 2, and 3 (and 4?)
+ - all-images
+ - perform all-stages, if necessary
+ - build all image types
+ - LiveCD
+ - LiveDVD
+ - LiveUSB
+ - NetBoot
+ - standalone
+ - nfsroot
+- merge livecd-stage1 and livecd-stage2 into livecd target
+ - do we add targets for other live (LiveDVD, LiveUSB, LiveNet) media?
+- add support for multiple userland images on a single media
+ - 32-bit and 64-bit kernels/userlands
+ - multiple arches/ABIs
+ - normal and debug kernels/userlands
+- perform fetches before builds
+- smarter auto-resume/caching
+ - record file/dir metadata (such as for portage_confdir) to invalidate autoresume
+ - one failed autoresume invalidates all remaining autoresume points
+ - store failure info
+ - attempt normal --resume or equivalent auto-resume
+ - remove object from seed/package caches
+ - try --resume then --skipfirst to continue
+ - attempt to resolve issue, where possible
+ - merge failing package individually
+ - again with unset MAKEOPTS
+ - detect optional changes
+ - CFLAGS/LDFLAGS/etc
+ - reduce duplicated cache files
+ - shared caches, where possible
+ - symlinks
+ - hard links
+- include livecd-tools functionality
+ - userspace device enumeration/configuration
+ - pre-defined hardware information for OEM/VAR machines
+ - detect/setup network
+ - on-line updating support
+ - driver modules
+ - kernel (via kexec) when possible
+ - hardware definitions
+ - video detection/setup
+ - use hald/dbus to help standardize
+ - media-specific fixups
+ - opengl configuration
+ - auto-login on consoles
+ - setup serial console
+ - prevent rc system from unmounting incorrectly